From dc1ff83c2c4c23ee1a0d2cfbd0ac8281d5e73842 Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Tue, 3 Jun 2025 16:59:14 -0700 Subject: [PATCH 1/8] silence warning from project noises --- Hammerspoon.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Hammerspoon.xcodeproj/project.pbxproj b/Hammerspoon.xcodeproj/project.pbxproj index 19d8870ba..76f9e59e3 100644 --- a/Hammerspoon.xcodeproj/project.pbxproj +++ b/Hammerspoon.xcodeproj/project.pbxproj @@ -9203,6 +9203,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4F0C1C79272F5EA7002CA157 /* Extensions-Ideal.xcconfig */; buildSettings = { + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-Wno-missing-include-dirs", + ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -10483,6 +10487,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4F0C1C79272F5EA7002CA157 /* Extensions-Ideal.xcconfig */; buildSettings = { + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-Wno-missing-include-dirs", + ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -10491,6 +10499,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4F0C1C79272F5EA7002CA157 /* Extensions-Ideal.xcconfig */; buildSettings = { + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-Wno-missing-include-dirs", + ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; From 317d0736ad9b8775b429c9f1eb80f4851c86b6ec Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Tue, 3 Jun 2025 17:00:38 -0700 Subject: [PATCH 2/8] update Sentry podspec from 8.36.0 to 8.52.0 to silence C++ errors from stricter compiler --- Podfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile b/Podfile index ae0c89394..d2995cacf 100644 --- a/Podfile +++ b/Podfile @@ -13,7 +13,7 @@ pod 'CocoaLumberjack', '3.8.5' pod 'CocoaAsyncSocket', '7.6.5' pod 'CocoaHTTPServer', :git => 'https://github.com/Hammerspoon/CocoaHTTPServer.git' pod 'PocketSocket/Client', '1.0.1' -pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.36.0' +pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.52.0' pod 'Sparkle', '2.6.4', :configurations => ['Release'] pod 'MIKMIDI', '1.7.1' pod 'SocketRocket', '0.7.1' From 47092cc773420217b2126c1640349f52c7f59aac Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Tue, 3 Jun 2025 17:15:46 -0700 Subject: [PATCH 3/8] update Podfile.lock and pods --- Podfile.lock | 18 +- .../Headers/Private/Sentry/SentryANRTracker.h | 1 - .../Private/Sentry/SentryANRTrackerV1.h | 1 + .../Sentry/SentryANRTrackingIntegrationV2.h | 1 - .../Private/Sentry/SentryBaseIntegration.h | 2 +- .../SentryCrashIntegrationSessionHandler.h | 1 + .../SentryDebugImageProvider+HybridSDKs.h | 1 + .../SentryDispatchQueueProviderProtocol.h | 1 + .../SentryDispatchSourceProviderProtocol.h | 1 + .../Private/Sentry/SentryExtraPackages.h | 1 + .../Private/Sentry/SentryFeedbackAPI.h | 1 + .../Private/Sentry/SentryFileIOTracker.h | 1 + .../Sentry/SentryIntegrationProtocol.h | 1 + .../Private/Sentry/SentryNSDataTracker.h | 1 - .../Sentry/SentryNSFileManagerSwizzling.h | 1 + .../Private/Sentry/SentryProfilerDefines.h | 2 +- Pods/Headers/Private/Sentry/SentryReplayApi.h | 1 + .../Headers/Private/Sentry/SentrySdkPackage.h | 1 + .../Sentry/SentrySessionCrashedHandler.h | 1 - .../Sentry/SentrySessionReplayIntegration.h | 2 +- .../Private/Sentry/SentrySpanDataKey.h | 1 + .../Private/Sentry/SentrySpanOperation.h | 1 + .../Private/Sentry/SentrySpanOperations.h | 1 - .../Private/Sentry/SentryStatsdClient.h | 1 - .../Private/Sentry/SentryTraceOrigin.h | 1 + .../Private/Sentry/SentryTraceOrigins.h | 1 - .../Sentry/SentryUncaughtNSExceptions.h | 1 + .../Headers/Private/Sentry/SentryUserAccess.h | 1 + .../Sentry/SentryUserFeedbackIntegration.h | 1 + ...ryWatchdogTerminationBreadcrumbProcessor.h | 1 + Pods/Headers/Private/Sentry/SentryWeakMap.h | 1 + .../Headers/Public/Sentry/SentryFeedbackAPI.h | 1 + .../Public/Sentry/SentryIntegrationProtocol.h | 1 + Pods/Headers/Public/Sentry/SentryReplayApi.h | 1 + Pods/Local Podspecs/Sentry.podspec.json | 7 +- Pods/Manifest.lock | 18 +- Pods/Pods.xcodeproj/project.pbxproj | 7791 +++++++++-------- Pods/Sentry/LICENSE.md | 3 +- Pods/Sentry/README.md | 27 +- Pods/Sentry/Sources/Sentry/NSLocale+Sentry.m | 6 + .../Sources/Sentry/PrivateSentrySDKOnly.mm | 57 +- ...ryWatchdogTerminationBreadcrumbProcessor.m | 120 + .../Profiling/SentryContinuousProfiler.mm | 55 +- .../Sentry/Profiling/SentryLaunchProfiling.m | 230 +- .../SentryProfiledTracerConcurrency.mm | 259 +- .../SentryProfilerSerialization+Test.h | 5 +- .../Profiling/SentryProfilerSerialization.mm | 41 +- .../Sentry/Profiling/SentryProfilerState.mm | 2 +- .../Profiling/SentryProfilerTestHelpers.m | 18 +- .../Sentry/Profiling/SentryTraceProfiler.mm | 10 +- Pods/Sentry/Sources/Sentry/Public/Sentry.h | 3 + .../Sources/Sentry/Public/SentryAttachment.h | 8 +- .../Sources/Sentry/Public/SentryBaggage.h | 18 + .../Sources/Sentry/Public/SentryBreadcrumb.h | 25 +- .../Sources/Sentry/Public/SentryClient.h | 32 +- .../Public/SentryCrashExceptionApplication.h | 5 +- .../Sentry/Public/SentryDebugImageProvider.h | 19 +- .../Sources/Sentry/Public/SentryDebugMeta.h | 10 +- .../Sources/Sentry/Public/SentryDefines.h | 61 +- .../Sentry/Public/SentryEnvelopeItemHeader.h | 21 +- .../Sources/Sentry/Public/SentryError.h | 8 +- .../Sources/Sentry/Public/SentryEvent.h | 43 +- .../Sources/Sentry/Public/SentryException.h | 14 +- .../Sources/Sentry/Public/SentryFeedbackAPI.h | 38 + .../Sources/Sentry/Public/SentryFrame.h | 10 +- Pods/Sentry/Sources/Sentry/Public/SentryGeo.h | 10 +- .../Sentry/Public/SentryHttpStatusCodeRange.h | 8 +- Pods/Sentry/Sources/Sentry/Public/SentryHub.h | 34 +- .../Sentry/Public/SentryIntegrationProtocol.h | 21 + .../Sentry/Public/SentryMeasurementUnit.h | 8 +- .../Sources/Sentry/Public/SentryMechanism.h | 14 +- .../Sentry/Public/SentryMechanismMeta.h | 10 +- .../Sources/Sentry/Public/SentryMessage.h | 12 +- .../Sources/Sentry/Public/SentryNSError.h | 10 +- .../Sources/Sentry/Public/SentryOptions.h | 199 +- .../Public/SentryProfilingConditionals.h | 5 +- .../Sources/Sentry/Public/SentryReplayApi.h | 87 + .../Sources/Sentry/Public/SentryRequest.h | 10 +- Pods/Sentry/Sources/Sentry/Public/SentrySDK.h | 100 +- .../Sources/Sentry/Public/SentryScope.h | 30 +- .../Sentry/Public/SentrySerializable.h | 8 +- .../Sources/Sentry/Public/SentrySpanContext.h | 17 +- .../Sentry/Public/SentrySpanProtocol.h | 19 +- .../Sources/Sentry/Public/SentryStacktrace.h | 11 +- .../Sources/Sentry/Public/SentryThread.h | 10 +- .../Sentry/Public/SentryTraceContext.h | 27 +- .../Sources/Sentry/Public/SentryTraceHeader.h | 15 +- .../Sentry/Public/SentryTransactionContext.h | 66 +- .../Sentry/Sources/Sentry/Public/SentryUser.h | 10 +- .../Sentry/Public/SentryUserFeedback.h | 15 +- .../Sentry/Public/SentryWithoutUIKit.h | 3 + ...entryANRTracker.m => SentryANRTrackerV1.m} | 37 +- .../Sources/Sentry/SentryANRTrackerV2.m | 46 +- .../Sentry/SentryANRTrackingIntegration.m | 189 +- .../Sentry/SentryANRTrackingIntegrationV2.m | 131 - .../Sentry/SentryAppStartMeasurement.m | 1 - .../Sources/Sentry/SentryAppStartTracker.m | 12 +- .../SentryAppStartTrackingIntegration.m | 4 +- .../Sources/Sentry/SentryAppStateManager.m | 6 +- .../Sources/Sentry/SentryAsyncSafeLog.c | 2 +- .../Sentry/SentryAsynchronousOperation.m | 3 +- Pods/Sentry/Sources/Sentry/SentryAttachment.m | 1 - .../SentryAutoBreadcrumbTrackingIntegration.m | 15 +- .../SentryAutoSessionTrackingIntegration.m | 3 +- .../Sentry/Sources/Sentry/SentryBacktrace.cpp | 4 +- Pods/Sentry/Sources/Sentry/SentryBaggage.m | 28 + .../Sources/Sentry/SentryBaseIntegration.m | 62 +- .../Sources/Sentry/SentryBinaryImageCache.m | 38 +- Pods/Sentry/Sources/Sentry/SentryBreadcrumb.m | 28 +- .../Sources/Sentry/SentryBreadcrumbTracker.m | 34 +- .../Sources/Sentry/SentryBuildAppStartSpans.m | 7 +- .../Sources/Sentry/SentryByteCountFormatter.m | 2 +- Pods/Sentry/Sources/Sentry/SentryClient.m | 282 +- .../Sources/Sentry/SentryClientReport.m | 1 - .../SentryConcurrentRateLimitsDictionary.m | 4 +- .../Sources/Sentry/SentryCoreDataTracker.m | 49 +- .../SentryCoreDataTrackingIntegration.m | 3 +- .../Sentry/SentryCrashExceptionApplication.m | 22 +- .../Sentry/SentryCrashInstallationReporter.m | 3 +- .../Sources/Sentry/SentryCrashIntegration.m | 69 +- ...=> SentryCrashIntegrationSessionHandler.m} | 52 +- .../Sentry/SentryCrashReportConverter.m | 93 +- .../Sources/Sentry/SentryCrashReportSink.m | 5 +- .../Sources/Sentry/SentryCrashScopeObserver.m | 8 +- .../Sentry/SentryCrashStackEntryMapper.m | 4 +- .../Sources/Sentry/SentryCrashWrapper.m | 3 +- .../Sources/Sentry/SentryDataCategoryMapper.m | 26 +- Pods/Sentry/Sources/Sentry/SentryDateUtil.m | 7 +- Pods/Sentry/Sources/Sentry/SentryDateUtils.m | 3 +- .../Sources/Sentry/SentryDebugImageProvider.m | 88 +- .../Sources/Sentry/SentryDefaultRateLimits.m | 8 +- .../Sentry/SentryDelayedFramesTracker.m | 7 +- .../Sentry/SentryDependencyContainer.m | 484 +- Pods/Sentry/Sources/Sentry/SentryDevice.mm | 2 +- .../Sources/Sentry/SentryDispatchFactory.m | 14 + .../Sentry/SentryDispatchQueueWrapper.m | 3 +- .../Sentry/SentryDispatchSourceWrapper.m | 12 + Pods/Sentry/Sources/Sentry/SentryDsn.m | 15 +- Pods/Sentry/Sources/Sentry/SentryEnvelope.m | 27 +- .../Sources/Sentry/SentryEnvelopeItemHeader.m | 19 + .../Sources/Sentry/SentryEnvelopeRateLimit.m | 4 +- Pods/Sentry/Sources/Sentry/SentryError.mm | 2 +- Pods/Sentry/Sources/Sentry/SentryEvent.m | 8 +- .../Sentry/SentryExtraContextProvider.m | 28 +- .../Sources/Sentry/SentryExtraPackages.m | 46 + .../Sentry/Sources/Sentry/SentryFeedbackAPI.m | 43 + ...yNSDataTracker.m => SentryFileIOTracker.m} | 124 +- .../Sentry/SentryFileIOTrackingIntegration.m | 25 +- .../Sentry/Sources/Sentry/SentryFileManager.m | 1021 ++- .../Sources/Sentry/SentryFrameRemover.m | 1 - .../Sources/Sentry/SentryFramesTracker.m | 34 +- .../Sentry/SentryFramesTrackingIntegration.m | 5 +- Pods/Sentry/Sources/Sentry/SentryGeo.m | 19 +- .../Sources/Sentry/SentryHttpDateParser.m | 4 +- .../Sources/Sentry/SentryHttpTransport.m | 121 +- Pods/Sentry/Sources/Sentry/SentryHub.m | 185 +- Pods/Sentry/Sources/Sentry/SentryInAppLogic.m | 43 +- .../Sources/Sentry/SentryInstallation.m | 3 +- .../Sentry/Sources/Sentry/SentryLevelHelper.m | 17 +- Pods/Sentry/Sources/Sentry/SentryLogC.m | 92 +- Pods/Sentry/Sources/Sentry/SentryMessage.m | 15 +- Pods/Sentry/Sources/Sentry/SentryMeta.m | 2 +- .../Sentry/SentryMetricKitIntegration.m | 10 +- .../Sources/Sentry/SentryMigrateSessionInit.m | 3 +- .../Sources/Sentry/SentryMsgPackSerializer.m | 6 +- .../Sources/Sentry/SentryNSDataSwizzling.m | 87 +- .../Sentry/Sources/Sentry/SentryNSDataUtils.m | 7 - .../Sentry/SentryNSDictionarySanitize.m | 4 + .../Sentry/SentryNSFileManagerSwizzling.m | 97 + .../Sentry/SentryNSProcessInfoWrapper.mm | 14 +- .../Sources/Sentry/SentryNSURLRequest.m | 3 +- .../Sentry/SentryNSURLRequestBuilder.m | 40 +- .../Sources/Sentry/SentryNetworkTracker.m | 146 +- Pods/Sentry/Sources/Sentry/SentryOptions.m | 155 +- .../Sources/Sentry/SentryPerformanceTracker.m | 55 +- .../SentryPerformanceTrackingIntegration.m | 10 +- .../Sentry/SentryPredicateDescriptor.m | 10 +- .../Sources/Sentry/SentryProfileTimeseries.mm | 1 + Pods/Sentry/Sources/Sentry/SentryProfiler.mm | 119 +- .../Sources/Sentry/SentryPropagationContext.h | 6 +- .../Sources/Sentry/SentryPropagationContext.m | 13 +- .../Sentry/SentryQueueableRequestManager.m | 17 +- .../Sources/Sentry/SentryRateLimitParser.m | 8 +- .../Sources/Sentry/SentryReachability.m | 23 +- Pods/Sentry/Sources/Sentry/SentryReplayApi.m | 110 + .../Sources/Sentry/SentryRequestOperation.m | 3 +- .../Sentry/SentryRetryAfterHeaderParser.m | 8 +- Pods/Sentry/Sources/Sentry/SentrySDK.m | 174 +- .../Sources/Sentry/SentrySamplerDecision.m | 2 + Pods/Sentry/Sources/Sentry/SentrySampling.m | 25 +- .../Sources/Sentry/SentrySamplingProfiler.cpp | 8 +- Pods/Sentry/Sources/Sentry/SentryScope.m | 93 +- Pods/Sentry/Sources/Sentry/SentryScopeSyncC.c | 6 + .../Sources/Sentry/SentryScreenFrames.m | 4 +- Pods/Sentry/Sources/Sentry/SentryScreenshot.m | 92 +- .../Sentry/SentryScreenshotIntegration.m | 16 +- Pods/Sentry/Sources/Sentry/SentrySdkInfo.m | 171 +- Pods/Sentry/Sources/Sentry/SentrySdkPackage.m | 79 + .../Sources/Sentry/SentrySerialization.m | 131 +- Pods/Sentry/Sources/Sentry/SentrySession.m | 10 + .../Sentry/SentrySessionReplayIntegration.m | 462 +- .../Sources/Sentry/SentrySessionReplaySyncC.c | 23 +- .../Sources/Sentry/SentrySessionTracker.m | 16 +- Pods/Sentry/Sources/Sentry/SentrySpan.m | 38 +- .../Sentry/Sources/Sentry/SentrySpanContext.m | 16 +- .../Sentry/Sources/Sentry/SentrySpanDataKey.m | 4 + Pods/Sentry/Sources/Sentry/SentrySpanId.m | 3 +- .../Sources/Sentry/SentrySpanOperation.m | 20 + .../Sources/Sentry/SentrySpotlightTransport.m | 18 +- .../Sources/Sentry/SentryStacktraceBuilder.m | 3 +- .../Sources/Sentry/SentryStatsdClient.m | 52 - .../Sources/Sentry/SentrySubClassFinder.m | 26 +- Pods/Sentry/Sources/Sentry/SentrySwizzle.m | 173 +- Pods/Sentry/Sources/Sentry/SentrySysctl.m | 3 +- .../Sentry/SentrySystemEventBreadcrumbs.m | 3 +- .../Sources/Sentry/SentrySystemWrapper.mm | 2 +- .../Sources/Sentry/SentryThreadInspector.m | 4 +- Pods/Sentry/Sources/Sentry/SentryTime.mm | 9 - .../Sentry/SentryTimeToDisplayTracker.m | 66 +- .../Sources/Sentry/SentryTraceContext.m | 47 +- .../Sentry/Sources/Sentry/SentryTraceHeader.m | 2 +- .../Sentry/Sources/Sentry/SentryTraceOrigin.m | 15 + Pods/Sentry/Sources/Sentry/SentryTracer.m | 408 +- .../Sentry/SentryTracerConfiguration.m | 1 + .../Sentry/Sources/Sentry/SentryTransaction.m | 12 +- .../Sentry/SentryTransactionContext.mm | 117 +- .../Sources/Sentry/SentryTransportAdapter.m | 22 +- .../Sources/Sentry/SentryTransportFactory.m | 19 +- .../Sources/Sentry/SentryUIApplication.m | 6 +- .../Sources/Sentry/SentryUIDeviceWrapper.m | 3 +- .../Sources/Sentry/SentryUIEventTracker.m | 21 +- .../SentryUIEventTrackerTransactionMode.m | 73 +- .../Sentry/SentryUIEventTrackingIntegration.m | 7 +- ...SentryUIViewControllerPerformanceTracker.m | 382 +- .../Sentry/SentryUIViewControllerSwizzling.m | 133 +- .../Sentry/SentryUncaughtNSExceptions.m | 54 + Pods/Sentry/Sources/Sentry/SentryUser.m | 3 +- Pods/Sentry/Sources/Sentry/SentryUserAccess.m | 6 + .../Sources/Sentry/SentryUserFeedback.m | 4 +- .../Sentry/SentryUserFeedbackIntegration.m | 49 + .../Sources/Sentry/SentryViewHierarchy.m | 10 +- .../Sentry/SentryViewHierarchyIntegration.m | 11 +- .../Sentry/SentryWatchdogTerminationLogic.m | 6 +- .../SentryWatchdogTerminationScopeObserver.m | 119 +- .../Sentry/SentryWatchdogTerminationTracker.m | 73 +- ...ryWatchdogTerminationTrackingIntegration.m | 43 +- Pods/Sentry/Sources/Sentry/SentryWeakMap.m | 124 + .../HybridPublic/PrivateSentrySDKOnly.h | 36 +- .../HybridPublic/SentryAppStartMeasurement.h | 6 +- .../SentryBaseIntegration.h | 10 +- .../HybridPublic/SentryBinaryImageCache.h | 9 +- .../HybridPublic/SentryBreadcrumb+Private.h | 15 +- .../SentryDebugImageProvider+HybridSDKs.h | 44 + .../HybridPublic/SentryDependencyContainer.h | 108 +- .../include/HybridPublic/SentryEnvelope.h | 40 +- .../HybridPublic/SentryEnvelopeItemType.h | 4 + .../include/HybridPublic/SentryFormatter.h | 13 + .../HybridPublic/SentryFramesTracker.h | 16 +- .../HybridPublic/SentryOptions+HybridSDKs.h | 3 +- .../include/HybridPublic/SentryScreenFrames.h | 6 +- .../SentrySessionReplayIntegration-Hybrid.h | 27 +- .../SentrySessionReplayIntegration.h | 28 +- .../include/HybridPublic/SentrySwizzle.h | 58 +- .../include/HybridPublic/SentryUser+Private.h | 9 +- .../Sources/Sentry/include/NSLocale+Sentry.h | 1 + .../include/NSMutableDictionary+Sentry.h | 1 - ...entryANRTracker.h => SentryANRTrackerV1.h} | 28 +- .../Sentry/include/SentryANRTrackerV2.h | 9 +- .../include/SentryANRTrackingIntegration.h | 7 +- .../include/SentryANRTrackingIntegrationV2.h | 23 - .../Sentry/include/SentryAppStartTracker.h | 2 - .../SentryAppStartTrackingIntegration.h | 4 +- .../Sentry/include/SentryAppStateManager.h | 8 +- .../Sentry/include/SentryAttachment+Private.h | 4 +- .../SentryAutoBreadcrumbTrackingIntegration.h | 3 +- .../SentryAutoSessionTrackingIntegration.h | 4 +- .../Sentry/include/SentryBacktrace.hpp | 4 +- .../Sentry/include/SentryBreadcrumbTracker.h | 4 + .../Sentry/include/SentryBuildAppStartSpans.h | 2 +- .../Sentry/include/SentryClient+Private.h | 26 +- .../SentryConcurrentRateLimitsDictionary.h | 1 - .../Sentry/include/SentryCoreDataSwizzling.h | 1 - .../Sentry/include/SentryCoreDataTracker.h | 6 +- .../SentryCoreDataTrackingIntegration.h | 3 +- .../include/SentryCrashInstallationReporter.h | 5 +- .../Sentry/include/SentryCrashIntegration.h | 7 +- .../SentryCrashIntegrationSessionHandler.h | 29 + .../include/SentryCrashReportConverter.h | 3 +- .../Sentry/include/SentryCrashReportSink.h | 5 +- .../include/SentryCrashStackEntryMapper.h | 4 +- .../Sentry/include/SentryCrashWrapper.h | 2 - .../Sentry/include/SentryDataCategory.h | 3 +- .../Sentry/include/SentryDataCategoryMapper.h | 2 +- .../Sources/Sentry/include/SentryDateUtil.h | 4 +- .../Sources/Sentry/include/SentryDateUtils.h | 5 +- .../Sentry/include/SentryDefaultRateLimits.h | 5 +- .../include/SentryDelayedFramesTracker.h | 4 +- .../include/SentryDiscardReasonMapper.h | 1 - .../Sentry/include/SentryDispatchFactory.h | 20 +- .../SentryDispatchQueueProviderProtocol.h | 33 + .../SentryDispatchSourceProviderProtocol.h | 19 + .../include/SentryDispatchSourceWrapper.h | 5 + .../Sentry/include/SentryEnvelope+Private.h | 3 +- .../include/SentryEnvelopeAttachmentHeader.h | 2 +- .../Sentry/include/SentryEnvelopeRateLimit.h | 4 +- .../Sentry/include/SentryEvent+Private.h | 18 +- .../Sentry/include/SentryExtraPackages.h | 21 + ...yNSDataTracker.h => SentryFileIOTracker.h} | 46 +- .../include/SentryFileIOTrackingIntegration.h | 3 +- .../Sentry/include/SentryFileManager.h | 113 +- .../include/SentryFramesTrackingIntegration.h | 4 +- .../SentryHttpStatusCodeRange+Private.h | 3 +- .../Sentry/include/SentryHttpTransport.h | 5 +- .../Sentry/include/SentryHub+Private.h | 12 +- .../Sources/Sentry/include/SentryInAppLogic.h | 3 - .../Sentry/include/SentryInternalDefines.h | 14 +- .../include/SentryInternalSerializable.h | 7 +- .../Sentry/include/SentryLaunchProfiling.h | 8 + .../Sentry/include/SentryLevelHelper.h | 7 +- .../Sentry/Sources/Sentry/include/SentryLog.h | 46 +- .../Sources/Sentry/include/SentryLogC.h | 7 +- .../include/SentryMetricKitIntegration.h | 7 +- .../Sentry/include/SentryMetricProfiler.h | 1 - .../Sentry/include/SentryMsgPackSerializer.h | 6 +- .../Sentry/include/SentryNSDataSwizzling.h | 4 +- .../Sentry/include/SentryNSDataUtils.h | 6 - .../include/SentryNSDictionarySanitize.h | 3 +- .../include/SentryNSFileManagerSwizzling.h | 19 + .../include/SentryNSProcessInfoWrapper.h | 6 +- .../Sentry/include/SentryNSURLRequest.h | 3 +- .../include/SentryNSURLRequestBuilder.h | 15 +- .../Sentry/include/SentryNetworkTracker.h | 1 - .../SentryNetworkTrackingIntegration.h | 3 +- .../Sentry/include/SentryOptions+Private.h | 16 +- .../Sentry/include/SentryPerformanceTracker.h | 1 - .../SentryPerformanceTrackingIntegration.h | 4 +- .../Sources/Sentry/include/SentryPrivate.h | 18 +- .../include/SentryProfiledTracerConcurrency.h | 48 +- .../Sentry/include/SentryProfiler+Private.h | 14 +- .../SentryProfilerDefines.h | 5 +- .../include/SentryProfilerSerialization.h | 5 +- .../include/SentryProfilerState+ObjCpp.h | 3 +- .../include/SentryProfilerTestHelpers.h | 8 +- .../include/SentryQueueableRequestManager.h | 2 - .../Sentry/include/SentryRateLimitParser.h | 4 +- .../Sources/Sentry/include/SentryRateLimits.h | 1 - .../Sentry/include/SentryReachability.h | 9 +- .../Sentry/include/SentryRequestOperation.h | 2 - .../include/SentryRetryAfterHeaderParser.h | 4 +- .../Sentry/include/SentrySDK+Private.h | 17 +- .../include/SentrySampleDecision+Private.h | 2 - .../Sentry/include/SentrySamplerDecision.h | 6 +- .../Sources/Sentry/include/SentrySampling.h | 3 +- .../Sentry/include/SentrySamplingProfiler.hpp | 4 +- .../Sentry/include/SentryScope+Private.h | 8 +- .../Sentry/include/SentryScopeObserver.h | 2 + .../Sources/Sentry/include/SentryScopeSyncC.h | 4 + .../Sources/Sentry/include/SentryScreenshot.h | 17 +- .../include/SentryScreenshotIntegration.h | 7 +- .../Sources/Sentry/include/SentrySdkInfo.h | 51 +- .../Sources/Sentry/include/SentrySdkPackage.h | 21 + .../Sentry/include/SentrySerialization.h | 7 +- .../Sentry/include/SentrySession+Private.h | 4 +- .../Sources/Sentry/include/SentrySession.h | 5 + .../include/SentrySessionCrashedHandler.h | 25 - .../SentrySessionReplayIntegration+Private.h | 10 +- .../Sentry/include/SentrySessionTracker.h | 6 +- .../Sentry/include/SentrySpan+Private.h | 3 +- .../Sources/Sentry/include/SentrySpan.h | 9 +- .../include/SentrySpanContext+Private.h | 3 +- .../Sentry/include/SentrySpanDataKey.h | 28 + .../Sentry/include/SentrySpanOperation.h | 42 + .../Sentry/include/SentrySpanOperations.h | 7 - .../Sentry/include/SentrySpotlightTransport.h | 4 +- .../Sentry/include/SentryStacktraceBuilder.h | 4 +- .../Sentry/include/SentryStatsdClient.h | 16 - .../Sentry/include/SentrySubClassFinder.h | 4 +- .../Sources/Sentry/include/SentrySwift.h | 19 +- .../include/SentrySwiftAsyncIntegration.h | 4 +- .../include/SentrySystemEventBreadcrumbs.h | 1 - .../Sentry/include/SentrySystemWrapper.h | 1 - .../Sentry/include/SentryThreadInspector.h | 5 +- .../include/SentryThreadMetadataCache.hpp | 2 +- .../Sentry/include/SentryThreadState.hpp | 6 +- .../Sources/Sentry/include/SentryTime.h | 6 - .../include/SentryTimeToDisplayTracker.h | 8 +- .../Sentry/include/SentryTraceOrigin.h | 35 + .../Sentry/include/SentryTraceOrigins.h | 14 - .../Sentry/include/SentryTracer+Private.h | 5 +- .../Sources/Sentry/include/SentryTracer.h | 14 +- .../include/SentryTracerConfiguration.h | 21 +- .../SentryTransactionContext+Private.h | 19 +- .../Sources/Sentry/include/SentryTransport.h | 7 +- .../Sentry/include/SentryTransportAdapter.h | 20 +- .../Sentry/include/SentryTransportFactory.h | 10 +- .../Sentry/include/SentryUIEventTracker.h | 3 +- .../Sentry/include/SentryUIEventTrackerMode.h | 2 +- .../SentryUIEventTrackingIntegration.h | 3 +- ...SentryUIViewControllerPerformanceTracker.h | 29 +- .../include/SentryUIViewControllerSwizzling.h | 7 +- .../include/SentryUncaughtNSExceptions.h | 27 + .../Sources/Sentry/include/SentryUserAccess.h | 13 + .../include/SentryUserFeedbackIntegration.h | 17 + .../include/SentryViewHierarchyIntegration.h | 5 +- ...ryWatchdogTerminationBreadcrumbProcessor.h | 20 + .../include/SentryWatchdogTerminationLogic.h | 6 +- .../SentryWatchdogTerminationScopeObserver.h | 8 +- .../SentryWatchdogTerminationTracker.h | 18 +- ...ryWatchdogTerminationTrackingIntegration.h | 7 +- .../Sources/Sentry/include/SentryWeakMap.h | 48 + .../SentryCrashInstallation+Private.h | 3 +- .../Installations/SentryCrashInstallation.m | 10 +- .../SentryCrashMonitor_CPPException.cpp | 5 +- .../Monitors/SentryCrashMonitor_System.m | 3 +- .../SentryCrash/Recording/SentryCrash.m | 7 +- .../Recording/SentryCrashBinaryImageCache.c | 4 +- .../SentryCrash/Recording/SentryCrashC.c | 31 +- .../SentryCrash/Recording/SentryCrashC.h | 41 +- .../Recording/SentryCrashCachedData.c | 9 - .../Recording/SentryCrashCachedData.h | 2 - .../SentryCrash/Recording/SentryCrashDoctor.m | 20 +- .../SentryCrash/Recording/SentryCrashReport.c | 17 +- .../Recording/SentryCrashReportFields.h | 3 - .../Recording/SentryCrashReportFixer.c | 2 +- .../Recording/Tools/SentryCrashCPU_arm64.c | 16 +- .../Tools/SentryCrashDynamicLinker.c | 60 +- .../Tools/SentryCrashDynamicLinker.h | 5 +- .../Recording/Tools/SentryCrashFileUtils.c | 14 +- .../Recording/Tools/SentryCrashJSONCodec.c | 10 +- .../Tools/SentryCrashJSONCodecObjC.m | 3 +- .../Tools/SentryCrashMachineContext.c | 6 - .../Tools/SentryCrashMachineContext.h | 7 +- .../Tools/SentryCrashMachineContext_Apple.h | 3 + .../Recording/Tools/SentryCrashObjCApple.h | 2 +- .../Tools/SentryCrashStackCursor_SelfThread.m | 15 +- .../Recording/Tools/SentryCrashSysCtl.c | 2 +- .../Filters/SentryCrashReportFilterBasic.m | 15 +- .../Filters/Tools/SentryCrashVarArgs.h | 2 +- .../Sources/Swift/Core/Extensions/Locks.swift | 33 + .../Extensions/NumberExtensions.swift | 0 .../Extensions/StringExtensions.swift | 0 .../Extensions/UIViewExtensions.swift | 13 +- .../{ => Core}/Helper/Log/SentryLevel.swift | 11 +- .../Helper/SentryBaggageSerialization.swift | 0 .../Helper/SentryCurrentDateProvider.swift | 40 + .../Core/Helper/SentryFileContents.swift | 13 + .../Integrations/ANR/SentryANRTracker.swift | 12 + .../ANR/SentryANRTrackerV2Delegate.swift | 21 + .../Core/Integrations/ANR/SentryANRType.swift | 52 + .../SentryFramesDelayResult.swift | 0 .../Performance/SentryProfileOptions.swift | 80 + .../SentryTransactionNameSource.swift | 0 .../Performance/SwizzleClassNameExclude.swift | 14 + .../MetricKit/SentryMXCallStackTree.swift | 28 +- .../MetricKit/SentryMXManager.swift | 10 +- .../Swift/{ => Core}/Protocol/SentryId.swift | 4 +- .../Core/Protocol/SentryRedactOptions.swift | 17 + ...ntryViewControllerBreadcrumbTracking.swift | 14 + .../Core/SentryExperimentalOptions.swift | 26 + .../Sources/Swift/Core/SwiftDescriptor.swift | 30 + .../Tools/HTTPHeaderSanitizer.swift | 4 +- .../Sources/Swift/Core/Tools/SentryLog.swift | 102 + .../{ => Core}/Tools/SentryLogOutput.swift | 0 .../{ => Core}/Tools/UIImageHelper.swift | 5 +- .../Tools/URLSessionTaskHelper.swift | 4 +- .../Swift/{ => Core}/Tools/UrlSanitized.swift | 12 +- .../SentryDefaultMaskRenderer.swift | 83 + .../SentryDefaultViewRenderer.swift | 17 + .../SentryGraphicsImageRenderer.swift | 93 + .../ViewCapture/SentryMaskRenderer.swift | 16 + .../ViewCapture/SentryMaskRendererV2.swift | 21 + .../ViewCapture/SentryViewPhotographer.swift | 90 + .../ViewCapture/SentryViewRenderer.swift | 11 + .../ViewCapture/SentryViewRendererV2.swift | 28 + .../SentryViewScreenshotProvider.swift | 2 +- .../Tools/ViewCapture/UIRedactBuilder.swift | 367 + .../Sources/Swift/Extensions/NSLock.swift | 15 - .../Helper/SentryCurrentDateProvider.swift | 21 - .../Helper/SentryEnabledFeaturesBuilder.swift | 40 +- .../Swift/Helper/SentryFileContents.swift | 13 - .../Swift/Helper/SentryIconography.swift | 215 + .../ANR/SentryANRTrackerV2Delegate.swift | 13 - .../Performance/IO/Data+SentryTracing.swift | 69 + .../IO/FileManager+SentryTracing.swift | 216 + .../IO/SentryFileIOTracker+SwiftHelpers.swift | 199 + .../Preview/SentryMaskingPreviewView.swift | 74 + .../RRWeb/SentryRRWebBreadcrumbEvent.swift | 1 - .../RRWeb/SentryRRWebOptionsEvent.swift | 31 + .../RRWeb/SentryRRWebSpanEvent.swift | 1 - .../RRWeb/SentryRRWebVideoEvent.swift | 1 - .../SessionReplay/SentryOnDemandReplay.swift | 550 +- .../SentryOnDemandReplayError.swift | 6 + .../SessionReplay/SentryPixelBuffer.swift | 7 +- .../SentryRenderVideoResult.swift | 4 + .../SessionReplay/SentryReplayEvent.swift | 16 +- .../SessionReplay/SentryReplayFrame.swift | 7 + .../SessionReplay/SentryReplayOptions.swift | 387 +- .../SessionReplay/SentryReplayRecording.swift | 3 +- .../SessionReplay/SentryReplayType.swift | 10 +- .../SentryReplayVideoMaker.swift | 9 +- .../SentrySRDefaultBreadcrumbConverter.swift | 7 + .../SessionReplay/SentrySessionReplay.swift | 209 +- .../SentrySessionReplayDelegate.swift | 13 + .../SessionReplay/SentryTouchTracker.swift | 71 +- .../SentryUserFeedbackConfiguration.swift | 152 + .../SentryUserFeedbackFormConfiguration.swift | 161 + ...SentryUserFeedbackThemeConfiguration.swift | 143 + ...entryUserFeedbackWidgetConfiguration.swift | 57 + .../UserFeedback/SentryFeedback.swift | 93 + .../SentryUserFeedbackFormController.swift | 172 + .../SentryUserFeedbackFormViewModel.swift | 491 ++ .../SentryUserFeedbackIntegrationDriver.swift | 183 + .../SentryUserFeedbackWidget.swift | 108 + ...eedbackWidgetButtonMegaphoneIconView.swift | 41 + .../SentryUserFeedbackWidgetButtonView.swift | 193 + ...yWatchdogTerminationContextProcessor.swift | 42 + .../Metrics/BucketsMetricsAggregator.swift | 241 - .../Sources/Swift/Metrics/CounterMetric.swift | 20 - .../Swift/Metrics/DistributionMetric.swift | 22 - .../Sources/Swift/Metrics/EncodeMetrics.swift | 72 - .../Sources/Swift/Metrics/GaugeMetric.swift | 34 - .../Metrics/LocalMetricsAggregator.swift | 70 - .../Sentry/Sources/Swift/Metrics/Metric.swift | 31 - .../Swift/Metrics/MetricsAggregator.swift | 48 - .../Swift/Metrics/SentryMetricsAPI.swift | 148 - .../Swift/Metrics/SentryMetricsClient.swift | 19 - .../Sources/Swift/Metrics/SetMetric.swift | 22 - .../SentryScopeContextPersistentStore.swift | 115 + .../Codable/DecodeArbitraryData.swift | 134 + .../Codable/NSNumberDecodableWrapper.swift | 22 + .../Codable/SentryBreadcrumbCodable.swift | 35 + .../Protocol/Codable/SentryCodable.swift | 41 + .../Codable/SentryDebugMetaCodable.swift | 32 + .../Protocol/Codable/SentryEventCodable.swift | 97 + .../Protocol/Codable/SentryEventDecoder.swift | 8 + .../Codable/SentryExceptionCodable.swift | 28 + .../Protocol/Codable/SentryFrameCodable.swift | 42 + .../Protocol/Codable/SentryGeoCodable.swift | 20 + .../Codable/SentryMechanismCodable.swift | 31 + .../Codable/SentryMechanismMetaCodable.swift | 24 + .../Protocol/Codable/SentryMessage.swift | 21 + .../Codable/SentryNSErrorCodable.swift | 18 + .../Codable/SentryRequestCodable.swift | 29 + .../Codable/SentryStacktraceCodable.swift | 22 + .../Codable/SentryThreadCodable.swift | 29 + .../Protocol/Codable/SentryUserCodable.swift | 41 + .../Protocol/SentryIntegrationProtocol.swift | 15 - .../Swift/Protocol/SentryRedactOptions.swift | 7 - .../Swift/SentryExperimentalOptions.swift | 18 - .../Sources/Swift/SwiftDescriptor.swift | 15 - .../Swift/Tools/SentryLog+Configure.swift | 15 + .../Sources/Swift/Tools/SentryLog.swift | 76 - .../Swift/Tools/SentryViewPhotographer.swift | 55 - .../Sources/Swift/Tools/UIRedactBuilder.swift | 202 - ...Pods-Hammerspoon-acknowledgements.markdown | 3 +- .../Pods-Hammerspoon-acknowledgements.plist | 3 +- .../Pods-Hammerspoon.debug.xcconfig | 1 + .../Pods-Hammerspoon.profile.xcconfig | 1 + .../Pods-Hammerspoon.release.xcconfig | 1 + .../ResourceBundle-Sentry-Sentry-Info.plist | 2 +- .../Sentry/Sentry-umbrella.h | 3 + .../Sentry/Sentry.debug.xcconfig | 1 + .../Sentry/Sentry.release.xcconfig | 1 + 563 files changed, 18531 insertions(+), 9102 deletions(-) delete mode 120000 Pods/Headers/Private/Sentry/SentryANRTracker.h create mode 120000 Pods/Headers/Private/Sentry/SentryANRTrackerV1.h delete mode 120000 Pods/Headers/Private/Sentry/SentryANRTrackingIntegrationV2.h create mode 120000 Pods/Headers/Private/Sentry/SentryCrashIntegrationSessionHandler.h create mode 120000 Pods/Headers/Private/Sentry/SentryDebugImageProvider+HybridSDKs.h create mode 120000 Pods/Headers/Private/Sentry/SentryDispatchQueueProviderProtocol.h create mode 120000 Pods/Headers/Private/Sentry/SentryDispatchSourceProviderProtocol.h create mode 120000 Pods/Headers/Private/Sentry/SentryExtraPackages.h create mode 120000 Pods/Headers/Private/Sentry/SentryFeedbackAPI.h create mode 120000 Pods/Headers/Private/Sentry/SentryFileIOTracker.h create mode 120000 Pods/Headers/Private/Sentry/SentryIntegrationProtocol.h delete mode 120000 Pods/Headers/Private/Sentry/SentryNSDataTracker.h create mode 120000 Pods/Headers/Private/Sentry/SentryNSFileManagerSwizzling.h create mode 120000 Pods/Headers/Private/Sentry/SentryReplayApi.h create mode 120000 Pods/Headers/Private/Sentry/SentrySdkPackage.h delete mode 120000 Pods/Headers/Private/Sentry/SentrySessionCrashedHandler.h create mode 120000 Pods/Headers/Private/Sentry/SentrySpanDataKey.h create mode 120000 Pods/Headers/Private/Sentry/SentrySpanOperation.h delete mode 120000 Pods/Headers/Private/Sentry/SentrySpanOperations.h delete mode 120000 Pods/Headers/Private/Sentry/SentryStatsdClient.h create mode 120000 Pods/Headers/Private/Sentry/SentryTraceOrigin.h delete mode 120000 Pods/Headers/Private/Sentry/SentryTraceOrigins.h create mode 120000 Pods/Headers/Private/Sentry/SentryUncaughtNSExceptions.h create mode 120000 Pods/Headers/Private/Sentry/SentryUserAccess.h create mode 120000 Pods/Headers/Private/Sentry/SentryUserFeedbackIntegration.h create mode 120000 Pods/Headers/Private/Sentry/SentryWatchdogTerminationBreadcrumbProcessor.h create mode 120000 Pods/Headers/Private/Sentry/SentryWeakMap.h create mode 120000 Pods/Headers/Public/Sentry/SentryFeedbackAPI.h create mode 120000 Pods/Headers/Public/Sentry/SentryIntegrationProtocol.h create mode 120000 Pods/Headers/Public/Sentry/SentryReplayApi.h create mode 100644 Pods/Sentry/Sources/Sentry/Processors/SentryWatchdogTerminationBreadcrumbProcessor.m create mode 100644 Pods/Sentry/Sources/Sentry/Public/SentryFeedbackAPI.h create mode 100644 Pods/Sentry/Sources/Sentry/Public/SentryIntegrationProtocol.h create mode 100644 Pods/Sentry/Sources/Sentry/Public/SentryReplayApi.h rename Pods/Sentry/Sources/Sentry/{SentryANRTracker.m => SentryANRTrackerV1.m} (85%) delete mode 100644 Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegrationV2.m rename Pods/Sentry/Sources/Sentry/{SentrySessionCrashedHandler.m => SentryCrashIntegrationSessionHandler.m} (52%) create mode 100644 Pods/Sentry/Sources/Sentry/SentryExtraPackages.m create mode 100644 Pods/Sentry/Sources/Sentry/SentryFeedbackAPI.m rename Pods/Sentry/Sources/Sentry/{SentryNSDataTracker.m => SentryFileIOTracker.m} (62%) create mode 100644 Pods/Sentry/Sources/Sentry/SentryNSFileManagerSwizzling.m create mode 100644 Pods/Sentry/Sources/Sentry/SentryReplayApi.m create mode 100644 Pods/Sentry/Sources/Sentry/SentrySdkPackage.m create mode 100644 Pods/Sentry/Sources/Sentry/SentrySpanDataKey.m create mode 100644 Pods/Sentry/Sources/Sentry/SentrySpanOperation.m delete mode 100644 Pods/Sentry/Sources/Sentry/SentryStatsdClient.m create mode 100644 Pods/Sentry/Sources/Sentry/SentryTraceOrigin.m create mode 100644 Pods/Sentry/Sources/Sentry/SentryUncaughtNSExceptions.m create mode 100644 Pods/Sentry/Sources/Sentry/SentryUserAccess.m create mode 100644 Pods/Sentry/Sources/Sentry/SentryUserFeedbackIntegration.m create mode 100644 Pods/Sentry/Sources/Sentry/SentryWeakMap.m rename Pods/Sentry/Sources/Sentry/include/{ => HybridPublic}/SentryBaseIntegration.h (84%) create mode 100644 Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDebugImageProvider+HybridSDKs.h rename Pods/Sentry/Sources/Sentry/include/{ => HybridPublic}/SentrySessionReplayIntegration.h (60%) rename Pods/Sentry/Sources/Sentry/include/{SentryANRTracker.h => SentryANRTrackerV1.h} (73%) delete mode 100644 Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegrationV2.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryCrashIntegrationSessionHandler.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryDispatchQueueProviderProtocol.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceProviderProtocol.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryExtraPackages.h rename Pods/Sentry/Sources/Sentry/include/{SentryNSDataTracker.h => SentryFileIOTracker.h} (53%) create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryNSFileManagerSwizzling.h rename Pods/Sentry/Sources/Sentry/{Profiling => include}/SentryProfilerDefines.h (93%) create mode 100644 Pods/Sentry/Sources/Sentry/include/SentrySdkPackage.h delete mode 100644 Pods/Sentry/Sources/Sentry/include/SentrySessionCrashedHandler.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentrySpanDataKey.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentrySpanOperation.h delete mode 100644 Pods/Sentry/Sources/Sentry/include/SentrySpanOperations.h delete mode 100644 Pods/Sentry/Sources/Sentry/include/SentryStatsdClient.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryTraceOrigin.h delete mode 100644 Pods/Sentry/Sources/Sentry/include/SentryTraceOrigins.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryUncaughtNSExceptions.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryUserAccess.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryUserFeedbackIntegration.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationBreadcrumbProcessor.h create mode 100644 Pods/Sentry/Sources/Sentry/include/SentryWeakMap.h create mode 100644 Pods/Sentry/Sources/Swift/Core/Extensions/Locks.swift rename Pods/Sentry/Sources/Swift/{ => Core}/Extensions/NumberExtensions.swift (100%) rename Pods/Sentry/Sources/Swift/{ => Core}/Extensions/StringExtensions.swift (100%) rename Pods/Sentry/Sources/Swift/{ => Core}/Extensions/UIViewExtensions.swift (54%) rename Pods/Sentry/Sources/Swift/{ => Core}/Helper/Log/SentryLevel.swift (73%) rename Pods/Sentry/Sources/Swift/{ => Core}/Helper/SentryBaggageSerialization.swift (100%) create mode 100644 Pods/Sentry/Sources/Swift/Core/Helper/SentryCurrentDateProvider.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Helper/SentryFileContents.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTracker.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTrackerV2Delegate.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRType.swift rename Pods/Sentry/Sources/Swift/{ => Core}/Integrations/FramesTracking/SentryFramesDelayResult.swift (100%) create mode 100644 Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SentryProfileOptions.swift rename Pods/Sentry/Sources/Swift/{ => Core}/Integrations/Performance/SentryTransactionNameSource.swift (100%) create mode 100644 Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SwizzleClassNameExclude.swift rename Pods/Sentry/Sources/Swift/{ => Core}/MetricKit/SentryMXCallStackTree.swift (69%) rename Pods/Sentry/Sources/Swift/{ => Core}/MetricKit/SentryMXManager.swift (92%) rename Pods/Sentry/Sources/Swift/{ => Core}/Protocol/SentryId.swift (95%) create mode 100644 Pods/Sentry/Sources/Swift/Core/Protocol/SentryRedactOptions.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Protocol/SentryViewControllerBreadcrumbTracking.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/SentryExperimentalOptions.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/SwiftDescriptor.swift rename Pods/Sentry/Sources/Swift/{ => Core}/Tools/HTTPHeaderSanitizer.swift (72%) create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/SentryLog.swift rename Pods/Sentry/Sources/Swift/{ => Core}/Tools/SentryLogOutput.swift (100%) rename Pods/Sentry/Sources/Swift/{ => Core}/Tools/UIImageHelper.swift (95%) rename Pods/Sentry/Sources/Swift/{ => Core}/Tools/URLSessionTaskHelper.swift (77%) rename Pods/Sentry/Sources/Swift/{ => Core}/Tools/UrlSanitized.swift (70%) create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryDefaultMaskRenderer.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryDefaultViewRenderer.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryGraphicsImageRenderer.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRenderer.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRendererV2.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewPhotographer.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRenderer.swift create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRendererV2.swift rename Pods/Sentry/Sources/Swift/{Tools => Core/Tools/ViewCapture}/SentryViewScreenshotProvider.swift (69%) create mode 100644 Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/UIRedactBuilder.swift delete mode 100644 Pods/Sentry/Sources/Swift/Extensions/NSLock.swift delete mode 100644 Pods/Sentry/Sources/Swift/Helper/SentryCurrentDateProvider.swift delete mode 100644 Pods/Sentry/Sources/Swift/Helper/SentryFileContents.swift create mode 100644 Pods/Sentry/Sources/Swift/Helper/SentryIconography.swift delete mode 100644 Pods/Sentry/Sources/Swift/Integrations/ANR/SentryANRTrackerV2Delegate.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/Performance/IO/SentryFileIOTracker+SwiftHelpers.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/SessionReplay/Preview/SentryMaskingPreviewView.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebOptionsEvent.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplayError.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentryRenderVideoResult.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentryReplayFrame.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentrySessionReplayDelegate.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackConfiguration.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackFormConfiguration.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackThemeConfiguration.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackWidgetConfiguration.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/SentryFeedback.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackFormController.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackFormViewModel.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackIntegrationDriver.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackWidget.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackWidgetButtonMegaphoneIconView.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackWidgetButtonView.swift create mode 100644 Pods/Sentry/Sources/Swift/Integrations/WatchdogTerminations/Processors/SentryWatchdogTerminationContextProcessor.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/BucketsMetricsAggregator.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/CounterMetric.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/DistributionMetric.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/EncodeMetrics.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/GaugeMetric.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/LocalMetricsAggregator.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/Metric.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/MetricsAggregator.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/SentryMetricsAPI.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/SentryMetricsClient.swift delete mode 100644 Pods/Sentry/Sources/Swift/Metrics/SetMetric.swift create mode 100644 Pods/Sentry/Sources/Swift/Persistence/SentryScopeContextPersistentStore.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/DecodeArbitraryData.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/NSNumberDecodableWrapper.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryBreadcrumbCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryDebugMetaCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryEventCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryEventDecoder.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryExceptionCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryFrameCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryGeoCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryMechanismCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryMechanismMetaCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryMessage.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryNSErrorCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryRequestCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryStacktraceCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryThreadCodable.swift create mode 100644 Pods/Sentry/Sources/Swift/Protocol/Codable/SentryUserCodable.swift delete mode 100644 Pods/Sentry/Sources/Swift/Protocol/SentryIntegrationProtocol.swift delete mode 100644 Pods/Sentry/Sources/Swift/Protocol/SentryRedactOptions.swift delete mode 100644 Pods/Sentry/Sources/Swift/SentryExperimentalOptions.swift delete mode 100644 Pods/Sentry/Sources/Swift/SwiftDescriptor.swift create mode 100644 Pods/Sentry/Sources/Swift/Tools/SentryLog+Configure.swift delete mode 100644 Pods/Sentry/Sources/Swift/Tools/SentryLog.swift delete mode 100644 Pods/Sentry/Sources/Swift/Tools/SentryViewPhotographer.swift delete mode 100644 Pods/Sentry/Sources/Swift/Tools/UIRedactBuilder.swift diff --git a/Podfile.lock b/Podfile.lock index b8357a411..eec191007 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -12,9 +12,9 @@ PODS: - PocketSocket/Client (1.0.1): - PocketSocket/Core - PocketSocket/Core (1.0.1) - - Sentry (8.36.0): - - Sentry/Core (= 8.36.0) - - Sentry/Core (8.36.0) + - Sentry (8.52.0): + - Sentry/Core (= 8.52.0) + - Sentry/Core (8.52.0) - SocketRocket (0.7.1) - Sparkle (2.6.4) @@ -26,7 +26,7 @@ DEPENDENCIES: - MIKMIDI (= 1.7.1) - ORSSerialPort (= 2.1.0) - PocketSocket/Client (= 1.0.1) - - Sentry (from `https://github.com/getsentry/sentry-cocoa.git`, tag `8.36.0`) + - Sentry (from `https://github.com/getsentry/sentry-cocoa.git`, tag `8.52.0`) - SocketRocket (= 0.7.1) - Sparkle (= 2.6.4) @@ -46,7 +46,7 @@ EXTERNAL SOURCES: :git: https://github.com/Hammerspoon/CocoaHTTPServer.git Sentry: :git: https://github.com/getsentry/sentry-cocoa.git - :tag: 8.36.0 + :tag: 8.52.0 CHECKOUT OPTIONS: CocoaHTTPServer: @@ -54,7 +54,7 @@ CHECKOUT OPTIONS: :git: https://github.com/Hammerspoon/CocoaHTTPServer.git Sentry: :git: https://github.com/getsentry/sentry-cocoa.git - :tag: 8.36.0 + :tag: 8.52.0 SPEC CHECKSUMS: ASCIImage: bcff9650deae86e0e0ac310145cc628948201ab8 @@ -64,10 +64,10 @@ SPEC CHECKSUMS: MIKMIDI: f53dca2f372e71183ecdd2b35c984c1c2cd11cbc ORSSerialPort: d2d5d131797453430c557ba8dc7dcbcae20ff2e5 PocketSocket: 9c6867d66fb4f962af96b9b07f4b45bb561b2c2a - Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 + Sentry: 6838d39e8bfc183a8bb6eb1c5e1b730c773ef1c1 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Sparkle: 5f8960a7a119aa7d45dacc0d5837017170bc5675 -PODFILE CHECKSUM: 62fad4323b6e7a15a8190b62cddcaa4cb0408157 +PODFILE CHECKSUM: a5e11f8907b2657ad37425916c2ebbf5af11b681 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/Pods/Headers/Private/Sentry/SentryANRTracker.h b/Pods/Headers/Private/Sentry/SentryANRTracker.h deleted file mode 120000 index e5b3d397a..000000000 --- a/Pods/Headers/Private/Sentry/SentryANRTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../Sentry/Sources/Sentry/include/SentryANRTracker.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryANRTrackerV1.h b/Pods/Headers/Private/Sentry/SentryANRTrackerV1.h new file mode 120000 index 000000000..dfad20687 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryANRTrackerV1.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryANRTrackerV1.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryANRTrackingIntegrationV2.h b/Pods/Headers/Private/Sentry/SentryANRTrackingIntegrationV2.h deleted file mode 120000 index 84fdd7a1f..000000000 --- a/Pods/Headers/Private/Sentry/SentryANRTrackingIntegrationV2.h +++ /dev/null @@ -1 +0,0 @@ -../../../Sentry/Sources/Sentry/include/SentryANRTrackingIntegrationV2.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryBaseIntegration.h b/Pods/Headers/Private/Sentry/SentryBaseIntegration.h index b4db4fa2b..0cfee070e 120000 --- a/Pods/Headers/Private/Sentry/SentryBaseIntegration.h +++ b/Pods/Headers/Private/Sentry/SentryBaseIntegration.h @@ -1 +1 @@ -../../../Sentry/Sources/Sentry/include/SentryBaseIntegration.h \ No newline at end of file +../../../Sentry/Sources/Sentry/include/HybridPublic/SentryBaseIntegration.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryCrashIntegrationSessionHandler.h b/Pods/Headers/Private/Sentry/SentryCrashIntegrationSessionHandler.h new file mode 120000 index 000000000..dc429840c --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryCrashIntegrationSessionHandler.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryCrashIntegrationSessionHandler.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryDebugImageProvider+HybridSDKs.h b/Pods/Headers/Private/Sentry/SentryDebugImageProvider+HybridSDKs.h new file mode 120000 index 000000000..843016ede --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryDebugImageProvider+HybridSDKs.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/HybridPublic/SentryDebugImageProvider+HybridSDKs.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryDispatchQueueProviderProtocol.h b/Pods/Headers/Private/Sentry/SentryDispatchQueueProviderProtocol.h new file mode 120000 index 000000000..2660bc3ba --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryDispatchQueueProviderProtocol.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryDispatchQueueProviderProtocol.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryDispatchSourceProviderProtocol.h b/Pods/Headers/Private/Sentry/SentryDispatchSourceProviderProtocol.h new file mode 120000 index 000000000..eda6d547f --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryDispatchSourceProviderProtocol.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryDispatchSourceProviderProtocol.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryExtraPackages.h b/Pods/Headers/Private/Sentry/SentryExtraPackages.h new file mode 120000 index 000000000..d82325987 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryExtraPackages.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryExtraPackages.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryFeedbackAPI.h b/Pods/Headers/Private/Sentry/SentryFeedbackAPI.h new file mode 120000 index 000000000..640a96728 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryFeedbackAPI.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/Public/SentryFeedbackAPI.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryFileIOTracker.h b/Pods/Headers/Private/Sentry/SentryFileIOTracker.h new file mode 120000 index 000000000..64812eca3 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryFileIOTracker.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryFileIOTracker.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryIntegrationProtocol.h b/Pods/Headers/Private/Sentry/SentryIntegrationProtocol.h new file mode 120000 index 000000000..2f3195c68 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryIntegrationProtocol.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/Public/SentryIntegrationProtocol.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryNSDataTracker.h b/Pods/Headers/Private/Sentry/SentryNSDataTracker.h deleted file mode 120000 index b0d92c90b..000000000 --- a/Pods/Headers/Private/Sentry/SentryNSDataTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../Sentry/Sources/Sentry/include/SentryNSDataTracker.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryNSFileManagerSwizzling.h b/Pods/Headers/Private/Sentry/SentryNSFileManagerSwizzling.h new file mode 120000 index 000000000..9b1ad4785 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryNSFileManagerSwizzling.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryNSFileManagerSwizzling.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryProfilerDefines.h b/Pods/Headers/Private/Sentry/SentryProfilerDefines.h index ff8534b60..998b1c7db 120000 --- a/Pods/Headers/Private/Sentry/SentryProfilerDefines.h +++ b/Pods/Headers/Private/Sentry/SentryProfilerDefines.h @@ -1 +1 @@ -../../../Sentry/Sources/Sentry/Profiling/SentryProfilerDefines.h \ No newline at end of file +../../../Sentry/Sources/Sentry/include/SentryProfilerDefines.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryReplayApi.h b/Pods/Headers/Private/Sentry/SentryReplayApi.h new file mode 120000 index 000000000..5e763142c --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryReplayApi.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/Public/SentryReplayApi.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentrySdkPackage.h b/Pods/Headers/Private/Sentry/SentrySdkPackage.h new file mode 120000 index 000000000..bd36b55de --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentrySdkPackage.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentrySdkPackage.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentrySessionCrashedHandler.h b/Pods/Headers/Private/Sentry/SentrySessionCrashedHandler.h deleted file mode 120000 index 644d9ab0a..000000000 --- a/Pods/Headers/Private/Sentry/SentrySessionCrashedHandler.h +++ /dev/null @@ -1 +0,0 @@ -../../../Sentry/Sources/Sentry/include/SentrySessionCrashedHandler.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentrySessionReplayIntegration.h b/Pods/Headers/Private/Sentry/SentrySessionReplayIntegration.h index f9febf83c..b8e4e0a3a 120000 --- a/Pods/Headers/Private/Sentry/SentrySessionReplayIntegration.h +++ b/Pods/Headers/Private/Sentry/SentrySessionReplayIntegration.h @@ -1 +1 @@ -../../../Sentry/Sources/Sentry/include/SentrySessionReplayIntegration.h \ No newline at end of file +../../../Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentrySpanDataKey.h b/Pods/Headers/Private/Sentry/SentrySpanDataKey.h new file mode 120000 index 000000000..9ae3a5711 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentrySpanDataKey.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentrySpanDataKey.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentrySpanOperation.h b/Pods/Headers/Private/Sentry/SentrySpanOperation.h new file mode 120000 index 000000000..3d4379bdf --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentrySpanOperation.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentrySpanOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentrySpanOperations.h b/Pods/Headers/Private/Sentry/SentrySpanOperations.h deleted file mode 120000 index d2dbaeb19..000000000 --- a/Pods/Headers/Private/Sentry/SentrySpanOperations.h +++ /dev/null @@ -1 +0,0 @@ -../../../Sentry/Sources/Sentry/include/SentrySpanOperations.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryStatsdClient.h b/Pods/Headers/Private/Sentry/SentryStatsdClient.h deleted file mode 120000 index 9f2e320bc..000000000 --- a/Pods/Headers/Private/Sentry/SentryStatsdClient.h +++ /dev/null @@ -1 +0,0 @@ -../../../Sentry/Sources/Sentry/include/SentryStatsdClient.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryTraceOrigin.h b/Pods/Headers/Private/Sentry/SentryTraceOrigin.h new file mode 120000 index 000000000..a4a179015 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryTraceOrigin.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryTraceOrigin.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryTraceOrigins.h b/Pods/Headers/Private/Sentry/SentryTraceOrigins.h deleted file mode 120000 index 2062eb9b2..000000000 --- a/Pods/Headers/Private/Sentry/SentryTraceOrigins.h +++ /dev/null @@ -1 +0,0 @@ -../../../Sentry/Sources/Sentry/include/SentryTraceOrigins.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryUncaughtNSExceptions.h b/Pods/Headers/Private/Sentry/SentryUncaughtNSExceptions.h new file mode 120000 index 000000000..4de758556 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryUncaughtNSExceptions.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryUncaughtNSExceptions.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryUserAccess.h b/Pods/Headers/Private/Sentry/SentryUserAccess.h new file mode 120000 index 000000000..b43a88213 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryUserAccess.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryUserAccess.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryUserFeedbackIntegration.h b/Pods/Headers/Private/Sentry/SentryUserFeedbackIntegration.h new file mode 120000 index 000000000..2ef981c80 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryUserFeedbackIntegration.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryUserFeedbackIntegration.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryWatchdogTerminationBreadcrumbProcessor.h b/Pods/Headers/Private/Sentry/SentryWatchdogTerminationBreadcrumbProcessor.h new file mode 120000 index 000000000..64f8cb547 --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryWatchdogTerminationBreadcrumbProcessor.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryWatchdogTerminationBreadcrumbProcessor.h \ No newline at end of file diff --git a/Pods/Headers/Private/Sentry/SentryWeakMap.h b/Pods/Headers/Private/Sentry/SentryWeakMap.h new file mode 120000 index 000000000..70575611e --- /dev/null +++ b/Pods/Headers/Private/Sentry/SentryWeakMap.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/include/SentryWeakMap.h \ No newline at end of file diff --git a/Pods/Headers/Public/Sentry/SentryFeedbackAPI.h b/Pods/Headers/Public/Sentry/SentryFeedbackAPI.h new file mode 120000 index 000000000..640a96728 --- /dev/null +++ b/Pods/Headers/Public/Sentry/SentryFeedbackAPI.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/Public/SentryFeedbackAPI.h \ No newline at end of file diff --git a/Pods/Headers/Public/Sentry/SentryIntegrationProtocol.h b/Pods/Headers/Public/Sentry/SentryIntegrationProtocol.h new file mode 120000 index 000000000..2f3195c68 --- /dev/null +++ b/Pods/Headers/Public/Sentry/SentryIntegrationProtocol.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/Public/SentryIntegrationProtocol.h \ No newline at end of file diff --git a/Pods/Headers/Public/Sentry/SentryReplayApi.h b/Pods/Headers/Public/Sentry/SentryReplayApi.h new file mode 120000 index 000000000..5e763142c --- /dev/null +++ b/Pods/Headers/Public/Sentry/SentryReplayApi.h @@ -0,0 +1 @@ +../../../Sentry/Sources/Sentry/Public/SentryReplayApi.h \ No newline at end of file diff --git a/Pods/Local Podspecs/Sentry.podspec.json b/Pods/Local Podspecs/Sentry.podspec.json index 72749fc2e..044afc2ab 100644 --- a/Pods/Local Podspecs/Sentry.podspec.json +++ b/Pods/Local Podspecs/Sentry.podspec.json @@ -1,13 +1,13 @@ { "name": "Sentry", - "version": "8.36.0", + "version": "8.52.0", "summary": "Sentry client for cocoa", "homepage": "https://github.com/getsentry/sentry-cocoa", "license": "mit", "authors": "Sentry", "source": { "git": "https://github.com/getsentry/sentry-cocoa.git", - "tag": "8.36.0" + "tag": "8.52.0" }, "platforms": { "ios": "11.0", @@ -25,7 +25,8 @@ "CLANG_CXX_LANGUAGE_STANDARD": "c++14", "CLANG_CXX_LIBRARY": "libc++", "APPLICATION_EXTENSION_API_ONLY": "YES", - "SWIFT_INCLUDE_PATHS": "${PODS_TARGET_SRCROOT}/Sources/Sentry/include" + "SWIFT_INCLUDE_PATHS": "${PODS_TARGET_SRCROOT}/Sources/Sentry/include", + "OTHER_CFLAGS": "$(inherited) -DAPPLICATION_EXTENSION_API_ONLY_$(APPLICATION_EXTENSION_API_ONLY)" }, "watchos": { "pod_target_xcconfig": { diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index b8357a411..eec191007 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -12,9 +12,9 @@ PODS: - PocketSocket/Client (1.0.1): - PocketSocket/Core - PocketSocket/Core (1.0.1) - - Sentry (8.36.0): - - Sentry/Core (= 8.36.0) - - Sentry/Core (8.36.0) + - Sentry (8.52.0): + - Sentry/Core (= 8.52.0) + - Sentry/Core (8.52.0) - SocketRocket (0.7.1) - Sparkle (2.6.4) @@ -26,7 +26,7 @@ DEPENDENCIES: - MIKMIDI (= 1.7.1) - ORSSerialPort (= 2.1.0) - PocketSocket/Client (= 1.0.1) - - Sentry (from `https://github.com/getsentry/sentry-cocoa.git`, tag `8.36.0`) + - Sentry (from `https://github.com/getsentry/sentry-cocoa.git`, tag `8.52.0`) - SocketRocket (= 0.7.1) - Sparkle (= 2.6.4) @@ -46,7 +46,7 @@ EXTERNAL SOURCES: :git: https://github.com/Hammerspoon/CocoaHTTPServer.git Sentry: :git: https://github.com/getsentry/sentry-cocoa.git - :tag: 8.36.0 + :tag: 8.52.0 CHECKOUT OPTIONS: CocoaHTTPServer: @@ -54,7 +54,7 @@ CHECKOUT OPTIONS: :git: https://github.com/Hammerspoon/CocoaHTTPServer.git Sentry: :git: https://github.com/getsentry/sentry-cocoa.git - :tag: 8.36.0 + :tag: 8.52.0 SPEC CHECKSUMS: ASCIImage: bcff9650deae86e0e0ac310145cc628948201ab8 @@ -64,10 +64,10 @@ SPEC CHECKSUMS: MIKMIDI: f53dca2f372e71183ecdd2b35c984c1c2cd11cbc ORSSerialPort: d2d5d131797453430c557ba8dc7dcbcae20ff2e5 PocketSocket: 9c6867d66fb4f962af96b9b07f4b45bb561b2c2a - Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 + Sentry: 6838d39e8bfc183a8bb6eb1c5e1b730c773ef1c1 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Sparkle: 5f8960a7a119aa7d45dacc0d5837017170bc5675 -PODFILE CHECKSUM: 62fad4323b6e7a15a8190b62cddcaa4cb0408157 +PODFILE CHECKSUM: a5e11f8907b2657ad37425916c2ebbf5af11b681 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index e8345ef05..a312413db 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -19,2115 +19,2247 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0004BF649D11B8BEE3D204F57F0D1539 /* SentryTransactionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B731B7DD93C355641B6D8EA4107E08A0 /* SentryTransactionContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 00C7AC983E2B7E8B26D17161258D7D92 /* ORSSerialRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FF3E1FE10A4237F180D820E914F31342 /* ORSSerialRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 011DFDD2A844417233EC19D18CB75C2D /* SentryAsynchronousOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FACA3EE8080865D9EAAC5F613346CD54 /* SentryAsynchronousOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02B7972F7FE6418D91D2FA4E152D9771 /* SentryEnabledFeaturesBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0566BE5446E14D02EF3166D8742A54E /* SentryEnabledFeaturesBuilder.swift */; }; - 0383036F2CEFE83DF6AEF9D0101BF681 /* SentryHttpStatusCodeRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 61D86C08FA0C01A65B7277011E1005FF /* SentryHttpStatusCodeRange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 03A30B9F86DAED4B85108990D9FE6AC7 /* SentryAutoSessionTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = ED8F86ECF84DAA6A3B818DF42492999D /* SentryAutoSessionTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 03E93DE3BC1009B15C5AC9F645D1B505 /* SentryRequestManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C999F593F438C1388269C15ED67DDF8 /* SentryRequestManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0417E833049121C5E9798556774C085B /* SentryANRTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = B7BBAB530A555954C19FC09FF62364AB /* SentryANRTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 041B041745ED120CC122ECE2E1D8D850 /* PSWebSocketDeflater.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A384DCA1ED1FAA4272D7D7D2BE088 /* PSWebSocketDeflater.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 042AB57BD47856948BC721115C7FECAF /* SentryAppStartMeasurement.m in Sources */ = {isa = PBXBuildFile; fileRef = F148ED6700444C023C6D1688CC450EA7 /* SentryAppStartMeasurement.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 04468E4085A63F4B649EA98E5AC1A88E /* SentryNSURLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AE7CC1AE6D8DE973B5DB086C36C459F /* SentryNSURLRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 044948689BEA68FA89A25F45137C5BC7 /* ORSSerialRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 36D6B5D4D68F48D96C4BF35A6758112C /* ORSSerialRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 046D5D581A99C0B232C574FECC38CE18 /* DDFileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E0FBD9FA6F80068C5760D31CFE8E782 /* DDFileLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 04AC802383F6072E0520161C6F0AB012 /* SentryUIViewControllerSwizzling.h in Headers */ = {isa = PBXBuildFile; fileRef = D7C0906529547454269F43C72A7886D7 /* SentryUIViewControllerSwizzling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 054FA633E5005D0160E5DE762A272BA4 /* MIKMIDIMappingGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = E561C36E80F2AB36A7A52C3D9236F760 /* MIKMIDIMappingGenerator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 05527C0943AA4CAD91DA3C71DF9CB082 /* SentryDataCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 90DFAC13F4502018267E077995C4CC22 /* SentryDataCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0558D2AE0C2C157FF29960CCA9905ED6 /* MIKMIDIPolyphonicKeyPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C92DD161BB2424E19D2BD9FE1E5BB706 /* MIKMIDIPolyphonicKeyPressureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 057A031CB391F52A4AA77E6E6378B429 /* MIKMIDIMetaTrackSequenceNameEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC734BD7650923AAAFC72B8A6895B0C /* MIKMIDIMetaTrackSequenceNameEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0643DF5A6EAC912BDA66A18CBF66291C /* SentrySpanId.h in Headers */ = {isa = PBXBuildFile; fileRef = B8C97C11EBA352B28EAE1EB5796C4BE9 /* SentrySpanId.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06553FFA94F9A909AC26E81BCFCFB11F /* MIKMIDIPort_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 795939DE6FCCDEB00B91D8A650C4EA2E /* MIKMIDIPort_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06CAC698E10ACB37E9C4DB97E5D124A0 /* MIKMIDIMetaKeySignatureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D58201D58497942CFA0790FF0D7A067A /* MIKMIDIMetaKeySignatureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0700F9BBAB7A32E70A32C227F71EE9F3 /* SentryMetricProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 53E9399903D1343C659402FF1604DB9A /* SentryMetricProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 071445CE899C2D3B6AE82D24A9E49013 /* MIKMIDIEndpointSynthesizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F1B7EE9AE522713F47F20B897EEB3AA /* MIKMIDIEndpointSynthesizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 078CE4E6F2CA0C1623684A1BB97AE618 /* SentryDispatchSourceWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A6411CA17A6C1D4C3EDD3D36D8DC49B3 /* SentryDispatchSourceWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 087788B1337C4A3E84E99368F10E9140 /* NSUIApplication+MIKMIDI.h in Headers */ = {isa = PBXBuildFile; fileRef = BF76058C6035947C95DF0E0AB516A531 /* NSUIApplication+MIKMIDI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08801E749C8606B0DDA2BF569868EDEF /* SentryStatsdClient.h in Headers */ = {isa = PBXBuildFile; fileRef = D466BF7FC2664A3BD7974FE422AC5E51 /* SentryStatsdClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08C1DBE65BE206D762ED4EC039C74361 /* CocoaLumberjack-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CDD6A528EEF81F6568DCCCCADDC5E5E3 /* CocoaLumberjack-dummy.m */; }; - 08E050E9E9AD5D6D120E66F5EB57AAA2 /* SentryCrashMonitorType.c in Sources */ = {isa = PBXBuildFile; fileRef = 78BD79B176258E7FEC5FAF6A264ABCB0 /* SentryCrashMonitorType.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 08F257AF3F6510626F96AE276DA0BA14 /* CocoaLumberjack.h in Headers */ = {isa = PBXBuildFile; fileRef = E52BCB07A2726354462572EBEFF1BFA3 /* CocoaLumberjack.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 095C53E8C7E76200D1C91509ED1CAFBB /* MIKMIDIMetaTrackSequenceNameEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A1BF895D48796B4F288E1C73CBDDC275 /* MIKMIDIMetaTrackSequenceNameEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09846F437267EF92A2BF3D0DFFF5E3D3 /* HTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = C419E2CDB019AEEA1BC2F89D332C4F70 /* HTTPConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0A1671002890E4433501B412126CFF03 /* SentryNoOpSpan.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BCD84DF38C9DAD868654B80C1B208A4 /* SentryNoOpSpan.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A1E967CE906250DCC2606E2990F78DE /* GCDAsyncSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF6421DE4DFF747AA5E89018265FB5E /* GCDAsyncSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A70FF9AD1C74CF9DF572D8E8EFC7166 /* SentryGlobalEventProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 16A8E83987C6DFD3128CAD4B0B44D928 /* SentryGlobalEventProcessor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0A8DA5AFEF8FEEFE86F4ED4FB9A357F5 /* PSWebSocketDriver.m in Sources */ = {isa = PBXBuildFile; fileRef = 882A838E208D86B393D611DC290E199F /* PSWebSocketDriver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0AC5483B7251DACC906C93239FB02784 /* SentryCrashMonitor_System.m in Sources */ = {isa = PBXBuildFile; fileRef = 64F19A6ABE0AF7A1AB7B9A1D9A77FCD0 /* SentryCrashMonitor_System.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0AF241400EAA9C4F8DFB618CAF940EBA /* SentryMeasurementValue.h in Headers */ = {isa = PBXBuildFile; fileRef = B919C4EC7E2F5568D545C90A10C7044A /* SentryMeasurementValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B48D1A968B65DCB93585B8323F6394C /* SentryReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BAC88C16ED7B2B88D5A116E36C7695 /* SentryReachability.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0B62104C21A0603AF5AC84911F6429E9 /* SentryCrashMonitor.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CD611DAEE4A5B7C1561C63761A46133 /* SentryCrashMonitor.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0B83E774D4FDAA06F16067C4A1C85BB2 /* SentryCrashCPU_arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = 31BA31BAA87A658873EED3B63158688E /* SentryCrashCPU_arm64.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0BA68252B05882909F8271A85ADB4CF2 /* SentryFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 54B118A0EA78DC2A4F7845485D3C7F59 /* SentryFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0BB099B9D3EA4974412D7EF965378743 /* SentryMetricsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DC54FF392AEAB4E910F569D2D1736D /* SentryMetricsClient.swift */; }; - 0C01009228035066F2CEB77F8F608590 /* SentryScreenshotIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = C961A787FB2361ADF25E9732AE6B6ABD /* SentryScreenshotIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C1F1A5802404313605202394453A284 /* MIKMIDICommand_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 342C4BFA3B1528D963A808CA031866E1 /* MIKMIDICommand_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C525F30D6C849E3CA0C423B4F4635E9 /* SentryNSDataTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BFE958E69086FB4D75DDD48346E5AEA /* SentryNSDataTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0C591EDDD296A8CFF9D3889566250502 /* SentryCrashString.c in Sources */ = {isa = PBXBuildFile; fileRef = 338019F931CAC4146FEBD9A37C310EA0 /* SentryCrashString.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0C643368BE41CC2647EC89A22C800F6B /* SRDelegateController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0186A196AF5F90E4C6D0D7FB7705742B /* SRDelegateController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C9089EB01962EBD378D203BFA5F8504 /* SentryMeasurementValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABC81ADE3E3B166D9286FB1E51E358C /* SentryMeasurementValue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D0BC86B963C9E020BEEC619AF3343F7 /* SentryCrashReportSink.h in Headers */ = {isa = PBXBuildFile; fileRef = F465483B6663380CD3AC0B106F2C8A86 /* SentryCrashReportSink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D6207CBCBC4C5A730FC96B2785E7DA4 /* SentryLogOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BA5427931D705341FE19C9993470B5 /* SentryLogOutput.swift */; }; - 0DD62AEE2C64D66904E4741E1FFBDAEA /* SentryReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 19DC19184CBAA26ACD42DE9A4197B3D3 /* SentryReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0EF0BFFF2BC66ECBE295D98354DD1EEE /* SentryTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 58A09D3F0B008C9C53C0AD3BB1459AB9 /* SentryTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F2F221F12CA832D4466DC4AEAE89F54 /* SentryMsgPackSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C01CC40D7A45F5F3E4CBF4171CC5464 /* SentryMsgPackSerializer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0F827FA0C949D45A08B9677B22395761 /* SentrySerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 9452FC54CB524C7233E630215BDA616F /* SentrySerialization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1060E0A4B58AB0BAA641A937F98AB740 /* Pods-Hammerspoon-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AF41F1AC3465584EF871191F0D8FBB1B /* Pods-Hammerspoon-dummy.m */; }; - 10F26E89793966DBD769145985519CA3 /* SentryANRTrackerV2.h in Headers */ = {isa = PBXBuildFile; fileRef = EBC8D3D124AF01ECB6C8DE459047F25E /* SentryANRTrackerV2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 117B01B262FB0BFDA01374B7F7B15790 /* SentryAsyncSafeLog.h in Headers */ = {isa = PBXBuildFile; fileRef = D6F6177F7FAFA22A6C7F338309F72960 /* SentryAsyncSafeLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 11D628BCFCA133394C6385934CD996AB /* SentryInAppLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = DDE9E9132D62DCEDA4C9293D51719908 /* SentryInAppLogic.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 11ECCD113F25A02E38B15070DB44077F /* SentryBreadcrumb.m in Sources */ = {isa = PBXBuildFile; fileRef = F33A08139F6DA0D74D725558DD8AEDC9 /* SentryBreadcrumb.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 127871DE4227C19D3987601B8741C8EA /* MIKMIDIConnectionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8146F63CF2CEF0B5D20E3D356833C779 /* MIKMIDIConnectionManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12927CED4D6D7FED0E6A9FC27AB05136 /* SentryMeasurementUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CCC3B2EF658FC6D3DAE769975D61502 /* SentryMeasurementUnit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13165EB93DCD52515D9C32F65AFC410A /* SentryBacktrace.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0FAE83AB057D97E3311CFDD8CCE13E9C /* SentryBacktrace.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 13409CEFE9444FA78216DD10B3E6C12F /* SentryScopeObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = AE07DAD02640ED755F69139357FE9802 /* SentryScopeObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1366015E4B6D1A61ECA83CBC4584C9FE /* NSMutableDictionary+Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = D4728057230514E522E9B3EE21424811 /* NSMutableDictionary+Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1442E9279904E70D4603667BF0F56C50 /* SentrySpanContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 7214EC8C4207BCF9E5B70D150AD5006E /* SentrySpanContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 14459DF82BA0925A5FA9179B2EA0D231 /* MultipartMessageHeaderField.h in Headers */ = {isa = PBXBuildFile; fileRef = CB10335A8CD8F95AB09C700E2790029E /* MultipartMessageHeaderField.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14DBBE6DDDB560E350F978A1F8DFA97E /* MIKMIDIEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CEF80D3FB1440C59CF57335963525E4 /* MIKMIDIEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14E4CF2284896139324BEC60B077D42B /* DAVResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3158D2A9B45ADDF2C26131EEADB1C3 /* DAVResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1511BEDE68D1874749AAE606ED5A6F2F /* SentryOnDemandReplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F40417670FFF525FEAADD3B4DC01127 /* SentryOnDemandReplay.swift */; }; - 152B9F2DF2AE4E24B1968C2D9DF4C612 /* SentrySessionListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33E62911AE1376A5100B834A3F2514EA /* SentrySessionListener.swift */; }; - 155360EFA0331722002D722EB38B3EFD /* SRURLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E0A3FCDC71A8763FDE07CCDD7D997F9 /* SRURLUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1569098A5D9B4A7751C5AE8C334D2B37 /* SentrySamplingProfiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 150CE280A40A2ED8A311981DB72D7A76 /* SentrySamplingProfiler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 15A9E1089BF57D15ADB5CCE5D3D37B7B /* SentryFramesTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6891CDE6A252B6339E14FFD435C573A9 /* SentryFramesTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 15D2D28794F603EA5676057464A8FCC9 /* SentryANRTrackerV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EB6B9CCF596CF764C4142E1A6360B5E /* SentryANRTrackerV2.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1652C8525649554826AD4B094BF454F5 /* SentryContinuousProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 950F8A353817C1C4137FC38F7641CF8C /* SentryContinuousProfiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1675567B17FB153A61730D619B5B5B3F /* SentryViewHierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D2F693048237AC1DAFF856384FD18E3 /* SentryViewHierarchy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 167711AD3ED45C90FD72E89A1DEF937C /* SentryRateLimitParser.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3902D62E4AC14B13A57BD9F16725B9 /* SentryRateLimitParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 16AB25F403054D7C69E04CCD0FFA824F /* SentryBreadcrumbTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = D8CB058DFCC85223CFAE3D019F022847 /* SentryBreadcrumbTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 16B8E4CFB86F8433EA5C3E8647DA308B /* SentryUIViewControllerPerformanceTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = DADB8CA53656E2267D3D4E94B75DE12F /* SentryUIViewControllerPerformanceTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1814C2CBBA5A0F014A767B807A9F60FB /* MIKMIDIEvent_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF648B80187B6006ABE714309DA810A /* MIKMIDIEvent_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 181BB3A4AE34E47984253DD5DD28799B /* SentryNSURLSessionTaskSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CC2C52612145A3377EC4CD53360C5B /* SentryNSURLSessionTaskSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 18355C155B008D83B4F03F7BA03C0B0A /* SentryUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CA38BF6D44290DD7D4CC46F72C0FBDD /* SentryUser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 183FCAAE5122DD522ECE4F7A6565BD4B /* MIKMIDIObject_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = D91AF7E51225D293CDFAB3AFC7AA84B2 /* MIKMIDIObject_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 18D8812A452D30A371CD4A5927F039F0 /* SentryHub+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D81A93A6C1979D3A1FC2159770837FDC /* SentryHub+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 18EDA1590BFD70111A0E98599502D1F0 /* MIKMIDICommandScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BF60F22A344A23CE2814221D0C3C12 /* MIKMIDICommandScheduler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 190722AA104B317195E1EEDB2D90A1CF /* SentryLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CC390493C9DD5E9F2C4D6DEE838E00 /* SentryLog.swift */; }; - 191153B2DCCE2A32220BE252DC0F9B41 /* SentryFileIOTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EBDADCACC51D8D607DCD7647C7F5590 /* SentryFileIOTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 191D1EA5D1F76012C41B48C2C97AB990 /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 15BD9E7FC207DD702FB5F81ED78A7971 /* DDLog.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 192C098CB6B01A45B083F7C157177C06 /* SentryHub.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DEAB65D147E8FC5F02ACBFC8A31789B /* SentryHub.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1983A741E49EB71F85EED5D4D91F8CA6 /* SentryError.mm in Sources */ = {isa = PBXBuildFile; fileRef = F1695452E621BE3466055F9F805C6429 /* SentryError.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 19BFF9BACA2C5E676A270EF3BD619308 /* MIKMIDIDestinationEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = AA6F89079FEB1979B7671E45DAC632AE /* MIKMIDIDestinationEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 19D2E69646B35E9AC43D1978599CAA96 /* MIKMIDIClock.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE178F589061D15708753D9A179E2A1 /* MIKMIDIClock.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A71ADAD3A09E7D8046BFC857726A856 /* HTTPAsyncFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 29043E8DD87496520FAA80F10793C3CF /* HTTPAsyncFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1AC02F2B57DD762E6D8E3337C2837C66 /* SentryMachLogging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8E7355FA8FE038F157474DC6648B349 /* SentryMachLogging.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1AC53EC2581D9090498273CBF1193791 /* SentryCrashExceptionApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7BE901D79ABAB59E0390AACC282F01 /* SentryCrashExceptionApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1ACE251A21FE3A3F9D197AD28FBC30B3 /* SentryDependencyContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3297F891BE6D98D84E5D1AB5F382AC09 /* SentryDependencyContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1B204F33F33295B2876D491B45321338 /* SentryBreadcrumb.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EADD5D02E4BEE92ADD5C3EE6C804B54 /* SentryBreadcrumb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B3A8D77F099C0606AF15E997827BA97 /* SentrySample.m in Sources */ = {isa = PBXBuildFile; fileRef = 964AC0C64EB02F4290FFC5987106ED8E /* SentrySample.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1B7293E18703058C27E090FD69D7B978 /* SentryThreadWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E20135DB15D00DBE0A2C3331037FDB /* SentryThreadWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BEA94A8337714D02BC480809B628A80 /* HTTPFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A7F3DA043B0BAC501772A67431080E /* HTTPFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C54B4D3B104E35D6349474B9ACE3BEC /* SentryCrashStackCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = D981FF04279B99543F7647514D0CD636 /* SentryCrashStackCursor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C9BCA46DF6D56A11FE299C8DD1D2453 /* MIKMIDIEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 79BA363AA17520C8A474FC95D86CC169 /* MIKMIDIEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1CC522205B1834DDD6473193F89297D4 /* SentryAppState.m in Sources */ = {isa = PBXBuildFile; fileRef = 36DB3F3CE4F488C2E33D99FCCEA4A1A2 /* SentryAppState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1CD7CFB4879AD004DB7868A4144694A4 /* SentryQueueableRequestManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3302139AC3FF756332BA39058CAA2092 /* SentryQueueableRequestManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D2636E2BC68FEAF2325B48DC65BE76C /* SentryStatsdClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 29EC4AA8259DE1DCAEBC10450888D132 /* SentryStatsdClient.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1DD82F0BAA7139EA8E0CAA0A0FB6AF67 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1CF4989A7F6983CF4E3BC2E9331D3C61 /* PrivacyInfo.xcprivacy */; }; - 1E1AC93A8259104AD5D81A03C57076F8 /* SentryContinuousProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5E4AA9BD98548AD9E19C1F22443523B5 /* SentryContinuousProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1E2EBEF6D6E62ADF4D7B43128BC29924 /* ORSSerialPort.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3CBC5C39968D0ABB2A9C7DEB2B01F8 /* ORSSerialPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1E9362C6A2BD9030A36B52CE13744896 /* SentrySwizzleWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 545E170C74561D2E68A33C354A2A7E0B /* SentrySwizzleWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1E98E41E380BBF1C7E1D796483804B13 /* DDFileLogger+Buffering.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EB9B39EBFD3DBC150D2AAEF6478AC81 /* DDFileLogger+Buffering.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1EC916991D1093417AE400D6335CBFF8 /* PUTResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F9C148B837B0EE0FBFF1D4FCE84A55A /* PUTResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1EFFA3B698BFBB393D64EA8F02B45BB9 /* SentryDictionaryDeepSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = C7C92457ADA8E86703615DEEEE2EC502 /* SentryDictionaryDeepSearch.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1F0F04229C317CE461B0ED86AD7A0DD5 /* SentryCrashInstallationReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 05562FBE8AD2925D389EDC231B440475 /* SentryCrashInstallationReporter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F791156B8925AA4119AA545B3874170 /* SentryThreadState.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D2296DE30F2F287E47237776F2A4987F /* SentryThreadState.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1FE5C73DE49100C69313FD06304D75CE /* DDFileLogger+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E6086857AE4642BBC4787C78C287E073 /* DDFileLogger+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1FF81D990FCF1404F17AB3DD37F9D79B /* SentrySystemWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = CF9FE4589744B663482372C4DC4C5DED /* SentrySystemWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2055C771D20CBE42213771F967AA1B62 /* SentrySubClassFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = B092B48DF9CEABE76B08122C6C9C5A65 /* SentrySubClassFinder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2089C6EA3F40C9F9A6A8A387F5F9EB30 /* SentryProfiledTracerConcurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = F6777E422A5A3A95147DBA36CFA2A078 /* SentryProfiledTracerConcurrency.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 208F46231C26BF5F64DE25723287F6E4 /* SentrySampleDecision+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F4AF1DFD69E838813C79B42D0AFE39C /* SentrySampleDecision+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20C64FE4C9E540EE222B5DAD84AF0370 /* SentryUIViewControllerSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B86EC3596906650F1A3D0A569BB7679 /* SentryUIViewControllerSwizzling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 20C67B6FBD4E342F7A64038DDB41B268 /* SentryCrashDefaultBinaryImageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = EBE3653DD3ED38722D6A130AD644E1F8 /* SentryCrashDefaultBinaryImageProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20DA35E1F84D5ECADE13716D02AEE7A4 /* SentryCompiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EC9ECEC29A57ADCCBB3879ED5D2BADD /* SentryCompiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 218432EECAA06DB742B1C65E3B521208 /* SentryCrashMach.c in Sources */ = {isa = PBXBuildFile; fileRef = E556DE5669F43059D7ED912203951D09 /* SentryCrashMach.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 21B3ECAE804146516CE9B253D614F148 /* SentrySessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 28B04C61DFD85D943F2939F6C2B83DF1 /* SentrySessionTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 21DD886043AE2F4B0446350C675FBE91 /* SentryCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = 149CD8DD36BC0C306C6BB9BDDFBEB1B2 /* SentryCrash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21FA43690DCF06A4A100B57EE585BBE8 /* PSWebSocketInflater.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E093B03E5DA6356CAA2541D24724400 /* PSWebSocketInflater.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2233B3CCB5EF1F0D17014FF78EB88828 /* SentryPerformanceTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA26206547391D1E4720208789500AA /* SentryPerformanceTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2233BECDE0F327197799B3AB9A9F9DA4 /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3885B913C1E200018511545544082A /* SocketRocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 230F60C1AA4A677CEC0A205BD8067758 /* SentryOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FE65B5511B56E70F945BAD4655164D7 /* SentryOptions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 238DE7F1D9825AE8B22AC0AA1ADB42FC /* SentrySessionReplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A0B613C59D1494EC7CB6148A3CB19D6 /* SentrySessionReplay.swift */; }; - 23F912E4D51D3B950D95164734BEA929 /* MIKMIDINoteOffCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BC187B3C34571706D0F5C0D90316ACF /* MIKMIDINoteOffCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 245E25D47BAC59E2BDBE37A733B7F1CD /* SentryRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 1585C0E7D2609A5BF0DEE8A53A3125AF /* SentryRandom.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2470C78D3E72A059FAE2A42C082FAC67 /* SentrySysctl.h in Headers */ = {isa = PBXBuildFile; fileRef = 44213F5DA0BF41B164907076C128BB7C /* SentrySysctl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2494B472EC618B1195A7EE8D6BC2D126 /* SentryDefaultRateLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = E759332A5670070D6E7AA30BF6E6F550 /* SentryDefaultRateLimits.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 256D3F363DCAF6E62C3E7AD36B263629 /* NumberExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDE50D95A92454E5D369FF2EADFDDBE /* NumberExtensions.swift */; }; - 260E658E503306150CDA2699CA095D1A /* SentryClientReport.m in Sources */ = {isa = PBXBuildFile; fileRef = F33BE47A11BA82438326290199F19337 /* SentryClientReport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 262B0A863644321861DEA4DE438BD93D /* DELETEResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 97374FB11D4E2C1DC17DDF20E0285ED0 /* DELETEResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 26B9B841446D52C5DCAB1FEE0832F419 /* SentryMachLogging.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 91110C940CF3E0DC5177395FE6D1BDE7 /* SentryMachLogging.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2724CEE476A9B538EAFC718208D875E7 /* MultipartMessageHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = DDBA0B5951D9B5655132C777A476E711 /* MultipartMessageHeader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 279295278EA94649FBE8CF87EAD9E429 /* SentryCrashBinaryImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E6E68C83A2B02B7DF22F64227FEBF2 /* SentryCrashBinaryImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 279617E8712710CD0A260B9E03BD065C /* MIKMIDIMetaCopyrightEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AAD81E06D64AF06E03A3E04506279DBD /* MIKMIDIMetaCopyrightEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 28265BC7CB0B3573F4705AB2ECB42EF6 /* SentryThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 21532A82DA33D97522525266DA6FD77D /* SentryThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2829D79769B2A9DDF8D6BA5C4CA81286 /* SentryCrashMachineContext_Apple.h in Headers */ = {isa = PBXBuildFile; fileRef = 097C8DCA2F473555A3E49BE387BE19C8 /* SentryCrashMachineContext_Apple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 284AC68336A9D2D5763E683B6D546D9F /* SentryMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = F5ED5CD2338ED5D09AA4A870F61CE73B /* SentryMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 287833B18BDEB94DFEE726CE0E453506 /* MIKMIDIClock.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A3EA46C044E8B9D084D7B00DEF7A39 /* MIKMIDIClock.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 28A8094CC8ED7A3A2771CF4537129B47 /* SentryDelayedFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 3204071E149956EE4EDFDA68CEFA1EF0 /* SentryDelayedFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 28BCDD9DA3865FD3916C0E38F01F7DBF /* DDDispatchQueueLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 161F0A5D1CE5D5F7EAB1724DCCE11BB4 /* DDDispatchQueueLogFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 28DB0D34C351E97C640AB05F3F101A4B /* SentryCrashCPU_arm.c in Sources */ = {isa = PBXBuildFile; fileRef = C8204C9DA2015F1DC85B3CEF487DB968 /* SentryCrashCPU_arm.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 28FAA8029AF20F60E3A0AEDDCD0B9E59 /* SentryCrashReportStore.c in Sources */ = {isa = PBXBuildFile; fileRef = 33B6867B0A50035AB7916B156D4CC953 /* SentryCrashReportStore.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2912CC9068B868401A5059D475FE23F4 /* SentryMXCallStackTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BA39AC292CEE58F9EAC157C60849237 /* SentryMXCallStackTree.swift */; }; - 2947068A472AED471FFCA2DBE05EBCC0 /* SentryScreenFrames.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F9D6B8960C5E4C52013192512A8E2FA /* SentryScreenFrames.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 29A6CDAB307C310D5D7595820B4BA845 /* MIKMIDIMetronome.h in Headers */ = {isa = PBXBuildFile; fileRef = 6070688B3B9F5CD8BA8E6F9A8ED1459F /* MIKMIDIMetronome.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B5051F21B15E100205206C64099DEF9 /* SentryNSTimerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = BB16E5BCFA8E07C4717EA91099C9BC4A /* SentryNSTimerFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2BC7EBFE86D1E577E70756F0B1097312 /* SentryCrashSymbolicator.c in Sources */ = {isa = PBXBuildFile; fileRef = 91A211522E8118B3600505936E8D0F27 /* SentryCrashSymbolicator.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2BD433F75B320826097A54D36BA6474D /* SentryPerformanceTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = E50A7E05D86AEC2614C76F94DF56CF83 /* SentryPerformanceTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BE07B60539A88C7F81D75DFDF2E587B /* SentryNSURLSessionTaskSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 825AE5C17E90640280B1F2580683162C /* SentryNSURLSessionTaskSearch.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2BE6161760B7EDDE73A0B21C0847A433 /* SentryTransportFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A76E534888F5A3FD1D2817C3F4A4AB /* SentryTransportFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C26D337526DE8AB3BDFD567F9CE27B5 /* MIKMIDICommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 23113F0E22ACDD7ED2A1318AEB850B13 /* MIKMIDICommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2C8C31954A79337FA1D2A0CFA9C19F50 /* SentryCrashStackCursor_MachineContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B8AD64AE9A8DDC40E008FF384284ECAD /* SentryCrashStackCursor_MachineContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CD9E9E4B49954E170032197EBAD80C8 /* SentrySpanId.m in Sources */ = {isa = PBXBuildFile; fileRef = B19BC58FBEC2863E71C2862FDCD72983 /* SentrySpanId.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2CF1129398130E477438F466794506B2 /* HTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 69399242B4A7FE5F37A8B1B13039D16B /* HTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D47F7A217124316FBF88E37BF881C09 /* MIKMIDIMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = 63287F7C271956C517D8C46F44A34241 /* MIKMIDIMapping.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2D7B4FE30A2376B3E95C6729C141FA1F /* MIKMIDIProgramChangeCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 012E02FAB1EB2D6407156DB6FDBBBEFD /* MIKMIDIProgramChangeCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2DFE9AA399844A600A982C94EE2A1EAB /* MIKMIDIUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D9E5C74871E9B3FCA8CFBCF49BE558A /* MIKMIDIUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2E04B368A03698942F52BF1E7459FFE0 /* SentryCrashStackCursor_SelfThread.m in Sources */ = {isa = PBXBuildFile; fileRef = CF7E10CC115C08E0CCA0B8C2045D55BE /* SentryCrashStackCursor_SelfThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2E4CB995EB382BB6AA7E64D691F7F3C0 /* SentryThreadInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB1A60DE10EFF5905590581794E3C00 /* SentryThreadInspector.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E724516A2D99A67400837CA3A1FEB7A /* SentrySessionReplayIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C99035927A765B80123B45F9170A53E /* SentrySessionReplayIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2EA081C64281BB843C05E181A673F8AF /* SentryFrameRemover.h in Headers */ = {isa = PBXBuildFile; fileRef = 2222A734DA950BD5F2A1BC4798B6DEE7 /* SentryFrameRemover.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EB397D5FF3362950C0CB87D7BBFF157 /* MIKMIDISourceEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 988923A666D72522C0D744911E35F3BC /* MIKMIDISourceEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2ECA5376A4275FECEB8B9598D29B0EDB /* SentryUIEventTrackerTransactionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ED304949BB09ED912DAFC70A43FFE67 /* SentryUIEventTrackerTransactionMode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F1117E6C75CDAF26C59E98397B8B278 /* MIKMIDISynthesizer.m in Sources */ = {isa = PBXBuildFile; fileRef = C1844E20A839D34185D43C9C6CF6892C /* MIKMIDISynthesizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2F2AD588A07B06E6830E1F74FB811B5C /* DDContextFilterLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = FDDE5C1FA0BAD805D5EA880C4524FC3D /* DDContextFilterLogFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2F7ADCE232792F05EE8452424920B2F4 /* SentryBinaryImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 248BEF94FE4A65DB0AEF15CEFB59037F /* SentryBinaryImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2FB275F4E3DF0872E8D6076011896344 /* MIKMIDIMetaEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 43EE2D0D8212F6A8B92C1170D5D4BAAC /* MIKMIDIMetaEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3024EE23C37B029B2CD1C02CA87767DB /* MIKMIDISystemKeepAliveCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B77F6A4C4D6FD48E264BB250616E327 /* MIKMIDISystemKeepAliveCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3028D68976DE32FBFDD71F5975ED2707 /* PrivateSentrySDKOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D0B7DE74CC0F6BB0D985B0D2E12499 /* PrivateSentrySDKOnly.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30C4CA27974308DA67BC93FB27790CCF /* MIKMIDIEntity.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F447734ADC03DAB94041C24F155F64 /* MIKMIDIEntity.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31C535B4F5C4DA93E171B14E0183A8EB /* HTTPFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = DCF66FA92D4BDA2A865D6042771BEEA6 /* HTTPFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 324E6FD730533B546238862DD4F08EDD /* SentryDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A1830896200B5AE63C6003F2AF97B3 /* SentryDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 32825F7C0395EBB60A462B2FD13503C8 /* DDASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7658052A9D7297CDB1CCB186BBC436 /* DDASLLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 329D86134DB41FA3C2268C7129185A88 /* SentryMeta.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA62DA89FAD7469CE788CF9FDC27DE6 /* SentryMeta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 32C68E7E25D7A579564449C4A21BC90E /* SentryRRWebCustomEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AD492D3A7847D0F7B7A5507EFB0AD00 /* SentryRRWebCustomEvent.swift */; }; - 34189EF5AC2D92AA60AB2F14A88D4D03 /* PARImage+ASCIIInput.h in Headers */ = {isa = PBXBuildFile; fileRef = E19C3C27FE150C79821DFE5D7E9A9183 /* PARImage+ASCIIInput.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3438141C451C3C3DDFC048A4A5887DEA /* SentryThreadHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D50C68EFFF553446A7C787BEE9E1273 /* SentryThreadHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 34594DC8C3F29991E625AE9BBABC06AC /* SentryPerformanceTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D4109FA871DF4BCF84BC15D7D6F2E4 /* SentryPerformanceTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 34AD758568BC700A7A2D4ED69A5F681C /* SRRunLoopThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 473E75BDFDA04AA427FA70CF259925D1 /* SRRunLoopThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35330705DA7AE14774E2720BED096470 /* SentryVideoInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D82218FCAE57B7717C49FFA4F270EB2 /* SentryVideoInfo.swift */; }; - 355FB8E39686DC38132F7C357D367612 /* SentryCrashDefaultMachineContextWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD7CCBF9EF842DF06EBAB229F630430 /* SentryCrashDefaultMachineContextWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35B2B9FC451A80479098E181D7E32656 /* SentryUser.h in Headers */ = {isa = PBXBuildFile; fileRef = CAF0D754B1FFB8825EA1443E4DBF9316 /* SentryUser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35F05FB586B2DAE22DF4FF378901F089 /* SentryUIDeviceWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB0EF668E09C209F3F88C334AAE9856 /* SentryUIDeviceWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 35F2665D5A44D0FB3704F144278792AD /* DDLog+LOGV.h in Headers */ = {isa = PBXBuildFile; fileRef = 40123422A0F14609043890ED9DE59B5D /* DDLog+LOGV.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3653022395CFC41120681BFD7A9BE7CE /* SentryFileContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08C2325851FE0BA93E7AF658B64A6053 /* SentryFileContents.swift */; }; - 36CF11EDA19D3119A1695D553177650C /* SentryTransactionContext+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 36A34F53638D44A63BCCCAD23B2DA812 /* SentryTransactionContext+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3847382D331C35C0A4A4C28D5BE8A193 /* MIKMIDITempoEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2A098E7EE2E765710251A10465AAE3 /* MIKMIDITempoEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3883EBDA95B1ED9C4654181BFA6F22AF /* DDAbstractDatabaseLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C00FF6FD698FA69CCE76C46B9EC0F13F /* DDAbstractDatabaseLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38B795FE680033F973545BE87FC75864 /* SentryCrashMachineContextWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D55ADA9FD3B28F05EF59B7505B1050B /* SentryCrashMachineContextWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38B8A2034223A1021E0D040428EFD629 /* SentryStackBounds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CCA342C607AFB7558FC0346EF59594DE /* SentryStackBounds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 38DA89771F93CE41FA55B4F74CD26D86 /* SentryClientReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CF7FEDFAD1744DA4BB5333CEE706396 /* SentryClientReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38F776DF445EBC8FC301B10A69559693 /* SentryCrashStackCursor_MachineContext.c in Sources */ = {isa = PBXBuildFile; fileRef = D8178AEB4217BA674D28E2BE452AFA84 /* SentryCrashStackCursor_MachineContext.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3903609905F88546B1B5F45A9A52FD73 /* NSArray+SentrySanitize.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BFED552A97F318C920527A79292C078 /* NSArray+SentrySanitize.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 393E66B17C8A58E6F2098C481CB13A7E /* MIKMIDIEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F20AD937CC715C9437083ECE3CC1149 /* MIKMIDIEntity.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3954C752205A41490DE2AB342815900B /* SentryTraceProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9AF86F1F9721DB639D4919C559B31FFB /* SentryTraceProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3A34608622B2D07A99A6B4386EEF96E4 /* DDLoggerNames.m in Sources */ = {isa = PBXBuildFile; fileRef = 07EB3E0573661149F7B7224FA29B04EE /* DDLoggerNames.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3A54F4963DD5E4493D116FDF7C1F7609 /* SentryCoreDataTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 62E1EDB5108C9078E4E19EAAE793CEA7 /* SentryCoreDataTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3A94D45FDBB6261A7D2093CA21AA07A9 /* SentryDsn.h in Headers */ = {isa = PBXBuildFile; fileRef = 7580006A9D51A26EBDE8EEB546A11A15 /* SentryDsn.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A9FE191F30082EF8971DB8908A20107 /* SentryCrashUUIDConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = F10177534C0AB70F2F8F67E7792808ED /* SentryCrashUUIDConversion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3AA0B05D8DC45C3A8113AC2D765D9579 /* MIKMIDIPort.m in Sources */ = {isa = PBXBuildFile; fileRef = 40093623D3B618F467F3F28EEB258916 /* MIKMIDIPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3B700A4C176E6643AB08B5D336B474F7 /* SentryAsynchronousOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = EE4566783FBCA3EA9BC775540E00FCFD /* SentryAsynchronousOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3BD775F78FA54AC95E3D2AF1C46EE392 /* SentryWatchdogTerminationScopeObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9B764125F67A90E6640AEFA593B4EC /* SentryWatchdogTerminationScopeObserver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3BE45F5B3583FFCD586313E01D10C45A /* MIKMIDISynthesizerInstrument.m in Sources */ = {isa = PBXBuildFile; fileRef = 462B92525B0663237A3A78E871ED4F38 /* MIKMIDISynthesizerInstrument.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3C0335486AAC2E7ACE27B0ADC2F5C5DC /* SentryNetworkTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 00C5F4359E73A5445CB4E22E374C49EC /* SentryNetworkTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C33AE6DC22BCC72134AFF798FB96D26 /* SentryUIApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = C17007F1F4F3542FA3D644E0C07DFF4B /* SentryUIApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C5720C02BCAF845B87DF5C59A3CE80F /* MIKMIDIUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 58FE9CD444F12E26D56766FA813434B9 /* MIKMIDIUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3D0BBED5F720ACB840F0D50648792930 /* MIKMIDIOutputPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 67ACCD2DF5751002FF5D6D1109D7E6B8 /* MIKMIDIOutputPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3D658814A8D5571B6B15F7A62791B871 /* MIKMIDIMacDebugQuickLookSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B8567ED3FCD2D3D4C083513CDF18F09 /* MIKMIDIMacDebugQuickLookSupport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3D8841A37FA6EBD982F152A49AC455A5 /* SentryCPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A0B6C4B8DB728209F5E4EA9D46E95C8 /* SentryCPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E0262CAFEABC3603B99E7671582E5F2 /* SentryRRWebMetaEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C83786CBE45FC058901FC5261CB12F8 /* SentryRRWebMetaEvent.swift */; }; - 3E732873C7AE00FB5B8E172AA9066A43 /* MIKMIDISourceEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 553BF87CD5AD99E7E5554E1C079DEBAB /* MIKMIDISourceEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3E9D8012EF36BC5B5820DCD60878F82D /* SRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C7BABCA4CD663FC5A91A269A0247B07B /* SRConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F0019DCE7147C7F0FA68607651A9A68 /* SentryRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5353873D8213E327E58BB3DE44224D07 /* SentryRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3F91961A71464B602F55E5A5C53CA206 /* SentryCoreDataSwizzling.h in Headers */ = {isa = PBXBuildFile; fileRef = 461B669F0C36F11FE6B3BABD5BA67277 /* SentryCoreDataSwizzling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FF75857ABC1C8A00F5B04D44B1FA128 /* SentryCrashPlatformSpecificDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B72FB11EB76D7F8AB731A62DDAD10E8B /* SentryCrashPlatformSpecificDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40355FEAAFE48CFC7572967F4B224B21 /* SentryDefaultObjCRuntimeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D8DA09F2482BCB1F2592D0DC0B399B5E /* SentryDefaultObjCRuntimeWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4048CD316D6B9C320A92681BADD51F5C /* SentryCrashMemory.c in Sources */ = {isa = PBXBuildFile; fileRef = 15BF85CE4CCCEA91DF4C59A8BEA880C6 /* SentryCrashMemory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 40B046DC6DD323CAFCFEB096D723008B /* SentryCrashMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = A270A6AF666BBD8E9740DC8A79919F4F /* SentryCrashMemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4149F9975955E8AAD6FE82BAA99DD4D3 /* DDRange.m in Sources */ = {isa = PBXBuildFile; fileRef = DE1371E30EEB0E988CA1463D902B91DB /* DDRange.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 417CA6EDAA0C52861775049BB83EAED7 /* SRSIMDHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 9561FEDBADF0DECE998FFC6602D09873 /* SRSIMDHelpers.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 41CCD67DD308972FB4750100DD5DA80B /* SentryNetworkTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 76ADCF0C7441A2A659A6E5A421F9BF42 /* SentryNetworkTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42301A3E31F1D7F391257CC45302D4BB /* SentryCrashObjCApple.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E057D6AB46081912147BD3BE8082CC /* SentryCrashObjCApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 423E50F7E969FC3947F0589F1F94D65F /* SentryStacktraceBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43668C08A60CD18FE2AB42F0078E97C9 /* SentryStacktraceBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4276263A402F089AC1F93F812F0D342D /* Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF0E35C376AFA8DF8EE725332C50087 /* Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4281C2DC0E377EAA186435F7CB076ED6 /* SentryFramesDelayResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DD2DEE4A55ED09898535824250A2FF5 /* SentryFramesDelayResult.swift */; }; - 4299B1D77F292AE60AA550460E8F9791 /* MIKMIDINoteEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 439E12F2F5FF227C1EEBA4139698416F /* MIKMIDINoteEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42F87D1A78B298270CE4DB1E8607B7FC /* NSUIApplication+MIKMIDI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DDFB30E711F1C3FE578EBBEC8808212 /* NSUIApplication+MIKMIDI.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4387B076E6C751E1C806CB2DA0A226BF /* SentryDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = A6A1E52C149597FBF16108B4D3758BFD /* SentryDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 444C5FCCE7ED1727D4621B4CE8B485FB /* SentryDateUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 518538B382682C5B6438FBE07470E516 /* SentryDateUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 444F4C7BD92D06EBEA7FE17F115A7C09 /* SentryCrashReportFilterBasic.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FC67A2A48886BFBE95D156012F5F116 /* SentryCrashReportFilterBasic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 446ABC3C9828846621EA75F07743F4EC /* MIKMIDIPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 327361A487C2579906EEC29BEE955F87 /* MIKMIDIPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 447401598D1E99257F2511FFF0C13877 /* SentryViewHierarchyIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CD5A1C1CE36A5F69F77F9F7ACCF27EE /* SentryViewHierarchyIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 447908E021BF637A88D0C5DD7DD69827 /* SentryTransactionContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = ECE33D86D66035EDDA76AC63CC903026 /* SentryTransactionContext.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 44E8E1B0A4823FE03FFEAD83FE5FEBF5 /* SentryCrashDynamicLinker.c in Sources */ = {isa = PBXBuildFile; fileRef = 1946C8D2CDA5A2FD24B4A8E7CA7A4248 /* SentryCrashDynamicLinker.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 45032F61FA8D1E209A7E64CD42D14141 /* SRLog.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8D88F1B3F79FA718713A3C5570F7C8 /* SRLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 459B75F2C1D40C81C854B78C9E792984 /* SRURLUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 219D73DAA3E1EA0AC149B413906E2817 /* SRURLUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45B7D589ED4A61553D00C9E5FDE5ACC0 /* SentryCrashVarArgs.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B9B3AF3736B960A7AE46824B3F15447 /* SentryCrashVarArgs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45BBA7D48DDB200ECCA0FAA2EFBC1398 /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4787A4AD01E6CBF77830877837B0A9 /* SocketRocket-dummy.m */; }; - 465A8FB4874D92756E2BAB4B45EF2F41 /* GaugeMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA78382FB58123C1DFD3FDA35DAEF4E3 /* GaugeMetric.swift */; }; - 46B7084D8200D4FEE6B9BEB7871B2D9E /* SRHTTPConnectMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = BCAED0A39006EA29797534B9445A9D76 /* SRHTTPConnectMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46C26EE6A0720C8251F4C2B9970A45A6 /* SentryCrashInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 817F1991AE8BC816D785C6DD04668B18 /* SentryCrashInstallation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4705D74E70ECCDD5F235C740FB64AD53 /* MIKMIDIControlChangeCommand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8303CA9AF549BECD7BA5D8F2A48CECF8 /* MIKMIDIControlChangeCommand+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 476456D3B2017A33157DCD7BED2ED52D /* SRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C12D845A1CC6551AA46F001A4BFE8D7F /* SRConstants.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 477CFD607BA9A018FA6AE50DFE4D3ECF /* HTTPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D774FC3483E8ABA760F84985504762F /* HTTPLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4798FB5EC05B502F6211B4261C78F5B5 /* PSWebSocketUTF8Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E9D4653D70BC0D04A09041E841DC3D /* PSWebSocketUTF8Decoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 48028DCB73D9216A8BDCCC5E3645B316 /* HTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = B771A3598FAAD66A8DD42FCE854B8CB9 /* HTTPConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4816736157BB7D09D00CF803C868860E /* SentryScope.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AC7EA8325DF01716D0C3E62EF49D932 /* SentryScope.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 48191EA10B0E1430E4DAE85F57F3FF79 /* SentryPredicateDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 682F2D5987BA5F7BFDC3215B50A6908C /* SentryPredicateDescriptor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 484E9F4576AC1A7F1F8810B0CB9DBBE5 /* SentryWatchdogTerminationTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = A5BDC79C7380C040B578F1A826EACC71 /* SentryWatchdogTerminationTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 48B954BB81ECDCA4894ABF8D7EA4DB58 /* MIKMIDIErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = C89629A69B3CC56BE474C28C8FBFBE8F /* MIKMIDIErrors.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 492051A062483E1A8771A28E997879FA /* SentryScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 02B1EFABBB5C13B065CF5B4EC2FC9225 /* SentryScope.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4965E22C3DDE2B414158444E96B26698 /* SentryThreadInspector.m in Sources */ = {isa = PBXBuildFile; fileRef = 344B186FD0AC9E600E9A074894687420 /* SentryThreadInspector.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4971EBE8E99E66A002C2FC525BE5B92C /* HTTPRedirectResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 164E8D00BE22F96278C02265B90D7B1E /* HTTPRedirectResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 497F826A968B491AA120E54F2ED6F633 /* SRError.h in Headers */ = {isa = PBXBuildFile; fileRef = 7727B987F0339C867323875120AA4E95 /* SRError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 49C8135C8BBE1EED5816782A30A450C3 /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3C1D58E4E6B1F8FBE276BE35800880 /* DDTTYLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4A41D30D563213DC8A7C485A0D42FE65 /* SentryCrashInstallation+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D2C67CA6D51EF8AA03A69E3981D377F2 /* SentryCrashInstallation+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A4BB752FEA15C56C82E452AB57330CC /* SentryEnvelope.h in Headers */ = {isa = PBXBuildFile; fileRef = 6776B2F6DC9AB3B93E362AFFD2C994BD /* SentryEnvelope.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A92F58FDE97E53903F72D575684A8E0 /* SentryEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7E06865F2251D770DC5D6793CDD8A7 /* SentryEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4A976797C517EDE120AE17F16C2E6DAF /* SentryDebugImageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 91115B79CA65938B48F0335E98FFC9D4 /* SentryDebugImageProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4AC246AB379128DC64EF07598CA4D997 /* SentryExperimentalOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E902F0B7F1248A6F5CB16290E8E1F6E /* SentryExperimentalOptions.swift */; }; - 4AF3866C1FD39D834CCBE10F05C5DAF7 /* SentryProfilerState+ObjCpp.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EBB9F015607F3132DD89A8A4739B3B /* SentryProfilerState+ObjCpp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B29600070D094285162A5571E5AD237 /* MIKMIDIMetaCopyrightEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = ECEDD82BF9BE05D89E821494F455F638 /* MIKMIDIMetaCopyrightEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B78E08882A6D336CC284B1536A14589 /* MIKMIDITrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D1FE6F5DA923F3BB0D4D339BEFDD50D /* MIKMIDITrack.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C27273A6D2C46BCCE63AEFC30EE2D75 /* SentryBreadcrumb+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7655D11D7A9567233A0450A12A09DC77 /* SentryBreadcrumb+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CAA6759C13788930A54F780D7F73C1E /* MIKMIDISequencer.h in Headers */ = {isa = PBXBuildFile; fileRef = 842EF3ED83C5944AB14DA25945770838 /* MIKMIDISequencer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CAB8B038B4C189F5A6393C5B3E0177F /* SentryReplayVideoMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 484625B3B8EEE502C5E32EDCFBFCCB80 /* SentryReplayVideoMaker.swift */; }; - 4CBCBBF19F8CAF8661CBDF3297A3C1FA /* DistributionMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15512899988C364C168E70B72C604302 /* DistributionMetric.swift */; }; - 4CE5D77F67DBB90D59392B9C9B7D844B /* SentrySdkInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A477EC39035EC38453C3083C439FCF17 /* SentrySdkInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E2ED944F68E35B84A0FB208AED24544 /* SentryUIViewControllerPerformanceTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 418B8FBB65E29272B3461A075B60B027 /* SentryUIViewControllerPerformanceTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F1FB36259415404F9DE133E5925B112 /* SentryMeasurementUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DB222E7B5F9A8C6793DCB60DD6425F0 /* SentryMeasurementUnit.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F2DAE289F95FC0B8FEA293586D6A144 /* Pods-Hammerspoon-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C2F84F2F3BB5FE4BD4AED20D9CEF88 /* Pods-Hammerspoon-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4FBA47E32EED3B7C17DB8769B9DA29C6 /* SentryAppState.h in Headers */ = {isa = PBXBuildFile; fileRef = E9C3DB60DD7A816B42CD3A98B30CC1F5 /* SentryAppState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50293970C02F5744FED9E257A0F30F5B /* DDTTYLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A5AB178CB948A92A61BDFF58CFE8020D /* DDTTYLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5044B2E1EC2A3E6D17FC56F8B0932549 /* SentryAppStartTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACE0EDB752A847C495ECC70D33F8F10 /* SentryAppStartTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5057CAA3A9C1CD3B1EFCF8E479E651E4 /* MIKMIDIOutputPort.m in Sources */ = {isa = PBXBuildFile; fileRef = F45A0A3556574DF777A76D51981FEC1E /* MIKMIDIOutputPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 50A2DDA4ED1E97E054323B53F1002664 /* MIKMIDIMetaCuePointEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FB0CD51384346718A36B359D3B12A266 /* MIKMIDIMetaCuePointEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 50ACD42B6BD6D6DF790B6C1C69CE909F /* SRPinningSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D9DD0F1F73F404D1F497B759EB460E3 /* SRPinningSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50B2088ABAA246179B146F0459F203D8 /* SentryRateLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = 7849304ECC4BDB534EBA46A7E14E9E8C /* SentryRateLimits.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50C8350A5D03DD68712F0E0523A6E572 /* SentryWatchdogTerminationLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 1862C4ED07B24352D1DD1A069782D87A /* SentryWatchdogTerminationLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5217B8CBA1CE625E00FB8E1B33B5BBA8 /* SentryScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = B460381718BE835C1B59647AEF517C41 /* SentryScreenshot.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 52422ADE5AD9F22028DB6294091C1E5D /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 41E0EE5B81F67811FF6BBAB9FCEC3D9D /* SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 52861AE79E46B0BC384599830C6E0B38 /* SentryCrashMonitor_System.h in Headers */ = {isa = PBXBuildFile; fileRef = B6813A12F575957A167C88033E5FD96A /* SentryCrashMonitor_System.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53074E437E2DA98BA0C7000F817C3CDA /* SentryThreadWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 19A8504D81B069DF346AF1EA572D3164 /* SentryThreadWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 531A17541EE08D7521FB2C7C6941679C /* CocoaAsyncSocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FA4E690D2B100C84644FDCAF2781A4C0 /* CocoaAsyncSocket-dummy.m */; }; - 5336F6850F52CE9185866D0D3590CABF /* MIKMIDIMetaTimeSignatureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E23E22E62E2A7F4D4F2BEA5A464291A /* MIKMIDIMetaTimeSignatureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53AA4FF83C5264EC5EB0AF9E5CCAE38E /* SentryTracer.m in Sources */ = {isa = PBXBuildFile; fileRef = 430F021FD0317357DB30A3675FDD0E38 /* SentryTracer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 53B192A7CAA7B9E2CBAA358BB8FC192E /* MIKMIDIChannelPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49657FA527D4E8591335FF1E1AFAAE5B /* MIKMIDIChannelPressureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 547582281F10D4D2A8C80E36F63678F0 /* SentryCrashStackEntryMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 85C78EA33AD069CD8876D9FBB34B76FF /* SentryCrashStackEntryMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 54976AB53D61B390A03D38464EB6804E /* SentryCrashMonitor_Signal.h in Headers */ = {isa = PBXBuildFile; fileRef = AE5EA6846998D63671459BD7A261F3D3 /* SentryCrashMonitor_Signal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 549A117E8A616104DF6C67B3CFBC9897 /* SentryCrashDate.c in Sources */ = {isa = PBXBuildFile; fileRef = 6DFDD6EEAAD120EA44EF908DCD53B9C2 /* SentryCrashDate.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 54C83FD183A9A28C4FF7F5B61267BFFB /* SentryCrashStackCursor_SelfThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 78418E7AFA6B44B2AC426695B690A3E6 /* SentryCrashStackCursor_SelfThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 556A520803671D96A53BFBED08BC1965 /* SentryAppStartMeasurement.h in Headers */ = {isa = PBXBuildFile; fileRef = 147B7F5CC85430E54956EB11E8C17492 /* SentryAppStartMeasurement.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55AF705CCDAF7AD6DFF61228E6B25175 /* GCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EABEDC93B6E8D5EDEB3A5380695CFF /* GCDAsyncUdpSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 55C88184AEC4131F2C7A3C7D832F5051 /* HTTPDynamicFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 3980919F72C2514EA9B7B839CD47DC06 /* HTTPDynamicFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55CC25C29D23177FF16072EC874F395C /* SentryCrashMonitor_CPPException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9A4C1214FFF63EEAF1FC9801E324AAF /* SentryCrashMonitor_CPPException.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 56069D86D1FBBAE5D9F383CD4905AB23 /* SentrySession+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 34C34F80F098AB0FE5966769EB95AFB2 /* SentrySession+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 569D0FA4A32128843F6620B70C03FD79 /* SRSIMDHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = BB70962A26769963C9814D1B38668169 /* SRSIMDHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56C2B10E3B098830B34BC1E64F36E3C7 /* DDRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 308889CAB3F4EF7E155B8902D89C91BA /* DDRange.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 574C5029F3E3E40696E630C181E32AFB /* SentryLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CAD40E9A685469EA227DFEE4E12C4D3 /* SentryLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57B0EFD28B4268B4828439CB5173C6D3 /* SentryANRTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = CE6EDC7E18E7AEBC9AF4C3A9F4AC51DD /* SentryANRTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 57E9D2E2620D59C636016B0A6991756E /* WebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = C251B86DA142E465F4DDED9F3D4235D9 /* WebSocket.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 57F1E4EFB807F07E5A2AC3127C7B0B55 /* SentryANRTrackerV2Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C308E3127DA95097A40019F21A122569 /* SentryANRTrackerV2Delegate.swift */; }; - 58315DB4AE002F6F3FDE386221FFC031 /* MIKMIDIChannelPressureCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1087416496E799B6528187BE45604779 /* MIKMIDIChannelPressureCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58545F7E457F94FC62F576CF83C8BAC2 /* MIKMIDISequencer.m in Sources */ = {isa = PBXBuildFile; fileRef = DF8FFFBF626E1A78D9F50E1E619FE4CF /* MIKMIDISequencer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 586E93CA06F06A727DF59ECCA9469FAD /* SRRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 22AE211865707E46D0BA556617C54287 /* SRRandom.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 587D27295C9F844725347253FE0DA99D /* SentryDispatchQueueWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1852941F36151E5DE5DEA90D4F931711 /* SentryDispatchQueueWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 590A9AD4426352A43C280E19CD70856B /* PSWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E78D3A69861AB0219C3943C07027F62 /* PSWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5926036EC3CEE73CA5359A17E6A9557B /* SentryException.m in Sources */ = {isa = PBXBuildFile; fileRef = 142FE559BC21B1CDE3FD83CFAE6F7D58 /* SentryException.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 592E372E5DFDEE3EC3CE80D72EE0DD79 /* SentryRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D52FB8E23C078DD53DAE19331258A22 /* SentryRequestOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 597508F924752320C385ADB5AFC2F814 /* SentryInternalDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 798F9E5E508E14C83383B975FA26C485 /* SentryInternalDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5992D50CB802E3BD0CA052CDB021F657 /* SentrySRDefaultBreadcrumbConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A56A272A4B695313852FC2AD0284C79F /* SentrySRDefaultBreadcrumbConverter.swift */; }; - 5A6FD8CE67015D0EE95FAFAC0ADB5177 /* SentryLevelHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BAB7C40BFD9AC1502BCCC1B1D0E607F /* SentryLevelHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A7BAB0A326224C9055839685A0AF3D8 /* MIKMIDIChannelVoiceCommand_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CBF1051BE74C19B87CD434F8D2B68A1 /* MIKMIDIChannelVoiceCommand_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A966C52DA8DFFD4F940E45542B63B8C /* SentryProfilerSerialization+Test.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F75AE9C76D7E728BE37B8DAAA9B8A41 /* SentryProfilerSerialization+Test.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B1CD924982714DA8B2D9C7B151DABD9 /* HTTPMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F786C5330BF38BF3DC5E1DC57D5BF65 /* HTTPMessage.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5B62A008FF250B4908F0C117AAC835D9 /* DAVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = A30A09EAEF2D914E89C9895F37291A88 /* DAVConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5B7CBC345C89ED636684EF183D83EF57 /* SentrySessionCrashedHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D1F4CADD1526956E9C3D0EC9F185CA /* SentrySessionCrashedHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5BDC706E357AEA11522A81570ECF753E /* MIKMIDICompilerCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = BB5920AC822770B7C25DC50F2D9808CE /* MIKMIDICompilerCompatibility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C16A5258BDE8DA5B5F7439730BEF548 /* SentryCrashMonitor_MachException.c in Sources */ = {isa = PBXBuildFile; fileRef = C62B1FEE1E0EA5939844C3B1CFE86E63 /* SentryCrashMonitor_MachException.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5CD15C74F470F2896AA2CB03442CBCC4 /* MIKMIDISequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A5594B2E9CD8D747E4E87031ADA247 /* MIKMIDISequence.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CDD4F898E5F7E9FD96DF98D1A36C77A /* SentryLevelHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = C2F0BB4D3CAC40E54F995CE1A1CFE38B /* SentryLevelHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5D1F6E6F5126D25A1746C5E4E8D2B89D /* SRMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 1252F3C09544319DC7D7C7BEBB6BA6C3 /* SRMutex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D6168F39D7FE503C5A47E38917EA3F3 /* MIKMIDIMetaInstrumentNameEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEA6082BF4F36CDA50F064854D137E4 /* MIKMIDIMetaInstrumentNameEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D8CF7D8EED8435E93FDB1B46FDBE118 /* LocalMetricsAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2737A1251BECEA0E11B80744EBB8B7B2 /* LocalMetricsAggregator.swift */; }; - 5E14B4FC127508339455235C519F27D2 /* SentryDisplayLinkWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EEBAD0326FAEC21EC9407537EAA8155 /* SentryDisplayLinkWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5E38B9E73B69405B1F3A1B5E46BC8F09 /* SentryDateUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 497FC5C9B7998A38B8F0F623E9B11A30 /* SentryDateUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5EEA4C7B96BFF3A36CC4A5937083B9D5 /* SentryScreenshotIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A33BF02CCF7D216DBBFBB0BA777834D /* SentryScreenshotIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5EEA59FD0F230CBAD84C84F46A4A1BEE /* MIKMIDIDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D26327A6C226830B2E1A3EE46B72674 /* MIKMIDIDeviceManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F3B4012D6A914C8A0D02ABAAFAFEF36 /* SentrySwiftAsyncIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D96288E857160E31C20E7AE2C1FC09C /* SentrySwiftAsyncIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F5180438C3F31B9E6677FAB46DD5AEB /* SentryWatchdogTerminationTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = FFCDDE03523027AA4AED83D01BD42A9D /* SentryWatchdogTerminationTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FA4258A0A444E3A2FB694EF2C631A7F /* SentryTracerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D4A8B60F7AD8946C1560D2FC9B1E5EA /* SentryTracerConfiguration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5FB5A3C334CE0B60296EF3140D7F0859 /* SentryCrashInstallationReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 09D9693761E0BDC8504B183B45C07926 /* SentryCrashInstallationReporter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 60138211F88A2D8EE0E4405D689E1CCB /* SentryHttpStatusCodeRange+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E1DFABC1136E834A9B80BA8506BD552F /* SentryHttpStatusCodeRange+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 607E8F399E3FE84CF258C60B2FA2FFF9 /* SentrySerializable.h in Headers */ = {isa = PBXBuildFile; fileRef = 48D9322EA020FBDDC47783CE1485F9AC /* SentrySerializable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61015DDD4C5E8CEB14788B047FBA7C4E /* SentryProfiler+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B227D03F34D001264F4931343C3CFDF /* SentryProfiler+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 611C71BE50FECC1A394EE650D9EFFC47 /* SentryRateLimitParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 10FA5F34FCB3EFB59CB5DE4C37E5A733 /* SentryRateLimitParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 620B53E123444774713CB30E0720032A /* SentryAppStartTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 08DB5108D5E258D377397DE8CEF27F0E /* SentryAppStartTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 620E3CC5288BD366D5B0AA67BBCFDA00 /* SentryScopeSyncC.h in Headers */ = {isa = PBXBuildFile; fileRef = DB030BC8488CE21D50F024172EE2629F /* SentryScopeSyncC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62652961CA53D5B29FE6694DA6B44EAF /* SentryCrashDoctor.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFBF5C4F7E883B0CE1DDC4838A671CD /* SentryCrashDoctor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 629EE810C376B0BBD45AEEE254000F3E /* SentryTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = BDBE3DDC57B0A43545CE597515074570 /* SentryTransport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62EE29F4CC1D723F875FA96E7097AD00 /* SRIOConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A17DC292BDE963530239F05E2FA34FC /* SRIOConsumer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 630E7FDF9E392FB3F81C8D1008BE6F4F /* SentryProfilerState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5E8CC9B12E73421758F811C467391775 /* SentryProfilerState.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6340191F1ED87BA8CF58C155E05557EA /* SentryNetworkTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 46381AD6F5BDC8515672C8B29828B1D4 /* SentryNetworkTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 63A4D09A1DE04D7592B7DE2006ED01FE /* SentryEnvelopeAttachmentHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = A592989F329AC2BF22F7E5AB68655B73 /* SentryEnvelopeAttachmentHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63B8E6994038BA6963E8F820736CFE44 /* HTTPAsyncFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A9F9D7E7B24382E9790537A20F8D351 /* HTTPAsyncFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6412EFB5942AE8EA26ACE3B5C1252C0A /* SentryCrashThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C0767A431A76CC24DF4CDF0F70E33FFC /* SentryCrashThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 644534C23BEB6D45A83286DBA31D6D8A /* SentryANRTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EA8152475FEE15B6FE5EC1AC42BFBF3 /* SentryANRTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 647EF6BF971F05551994745FD638EE3C /* SentryDictionaryDeepSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 807367F8CEDD722A42F3AED730471390 /* SentryDictionaryDeepSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 650F3B24B2D08790CD8318488044B1D7 /* SentryCrashReportVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = DEB94ADAB8F47C149D8743DCB40FEFEA /* SentryCrashReportVersion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 650FDEA00AB1DBE015B855BEDB1079E2 /* SentrySubClassFinder.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D5E7A7A6D41259F2D94ECD16EA3DD5B /* SentrySubClassFinder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6522197B9C3D2D594CA3B49DF9CE98AB /* MIKMIDISynthesizerInstrument.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C8EC493F874B8809BCD9BC2DA9BBEF /* MIKMIDISynthesizerInstrument.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6575175333C20857353FB757E77243C4 /* SentryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = E017B86B2E26554305CB855F95B4C9FA /* SentryPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6589F5E462A777D1BEC072FA91DB645D /* SentryCrashNSErrorUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DC4DFC0E74DCAF74A19F11778365624 /* SentryCrashNSErrorUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65DF27FD72255D0269775B85DF1E633B /* DAVConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D295BB7D5E69C4C2F89CBD7C6BC948C6 /* DAVConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65FEC42E0950CD489D680A7263494CA9 /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BAED9229E045CA3C902E4EAEB308724 /* StringExtensions.swift */; }; - 665CCFC06FAAEF5C986D183101F480DD /* SentrySampleDecision.h in Headers */ = {isa = PBXBuildFile; fileRef = C8317A0D0EF05D69F1DADE6ACC7A0E6A /* SentrySampleDecision.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6678029CE1803F1E393A984445B4856E /* SentryUserFeedback.h in Headers */ = {isa = PBXBuildFile; fileRef = EE167B3ACC02085EC7BAF7F8CDA098C4 /* SentryUserFeedback.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 667E914A86E7FD86815AC10D9CB23F2E /* SentryDebugMeta.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7CF09828133D665CA31439FFE1D4DA /* SentryDebugMeta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66908376F842D3415C5BAD2FB41DD33C /* SentryViewHierarchyIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 1758F7998742EB6637EDAA0F0298CF33 /* SentryViewHierarchyIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 669125B4C98548E1A3B10D274465DBB3 /* SentryMetricKitIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D37CE0EF3FFB199E5E799E3F969914E /* SentryMetricKitIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66D20E347FC016EA89EB899919A656B9 /* DDContextFilterLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 25EC2FF8F3A2BFF1EA380AAD477C9303 /* DDContextFilterLogFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67396120FEACFFF2A02895524665BFEA /* ORSSerialPort-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A287DDC7EA7068ABCB93823D1570EEA /* ORSSerialPort-dummy.m */; }; - 691FA2CE633A93E300D8C230BA1EFD95 /* NSLocale+Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 487C769E7266A3462A910FF846140E41 /* NSLocale+Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6936A49DE278C017AE9D565F704600E2 /* Metric.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9857E7C8B38270B20330F5F9788C6D /* Metric.swift */; }; - 6949079E56CDA6A188498E9B3A893540 /* DDAssertMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F2DFA25283C5C7C974020B2A3E4D741 /* DDAssertMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 698344257BA9F624443DD01A88627A59 /* SentrySwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = 321C61AC56386B600A495E1B2162C865 /* SentrySwizzle.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 69DFA8B1F1EC68D15BF60318C104D1CA /* SentryLogC.h in Headers */ = {isa = PBXBuildFile; fileRef = 9637024B7B86F4DFE1C3BC3EFF72683C /* SentryLogC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 69F0163F28DC425BEB090C4E1D82AC60 /* SentrySampling.h in Headers */ = {isa = PBXBuildFile; fileRef = B5989B4C5A785355A33EF2AABB3FED42 /* SentrySampling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 69F2E8C204E2E4DC18E436C426A83D59 /* PSWebSocketBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = F0E08C7B71F571EC237E1A45466EA7AA /* PSWebSocketBuffer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6A1EEB9C7134FDA01553588CF2882CD8 /* SentryCrashC.c in Sources */ = {isa = PBXBuildFile; fileRef = 854A083478FB2BA393FF6C2B1F43857B /* SentryCrashC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6A73EDF12B8CDDBDB1404F793EF25BE7 /* SentryProfilingConditionals.h in Headers */ = {isa = PBXBuildFile; fileRef = 32DF25CCCF77CF0E1C1D910FE39CAF8B /* SentryProfilingConditionals.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6AC94B40B5D3E8899E0F757DDDCF059E /* DDLogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E78CC11F2A5054C67E14DF1D11AAB22 /* DDLogMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B24FD6944FF2382432F2DC64EE1AF1B /* SentryReplayEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2294F5AFC0F79C4BE69D51501D022ECF /* SentryReplayEvent.swift */; }; - 6B258A927D2F6A8614EBFC7FB9EF31DD /* SentryReplayRecording.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED5523D4F5988DE5E3BB8F6C2B2F6C78 /* SentryReplayRecording.swift */; }; - 6B2B062F505489EE60F609DF4C3AEA5D /* SentryOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D631357B9671D5C06D222EEC51B8F4 /* SentryOptions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BC9306586E5F912A9C6EEA9D6169991 /* SentryCrashCPU_x86_32.c in Sources */ = {isa = PBXBuildFile; fileRef = 14251523FF255A27A7D140F491A77E37 /* SentryCrashCPU_x86_32.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6C7C8E92468D8267CAB64229B65B5707 /* MIKMIDIResponder.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C0C431DAD109DCB31F56A6A04807B7 /* MIKMIDIResponder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CCEDAA8F771DB0FD15BF361F3AF61EE /* SentryCrashBinaryImageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B91153A5160B262B00E3A1751F6F83F /* SentryCrashBinaryImageProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D005EFB76167519BC753220396A4827 /* MIKMIDIMetaMarkerTextEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 15B2A2E5E70BC78A8C2E2288B97FD55B /* MIKMIDIMetaMarkerTextEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6D1CEA4B44BBAC27514383161C7BF0F2 /* HTTPHeaderSanitizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D56051679D48037350F252332E0CA809 /* HTTPHeaderSanitizer.swift */; }; - 6D58B79995D0ED6C834ABC38AFD14FBB /* ORSSerialPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5D0EFE8DC739CC9BC50409F6356BB2 /* ORSSerialPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6DD7498350F608C6C4071026B9A70C84 /* SentryIntegrationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BCDDA889B1220E6908312CF1762A6F /* SentryIntegrationProtocol.swift */; }; - 6DFE1E0CA97D021E6EBFC086C654BB15 /* SentrySwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 778C9EAC13121729CEB33B10C0019EBD /* SentrySwift.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E08A914A3386C45DE81083A0DC1657F /* SentrySDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 81F5C766B2045D009E0ABB3FD3FD6E45 /* SentrySDK.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E2674442133E88A8EED7AE0877FC4E3 /* MultipartMessageHeaderField.m in Sources */ = {isa = PBXBuildFile; fileRef = 77EA30B8425FD8954B23D6DDADDC115D /* MultipartMessageHeaderField.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6E4AFB0A40628D9FA2798975E5F52381 /* SentryMechanismMeta.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC5B14755BA6FCA06A597FC3AFA195E /* SentryMechanismMeta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E90BBDA1ED7FF0812D7CC7ECD9154C1 /* SentryDebugMeta.m in Sources */ = {isa = PBXBuildFile; fileRef = 93AE0E3BDFFD2D2128943F83878D441B /* SentryDebugMeta.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6EA651D48910B6963665FFBF96663CB3 /* SentryRRWebVideoEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB309AC3FBF0822DACB4B505EBDD2C10 /* SentryRRWebVideoEvent.swift */; }; - 6F2D62ECCFE01A5D5DAD1776075C4C39 /* UrlSanitized.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8572D02BB0DF5598CB21671E08EFB5CD /* UrlSanitized.swift */; }; - 6F6D8966C4F652236C3592083138FFE8 /* SentryCrashMonitor_NSException.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B18F58FD1DD21A1C801F87641C097E /* SentryCrashMonitor_NSException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6FCCB96D6F20E3A3EB4E60E88F85B7C1 /* SentrySessionReplayIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = A2E16A73DAE220CD1B7E560B08776026 /* SentrySessionReplayIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6FF8E6399842EAF3AAC862A67DB209DA /* SentryDispatchFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 201C53EE3DC316F4610491C045F88D2C /* SentryDispatchFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 700F6E5384742D753CC9F1E7A415DE6F /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = B28A4D71BC04B1694C7A281176FC21E0 /* GCDAsyncSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 704C17F38726156DC7D586FAEC85540E /* MIKMIDIMetaMarkerTextEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B4DD6C47B43DBC164DC611E6F13AC05 /* MIKMIDIMetaMarkerTextEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 705A021F8DFB25E5F73B3E34DFF83AFA /* SentrySDK+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C98440DA8D164B0F0C57A3856ED8D8F1 /* SentrySDK+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70A6875BEEC0912F82BD96D7FBCF9AD5 /* SentryProfilerTestHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 2931A045971125F75C762F489D173152 /* SentryProfilerTestHelpers.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 70A97BE18BAEF3B865BFB82C6E8DCF0E /* SentrySpotlightTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = F4304BFC958A368DAACA1629E8146947 /* SentrySpotlightTransport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 70B1D68AABECB581B3657A81E210D4C3 /* SentrySession.h in Headers */ = {isa = PBXBuildFile; fileRef = 1083B2215EEC660EC3CD6117056A0CF8 /* SentrySession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7175923422852BCB0F766C62D52F0457 /* SentryBaseIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = E4E03AA1DEA9A0040B4C1CA2DFE7FBA2 /* SentryBaseIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 71B0BCBFB86A1993D88773DBB6D2049B /* NSArray+SentrySanitize.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C8285DF218C57961D66C58B70E3D3D2 /* NSArray+SentrySanitize.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7246E30E7B4D311CBF9A99D240AC44C1 /* SentryNSURLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B11242E13E96FC3D96938A5BBBF91D4 /* SentryNSURLRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 72B2AF45220B59FA340E6707F1B53296 /* SentryProfileTimeseries.h in Headers */ = {isa = PBXBuildFile; fileRef = BD05C0B2FD5A930246BDFE9D3DB3B37E /* SentryProfileTimeseries.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72FF8D6F8F9B125D29AE2FC8EB81A6CF /* SentryProfiledTracerConcurrency.mm in Sources */ = {isa = PBXBuildFile; fileRef = D2DAAD32527B05E5F93B4F504ECA4B48 /* SentryProfiledTracerConcurrency.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7327254378E4632552F4336A72D7A0F3 /* SentryDispatchSourceWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = EB7A19F404A0BC1FF96C79F25BC88CDC /* SentryDispatchSourceWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 73272A7D5FF75537AD542B719CFFF3C0 /* SRIOConsumer.h in Headers */ = {isa = PBXBuildFile; fileRef = 536908CAEFEA94317FD61C71ED227435 /* SRIOConsumer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7336A20562E1C8AA80BE21C1EDE97A47 /* SentryCrashDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = D06A731A0261566C05CA30BD226EA77B /* SentryCrashDebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 735B301BC8EE918A41747D766385020E /* HTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 775D797FB9E9557643EFF7E556A79580 /* HTTPServer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 73722DFEE77473B438342638F58265B7 /* MIKMIDICommandThrottler.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF311B7298EBA625A098E822CBFA2EA /* MIKMIDICommandThrottler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7397464EBDFC165A2D004713EE017205 /* SwiftDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A67969A7FD464AADDA4EBA8FDE652F8 /* SwiftDescriptor.swift */; }; - 741BFB06BF1752919A5629CD1571B714 /* SentryDateUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = E58836104DBC75004560BF9A06495ECF /* SentryDateUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74644B378B7E570905005CDFB9B01243 /* MultipartFormDataParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 041DAB1542071DF652503FE967D18864 /* MultipartFormDataParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 748B945266A8027EBC32E1A9BB4FB4B5 /* PSWebSocketTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0C2102DF60E0D9C23EBF54BF520521 /* PSWebSocketTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74A921ACEEB7CB0866659A20DE64D996 /* MIKMIDIControlChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D62045ED6EEB4A5B2EB20E85A5194BD1 /* MIKMIDIControlChangeEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 74C0F4F8C7CABE5254ED538D36158DDB /* SentryTraceContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B700B370455A4388251774BCCB5DE117 /* SentryTraceContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74EE49854A4933286B871678F94EF44C /* MIKMIDISystemExclusiveCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D4029013299DFFFF40058BE4139C40 /* MIKMIDISystemExclusiveCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 74FB18586283DC91B96DB8EB712B8247 /* MIKMIDINoteEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 104BF97B96109AFCAE80915D3820EA10 /* MIKMIDINoteEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 750DA60EB3D6F1A7CFA061479B9B0C4B /* SentryTraceOrigins.h in Headers */ = {isa = PBXBuildFile; fileRef = 0438035740F3520A5F4840E1B0EB6914 /* SentryTraceOrigins.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 751EE8DE35BA969CD58F4DE939F43C36 /* SentryTime.mm in Sources */ = {isa = PBXBuildFile; fileRef = 00319DDC9C74F375944A8E25FE81903E /* SentryTime.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7539F9D50E1729301BBDD62D3BA4B137 /* SentryRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D6678A60DA665A0E90E8708C65270670 /* SentryRequestOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75550DF0706CC24A72C4F1A4258169E1 /* MIKMIDIControlChangeCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AA26B7092A6E27412E421C1E0D8914D3 /* MIKMIDIControlChangeCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7555279AF0DBBB727C33D76EDF1A86CB /* MIKMIDIMetaSequenceEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D1626E41ADEADF114F1B496238C1581E /* MIKMIDIMetaSequenceEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75DB3A7C5F4C1802CA170236EA3854E1 /* SentryRetryAfterHeaderParser.m in Sources */ = {isa = PBXBuildFile; fileRef = CED24D58E07D4230C56147FFC1BAAA77 /* SentryRetryAfterHeaderParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7685AA765609F6EE6EE040DC0203F03D /* SentryCrashMachineContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 8864375D9EC4EB3F66DF0FC142FA7CF0 /* SentryCrashMachineContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7687A13D5D949DB58BD8951EE8E82B6F /* DDLegacyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 01201FEC0DDE5E8DFA7FCC97D0B81255 /* DDLegacyMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76B78F10D8F1ED3B66E27C9E3AF62A2F /* MIKMIDIMetaLyricEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2D1326B0C7076D97E0DBD731E46EB4 /* MIKMIDIMetaLyricEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 77FA660CE0EAFE8D82EAF42BE396B4E4 /* SentryCrashSignalInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 361A8A768FB0B073B6872EDEB5E96CFD /* SentryCrashSignalInfo.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 78C9B6A2EE679526D14CA929038361AA /* SentryScopeSyncC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7AB11DDB076F6FC08820F145088F7FA0 /* SentryScopeSyncC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 78D4A6D6100243C370F424EC3D1424BB /* SentryTransportAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B0EDEBD51E8273444486EC30BC21871 /* SentryTransportAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78DDAE2C630FD974CBF0F35A90D0E6F1 /* SentryCrashCPU.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD7376EA4D90FEADEB356AB2F4105B4 /* SentryCrashCPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79521F7C7724293BEB92A25D97AB33DC /* SentryCoreDataTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7BAF8D55ABC56552423146B4547A0D /* SentryCoreDataTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A4867F70993A4BD58E1895343E919A1 /* SentrySwiftAsyncIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = D01DEA6A488A5DD484B36D8E7915579B /* SentrySwiftAsyncIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7A4AF5E68999265E8D80C3A4C863611C /* SentryThreadHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 19AFAFE4C0EDE77CD00B2F3B4B3E6C60 /* SentryThreadHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A72CA0611C2565B999DEF8DF1F68DAF /* SentryEnvelopeItemType.h in Headers */ = {isa = PBXBuildFile; fileRef = 1767E9FBEE9E9138E9C58E611DF847A8 /* SentryEnvelopeItemType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A74B0E91DEDF90FFF8CD421FED59753 /* MIKMIDIMappingXMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E1ED0785BCF2F459FEF9088AC5E1193E /* MIKMIDIMappingXMLParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A85DEBDB9F71E769D0501D90178D49F /* PSWebSocketUTF8Decoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E08F1F04EC8D67D7C213DDB5602F10ED /* PSWebSocketUTF8Decoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7A8B9F331176F37678F9D3104FE8C59D /* DDMultiFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F819F282E99A70F002E40A2B7B0C61A /* DDMultiFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B004A9EBB20F69D7B71EAEBC451D45B /* SentryUIEventTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = F6A176F71A427EBF188A2DC915C2915E /* SentryUIEventTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7B959CE82BB8FCC026FF45C5D2A0D494 /* SRDelegateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D198ED86F2FE058B09CD420BC7D3DB /* SRDelegateController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7B97F26A4D2A3A43D0F571622C2132C6 /* SentryByteCountFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = A6D2097B716EF157FA6D7B87E43DBE27 /* SentryByteCountFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7BB6FF6F1DCBFECD9FC36E60E1BC5F45 /* SentryCrashMonitor_Signal.c in Sources */ = {isa = PBXBuildFile; fileRef = E007A1325F0132F4B3311F0D79DC2EB1 /* SentryCrashMonitor_Signal.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7BCBC9587ECB711150E37D3E288EDADC /* NSURLRequest+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A4938F684913D37B6337405025347608 /* NSURLRequest+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7BD1E496976C4CE5A68E70C5E7E1AD86 /* SentryNSDataUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 67CC0210F6E9F782324580A7B015C0A7 /* SentryNSDataUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7BF70DE8ABF21F074934D5BFA371FE3A /* MIKMIDIPrivateUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F8DDC460A7A6A031DC330E73B2D07AEA /* MIKMIDIPrivateUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C53949D32787D8CEAEBE3E056D23EC8 /* SentryTraceProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AA0B27EDB7D51C38B986804EC5216C3 /* SentryTraceProfiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C5A5D5FB9A38972E803BB267F0D3F30 /* ORSSerialBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D8CFE95C10F85D5744A16D3D436C0AB4 /* ORSSerialBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C8319EBBD6D670B99418A7784872620 /* ASCIImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 58898C2C80AF3049268C2B9E34A65D89 /* ASCIImage-dummy.m */; }; - 7CF8DBCE56BB105361065352FC57FF87 /* SentryExtraContextProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 11A520C1D2AC3E07DE1662A0E8FFCEEF /* SentryExtraContextProvider.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7D054B901822406E69497ACBEFB6208D /* PrivateSentrySDKOnly.mm in Sources */ = {isa = PBXBuildFile; fileRef = EFAD24B74F9B012A20554D15DA5530E5 /* PrivateSentrySDKOnly.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7D7D40461C41345801D1E1D551896887 /* PSWebSocketNetworkThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 508261EBE24B47C5F9D0AC95B22E953E /* PSWebSocketNetworkThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D87D523BB7AA9C207FA57992F58835A /* PSWebSocketInflater.m in Sources */ = {isa = PBXBuildFile; fileRef = 92FE6A882C4D18E418625FFC2139AA49 /* PSWebSocketInflater.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7D8DA2E2DA3A6053570DAA19071A252A /* SentryConcurrentRateLimitsDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CEC1A2F877C5B257C8E8CE0F10E4A9F /* SentryConcurrentRateLimitsDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DDE118F704FD73F0CA77397BF6413BA /* MIKMIDIEventIterator.m in Sources */ = {isa = PBXBuildFile; fileRef = 360DCC1ECB42ED92A9FC9B41228892B8 /* MIKMIDIEventIterator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7E0A57EA69BD8EB2B5A22ABB663F8B11 /* SentryPerformanceTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 54D13411BEFB6D1F745DA9A7EA459A40 /* SentryPerformanceTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E27BE7E1947ED28A53D8D74DDAE6163 /* ORSSerialBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 34464D38DB64C467279A7B55DA1F31D5 /* ORSSerialBuffer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7E7D5F42AF63294D116A088AB0783851 /* NSURLRequest+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B31AFAB139B55E0B8A0137989929E2F /* NSURLRequest+SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E95DF28AA554FCE9B3D4F36D4398CF4 /* UIViewController+Sentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 43E7360C1E797D7734623EABE3825A14 /* UIViewController+Sentry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7EA9341FF8D4B9F542C1F8F0A1CCBFF2 /* SentrySpanStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AEC779ACD655FF28BFE4738AB05740 /* SentrySpanStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7EC5CCA4E4A850FC3DF7DDBC97384815 /* SentryLaunchProfiling.m in Sources */ = {isa = PBXBuildFile; fileRef = 19F69D29E945CBDE24E2DFE354BAE198 /* SentryLaunchProfiling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F23F4420A575EA6F9089B31DA1ABBAF /* SentryTraceContext.m in Sources */ = {isa = PBXBuildFile; fileRef = CA3491F9FB1375C03F8DDC73930BF1D6 /* SentryTraceContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F52D4E419E020B682CFC2FAE5031602 /* NSLocale+Sentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 902BCC112991AEABE78136494D482BA0 /* NSLocale+Sentry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F8681B20F131744E04850B075D08630 /* SRProxyConnect.m in Sources */ = {isa = PBXBuildFile; fileRef = 53BD21DB8B784C65C60DC1CE6061B8FA /* SRProxyConnect.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7FC034144E26E62685B76EC0CCA6485C /* MIKMIDIConnectionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F4F4F91847F1528BD31F55AC01268C /* MIKMIDIConnectionManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 80A694EA4EC5749125EE05F9AC38DCEC /* MIKMIDIMetaKeySignatureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B3F4666DB87FE6C1B2D8FF038DC8E9 /* MIKMIDIMetaKeySignatureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80B38636A48B29EA377EDB3C8CC345A6 /* SentryInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 58EA2E9934DEBA053B68AB628755B6FE /* SentryInstallation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 819D32C8279D40318F03A1A944DCCDC8 /* DDNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = E1026F22848E378B0F43660D21EDEACE /* DDNumber.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8249B7BD7EC8914EE2E23BFFB6BC8990 /* SentryMigrateSessionInit.h in Headers */ = {isa = PBXBuildFile; fileRef = CC072351C6CC94FA790ABD3D97327DF9 /* SentryMigrateSessionInit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8296D1A49CDA0909D64AAA8566FB6CCB /* SentryGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C74B24FB5704C924583B5804B9DA3E7 /* SentryGeo.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 83096D4236A7443526CD19DEE39F8973 /* DDNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 469D7081C4DC34D2858E99DDFF2D0366 /* DDNumber.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8309EB20F29C5A85EA3CB4F55A3701AB /* HTTPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = EFDDE2D28C9D803BF4320C6063D59DE0 /* HTTPMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 831336F244DF178EF56D596830D0CBE4 /* SentryBreadcrumbDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5C8572117BD227C602DAC5FEE82105 /* SentryBreadcrumbDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83875A68A61509456A667043677F5FF5 /* SentrySystemEventBreadcrumbs.m in Sources */ = {isa = PBXBuildFile; fileRef = 000FD6662207B7B9FE7ADD0446A98A8A /* SentrySystemEventBreadcrumbs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 83DDC77B93E45AFB197877511597BC5D /* SentryBreadcrumbTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = F9049991B084FFDA352B82E541333219 /* SentryBreadcrumbTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83EED6FDB282EEE371F7E4DA332F56FC /* SentryCrashWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 824721A438303BD1A058012EA4CC2982 /* SentryCrashWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8414C55579CDB206B3CB9BA62AC679E7 /* MIKMIDINoteOffCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 48C1F65A6C505A7160B6C24F20026139 /* MIKMIDINoteOffCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 84278CAB196A83B878B2170831314FEF /* SentryEnvelopeRateLimit.m in Sources */ = {isa = PBXBuildFile; fileRef = 8424AD41362FB5AEF19608A7CBC810C3 /* SentryEnvelopeRateLimit.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 844D64D30AC5A62EEEA378C51AF1FE18 /* SentryUIEventTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = AED8A3DEE4D565E5211CD39359F289AB /* SentryUIEventTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 846A9E129CFF98168231AD2AC7FE6423 /* SentryCrashMonitor_AppState.c in Sources */ = {isa = PBXBuildFile; fileRef = 66A229C0D9E692215470C3B9CB63E1A0 /* SentryCrashMonitor_AppState.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 846EE47763082B34D913C2B7C66B8C3F /* SentryANRTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = A76009F81F962EE26C018F3547969E51 /* SentryANRTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84881E7CDC2031B3BE915535C0DD3790 /* SentryMsgPackSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = EDC0943F9037C31E4BB345DB0519464F /* SentryMsgPackSerializer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 848C1B81AC0F6BFC4DDC1A01A7F783D4 /* SentryDispatchQueueWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F30662254B5249C452761DBEADF88AEB /* SentryDispatchQueueWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 848EDD21B8A879E654B3F15035EDC332 /* NSMutableDictionary+Sentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 92B0C7B5929F085D529E99BB413EBA79 /* NSMutableDictionary+Sentry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 84D39C688F4EA63EC6B9361F38A59FC9 /* SentryReplayOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53C405E80F37BC880FACE2AB1597AB2 /* SentryReplayOptions.swift */; }; - 84DE5CB0AC9FFED3B265839ACDB78ACC /* SentryDevice.mm in Sources */ = {isa = PBXBuildFile; fileRef = EE9F4F84F0AA8532D84ADA0EA5BC134E /* SentryDevice.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8542DDB4340F5CEAC4BDA74D01671A1E /* SentryCrashSymbolicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C176EE486CB28F40C2536448BC7400 /* SentryCrashSymbolicator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 855C019B07A0840D621AB030217C8BE1 /* SentryInAppLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = C6B94D8169DB9B1DE0E0A3A75EF42CDC /* SentryInAppLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 866FF228D7E04BDB19C6CB0DA1DACE3C /* SentrySamplerDecision.h in Headers */ = {isa = PBXBuildFile; fileRef = BEB12B16B65038501D6EB7D96A36391B /* SentrySamplerDecision.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8692257BACC6EF76D64A9A5B4608C2A2 /* SentryCrashMonitor_AppState.h in Headers */ = {isa = PBXBuildFile; fileRef = E5728A59CC3B61ACC5C6B32C5E1208F3 /* SentryCrashMonitor_AppState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86D1508DBE41B3D7171C6137EF80C0FA /* SentryCrashReport.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B6233CB25C90BD806A74EC8A0CDC6FE /* SentryCrashReport.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8718BD9A7D6EE279FC594BF78D0CDBEA /* SentryDependencyContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 269AF878DFC82DC2FAEE0B531439BDB7 /* SentryDependencyContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 877E94A676EB9A0DD64A4646D23F693F /* SentryProfilerSerialization.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6037D4B49CF5C089489CECFB8CFBBD87 /* SentryProfilerSerialization.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 87A85C0B66A7B4FBE1930A930A639894 /* SentryCrashMonitorContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ECB70880E77E3CA7EACB5B2067A3ECD /* SentryCrashMonitorContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87BB440ABF524BB5B83683A21D73BE53 /* SentryDsn.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFE0503F38113C24E4BD42FD5E0AE0D /* SentryDsn.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 880899914F73C0BDC732FA09DC6E5838 /* SentrySwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = FFB1E131ED2C84E1C502868C39278700 /* SentrySwizzle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88559FBA81CD3CFA2EBF721F71B5146A /* SentryAutoBreadcrumbTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C2CBA4FA98212DC9EFDCEA40D485D3 /* SentryAutoBreadcrumbTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 886CC415364964154E36041767FD415B /* SentryByteCountFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B804911071F4F15412FA71EBDF64CD8 /* SentryByteCountFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 88859EB9DB5127DE1D512F7F9A22BC74 /* SentryCrashThread.c in Sources */ = {isa = PBXBuildFile; fileRef = ED464F2D1DA0087B603F30746D1DB96B /* SentryCrashThread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 88A1FD5F93AA6BAD4BDC6689FE1924A6 /* SentryFramesTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 91416C4E1B3ABA3F34D11AC4F3FA6529 /* SentryFramesTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 88F4A46347E60773EFBE66CCBC93A28D /* PSWebSocketDeflater.h in Headers */ = {isa = PBXBuildFile; fileRef = 87CEBFB7B7323593F0CE749DDDFCF274 /* PSWebSocketDeflater.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89D25E593D7EE73DC653BB9A3C714261 /* SentryMXManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF70139B0265F43C0F3FBF882396DF88 /* SentryMXManager.swift */; }; - 89DDE22209DCA09A4A984F64BE70386A /* MIKMIDIDestinationEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F62D80A09A80EF0A76119764A3EDF1 /* MIKMIDIDestinationEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89F8483389EB3F63F9AEE57CBE72AEF9 /* SentryInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = D288E2BAB78EE1922C20BB1E84892D65 /* SentryInstallation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A461AA6DCF21314CCEEA540AF018F92 /* SentryTransactionNameSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9023D2AEFD8E126A51F1404D7F1412 /* SentryTransactionNameSource.swift */; }; - 8A54B16C9C1FBF94D56EB1494A606452 /* MIKMIDIPitchBendChangeCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 74A74CE5079B3CEE1D1525045572CCA8 /* MIKMIDIPitchBendChangeCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A71A42BA83410BC16D965FDA493E930 /* DDMultiFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 76FF09B5E0DF61D1A9A6AB15FAF0AD06 /* DDMultiFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8B57E2E1EC240356CF2C03F688DF1326 /* SentryCrashID.c in Sources */ = {isa = PBXBuildFile; fileRef = A53807FD51EEB03F5DABD4AAAEE94EDF /* SentryCrashID.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8B8242BDCD2E86428AE907C4CDDA68BA /* MIKMIDIMetaSequenceEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 185CFDCD1462B098FBB7AC0E6EDC8320 /* MIKMIDIMetaSequenceEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8BA14EC86BEE75C51075FDAE45A69F34 /* SentryProfilerTestHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C22C468A1B8C61CE66E850C1E336E62 /* SentryProfilerTestHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C15BDB0DB7D4EF10D101E3D74EF7711 /* MIKMIDIMetronome.m in Sources */ = {isa = PBXBuildFile; fileRef = D1CB0D70200ACA8090748F69D49324EF /* MIKMIDIMetronome.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8C1839E41794952A788F0FF5714ACC6E /* SentryNSDataSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 90ABA8BA9BC696677D0D28784125D7DB /* SentryNSDataSwizzling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8C42085E9127F5691C510980F0DAEA24 /* MIKMIDIChannelVoiceCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 856EF9D8335163A11F7B46D310CBA477 /* MIKMIDIChannelVoiceCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8C5033CF668D87ABE4B57725306093C0 /* SentryCrashMonitor_CPPException.h in Headers */ = {isa = PBXBuildFile; fileRef = 2711E9293E290259FFD7654E696290AD /* SentryCrashMonitor_CPPException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C7A55908EA721EB41A9A1643B754C4A /* SentryDiscardReasonMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E9730523C6D811F54C48AA80470EA0 /* SentryDiscardReasonMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C7B6BA65F94B81FF2F9F514595B93A5 /* MIKMIDINoteCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B7819928A362B7331919F4DDEF0E2C4 /* MIKMIDINoteCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8C7F8295AA3BB165B00C62F62D7F137D /* SentryAppStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BB2B1F108331EA9E29355D76CD4A0C /* SentryAppStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8CA82B41A0290CD6AC07091B053CE77F /* SentryCrashStackCursor_Backtrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F32F0B5CF5DE9568030FF636CD17B811 /* SentryCrashStackCursor_Backtrace.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8D1AD1D92AF069C15B8725D3AEA03917 /* SentrySystemWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = BF62C2E79B23C4ACEB7B0B22408309CD /* SentrySystemWrapper.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8DA0F5A4ED58EB4120614AF63E2DC9C0 /* SentryTouchTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE92B3044EA5408E8C91A67FA4EDAC6 /* SentryTouchTracker.swift */; }; - 8DD4F027A53BBE1AAB42B91199F54DDA /* SentryCrashStackCursor_Backtrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 351EBB12EB2B6E30EAC0B29EC263DA93 /* SentryCrashStackCursor_Backtrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DDAB609965C973E7AE43DDA7482A5D2 /* SentryCrashExceptionApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = FEE334FD066A7AEE1B4DDD62559DE8AB /* SentryCrashExceptionApplication.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8DE5E089120E52614F819B8058C42F6B /* SentryDiscardedEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BC79C707030930C0BEB9E2493247685 /* SentryDiscardedEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DF968950C2BC63F53CB1DD07262A031 /* SentryQueueableRequestManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E97943931DA666D19A31C626A71CE7B5 /* SentryQueueableRequestManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8E0B6A601E2BA79F03825DF092B4E918 /* SentryScope+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E365316AEDAD33A3CA186A6B525D811 /* SentryScope+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F7B95925D0E62C1C36BDEA6EA479DC5 /* SentryCrashCachedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FC7FEC1648CBA3A851001FA6A2C67D3E /* SentryCrashCachedData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8FA2C8171A0AA5D027D6B91AB57FB606 /* SentryCrashStackCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = 3FA1F0852BBD17965FB67AE24D3A296C /* SentryCrashStackCursor.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8FDE1A05F3BD179213E10C7D20701CE9 /* SentryNSNotificationCenterWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 60C9088A32AB6A50F44E9155C67AE6A1 /* SentryNSNotificationCenterWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 901376628675C4789FB24499AA13A42F /* MIKMIDIChannelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BA81D88AE03EA2FF4486A784C195958 /* MIKMIDIChannelEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90653ADD4B5219833A664DE09DE5D448 /* MIKMIDISystemMessageCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DA2CA87B777B7B3C88D6A8AB74B31EA /* MIKMIDISystemMessageCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9096504782451451A412B3B074E0FA27 /* MIKMIDIMetaTextEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6951F73B50642A08DF568AE1C79853AD /* MIKMIDIMetaTextEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 90AB3E04148A843A72221F46B3BF5E0B /* PrivatesHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 1252BACA64EB5080BCB73AF65E445532 /* PrivatesHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90C521F3600E90454DE9C0A5F75B08A8 /* HTTPErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD846D611BF2B613C5F9750B9D84F66 /* HTTPErrorResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 90C8537F7D48924824E1DAB208FA2B7E /* SentrySession.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A5F6AD94DDC763ADCCFEF62916A082 /* SentrySession.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 90D9F117CDECDACBDDBE2E8632D2D5FA /* SentryANRTrackingIntegrationV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D5EB7615C4518DC633202C82F4FB3DB /* SentryANRTrackingIntegrationV2.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 90F6C5EBFDF12E359A6FD141063FBF0E /* HTTPAuthenticationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FEF703340493D0D19727935AE04F688 /* HTTPAuthenticationRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 910771419483EB8D63BE72416D8DF970 /* HTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6712244FC2230421B8DB3EB777B89EF8 /* HTTPServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 91347D9636E60291BEA877BC013046B6 /* SRLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 813BA02EB99705920E6D4C7E5020B44D /* SRLog.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91779607AD01FB55B4B5A2E4E20EF59B /* SentryNSError.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCD2D8780D89C918F224760D4CDD736 /* SentryNSError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 917FEC78C7CF643079EF79828A3994F6 /* SentryCrashUUIDConversion.c in Sources */ = {isa = PBXBuildFile; fileRef = B7786342F5239BB026883A01DB4C2A79 /* SentryCrashUUIDConversion.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91CFEDCE8E152D1F209A8056ED22E4D4 /* SentryCoreDataSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 3495B8C94EDB6B1179F5143DB18AC308 /* SentryCoreDataSwizzling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 91DBBBCF749407960AD940353B0E4F71 /* PUTResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EA0D791FD848CAEF9ED7FE5687CFAB5 /* PUTResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9206AE70952347D99BD7BAAC77CEC5E3 /* MIKMIDIInputPort.m in Sources */ = {isa = PBXBuildFile; fileRef = 628B93E18C67B0838D7595837DD1CCCF /* MIKMIDIInputPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 923CE0D307D3A3A8E70E9E571747A09F /* SentryCrashStackEntryMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F43F9C227D195871399DBA0FAA39C16B /* SentryCrashStackEntryMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 92DB7C81B3F97400CF177B0A3B9A0A8F /* SentryLaunchProfiling.h in Headers */ = {isa = PBXBuildFile; fileRef = EA99648975F943639502A5C133C72BF5 /* SentryLaunchProfiling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93014ABB45C895B6F6DAA9E85E7754E9 /* NSRunLoop+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DBF4C768EAE37EDA9A497C404AD5067 /* NSRunLoop+SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 937C0D89ED0B1F087D86EAECE1B859F4 /* ORSSerialPacketDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A13A202EB5B1A6EA6A4E7F4C1273452 /* ORSSerialPacketDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93A1D4FF8AB8E3954D8BDC8D7F483022 /* SentryRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = FD551AD7F7BAE8AF38530092ABA46B34 /* SentryRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93BE2E78DFE82A352A8DFFE1CCDEEC7F /* MIKMIDIErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = FBA686097CC7BAC119F4E818023BFC63 /* MIKMIDIErrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 940455238435381D4A94ABC6AFF0F830 /* MIKMIDIInputPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A856A9DAFBF64AF6064FF8EE12DECA1 /* MIKMIDIInputPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 944B436CCF9071B09EE5F2FAE4023C69 /* SentrySampleDecision.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CD172316CB9D69CED6FBB7CDE8341EB /* SentrySampleDecision.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 945A7ABE8DAC06D228C1119B07B01C78 /* SentryCrashInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0034B207B770B243B1D14A71C2DEDE38 /* SentryCrashInstallation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9465E7C6E3DAD1A56159D11D3EDF8EB1 /* SentryCrashString.h in Headers */ = {isa = PBXBuildFile; fileRef = 607ADF718F5D32C95BA86105ADB2AA51 /* SentryCrashString.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 947DF1CDD00E75BECADFB0AF0E40AE56 /* SentryFramesTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A40443DAD3018E0D9D575E69AFB45A2 /* SentryFramesTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94878AC91EF3488FF3395E1B5D72E5E7 /* MIKMIDIPolyphonicKeyPressureCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 16AE75DAA9C3A79DA01D5BB93F854C68 /* MIKMIDIPolyphonicKeyPressureCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94905CCA34A94A71E221DF09A04EF3BC /* PocketSocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5512BE654B5A8D0635EAEC3986B81467 /* PocketSocket-dummy.m */; }; - 94B258F624A5031EE3499F1AA8580FD2 /* GCDAsyncUdpSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DE302533817BAEF9AC01B8EE7198ACC /* GCDAsyncUdpSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94DE83588295F18C9D466F5AFCEC9550 /* SRSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 72410BFF01262739729F06CA6B62D25E /* SRSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94E366711DB82403414A6CCFBE5046C1 /* MIKMIDISequencer+MIKMIDIPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB82C25C4B233D8794576EE0DBC49E /* MIKMIDISequencer+MIKMIDIPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95391A75C28D693CDC501EEE6E899599 /* SentryNSDictionarySanitize.m in Sources */ = {isa = PBXBuildFile; fileRef = 50B2B367A1A2B99E2372107ACB0077C2 /* SentryNSDictionarySanitize.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 95DF2B86BA0C7CF4C683662BED6F8F10 /* SentryAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = E42C47184EEEB774E7E12B9BF7B0AE29 /* SentryAttachment.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 967CF8EF1A94D97A2DB6DA0C97E8B2AE /* SentryUserFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E514F51D260A11D56F40DDCD336A63 /* SentryUserFeedback.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 96BC9F146513131231528511A772D098 /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7912F98687E5F3DC6F52736B5D6E6B2E /* DDASLLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 97743956A4AE1D60007EB491AF814430 /* SentryNSProcessInfoWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA638962BEEAC8342C9B8D5084536D61 /* SentryNSProcessInfoWrapper.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 978A86063F40961A9FC16B38322B31F2 /* SRRunLoopThread.m in Sources */ = {isa = PBXBuildFile; fileRef = AC0A367A791AC08CDA9C2A8610A45D36 /* SRRunLoopThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 979611AD3DFF7804ACFBDD7B511555D3 /* PSWebSocketBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 36FD7BE852BC2FF341138C7171380B46 /* PSWebSocketBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97E42A4AF1BF8C99D0517D8D7D646045 /* SentryANRTrackingIntegrationV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 560D47C2A849C53E2AF646879CA2260E /* SentryANRTrackingIntegrationV2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97FEA33F26EF0F62A3EBB28EBED35A4F /* SentryCrashObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC2614B3B8D466D32F1DD952483C351 /* SentryCrashObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98388898B0EC173983F179B0748D9BCF /* SRIOConsumerPool.m in Sources */ = {isa = PBXBuildFile; fileRef = A11C17EE437FC5AB0BDA0325363E437A /* SRIOConsumerPool.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 987991DCAE89D3C3117F3EB941CE664A /* MIKMIDIPrivateUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D041180E7BB7625A1791279021F5EA /* MIKMIDIPrivateUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 987AEEFD5483A55EBEFA7EAE0DE5E5BD /* MIKMIDIMetaEvent_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = BD5FD0ED28F5B03F8693B93FCA798D73 /* MIKMIDIMetaEvent_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98B8E5E66A6AE0ED4E0CD51330A0D1F5 /* SentryEnvelopeRateLimit.h in Headers */ = {isa = PBXBuildFile; fileRef = CE56D423CA52273FA1E301F5D877E103 /* SentryEnvelopeRateLimit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98D8E664C259B750CAE67742736CC458 /* SentryRRWebEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2DD1CA88D6299A643B84406A4D04DD7 /* SentryRRWebEvent.swift */; }; - 99286A9222D7F9AF15D0CD8C05C1BC1C /* SentryMechanismMeta.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F453D2DDCD6E7682FF8C9A7C61930B /* SentryMechanismMeta.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9939EA41F170F5A8754DE8866B552212 /* SentryAttachment+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A677BC0259318FAE26742F4AB3B60073 /* SentryAttachment+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9948FD6C99688D16B9DA8B3785FE294B /* SentryFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A39CB8EA3CBC6F2CDC535C59D576E0F7 /* SentryFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B243442E91FB29C05539E11D21FFD3B /* SentryEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 19528B16C8468503A93F4A4AE567FAA7 /* SentryEvent+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B37708C7533BA54BD3C15F1F4489112 /* MIKMIDIClientDestinationEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 46476A7B8A6CD10A627F9418D169CCF9 /* MIKMIDIClientDestinationEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9BF49D377398357A10F2CD9974BD024A /* EncodeMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C68D304D045C97D23C0F0D2BB3F9CA /* EncodeMetrics.swift */; }; - 9C0394BFFC85CAEA02504FDE6EF02192 /* SentryCrashMonitor_MachException.h in Headers */ = {isa = PBXBuildFile; fileRef = C239CE4E1013EA661055180332FDD86A /* SentryCrashMonitor_MachException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C41E8BB47816FE5F62E84C164E453D9 /* SentryBaseIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = DEABC0B771792792AB178CFB5773FB1D /* SentryBaseIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C4EFFB7152DB9C1DCDF4F80A21877BF /* SentryOptions+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07E6C4356625256612499FEED3B91C44 /* SentryOptions+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D13129BBE5476F59D286E8045EDBF4E /* MIKMIDITrack_Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F30D997712AB96094372E02201362BD /* MIKMIDITrack_Protected.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D1AA5F1DA67CD995B2E73B257521635 /* MIKMIDI.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DBD06341C440F8640B2339335FB8024 /* MIKMIDI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D1AED1520BBD43A57BA15734A6B1504 /* MIKMIDIMappingItem.m in Sources */ = {isa = PBXBuildFile; fileRef = AB801297707EC98AAF57E7099565E70C /* MIKMIDIMappingItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9D1F598CCEB3995DB06E04B1F762414E /* MIKMIDICommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D513CA96F29F44A4E6158DC7AC257404 /* MIKMIDICommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D511C0170D35116B03790DB91DBB4F6 /* MIKMIDISequence.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBEA235F7AEFE3EA2731A3825ED6AA5 /* MIKMIDISequence.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9D5B5AD1E05A7D99E4B6C988918C980F /* SentryId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83399FD92E465650EE055AE23ACE178F /* SentryId.swift */; }; - 9E30518699EC6EA1F8E9D00292DF35E3 /* SentrySpan.h in Headers */ = {isa = PBXBuildFile; fileRef = A8F565F82675C906821D6FC3CC12F1DD /* SentrySpan.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E793F6C4F67A177A4A38D9841D586DF /* SentryCrashReportStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6497495F631BB324F8FE709B41A518CC /* SentryCrashReportStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EE02F2BFBA76A555929EF5686CEB9EF /* WebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = E1BD483179BB6B080A80DF000573F098 /* WebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9F40C405E611B60970D1433DF6A3DB11 /* SentryUIEventTrackerMode.h in Headers */ = {isa = PBXBuildFile; fileRef = B28238865833B36D3ED8E6ADC5884B96 /* SentryUIEventTrackerMode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9F6A05C55813D3C253C31183F0312A05 /* SentryTransportFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C90193720FC96FE63CF773E1F182187 /* SentryTransportFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9F7676FF7D4834980ACA4150EF5A52DE /* SentryBacktrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71DE99D8F0C29A1369EF94E43F95E420 /* SentryBacktrace.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9FA8D81BD6325236CACD09AFEEA99184 /* SentryRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D680C891D3BD3CF2030A2B756AB4E23 /* SentryRandom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A001FAF2EF59B0AE18AFB5BADADA9563 /* SentrySpanOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BFDD53367D50C36D6597EB3B5D1F44F /* SentrySpanOperations.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A00701CADC907A10871BC76CDFB85841 /* SentryCrashReportSink.m in Sources */ = {isa = PBXBuildFile; fileRef = C9733620410EF3B5782C9A7CFB99A3B0 /* SentryCrashReportSink.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A03A0691433A9FA80F4196F1B3EF872C /* MIKMIDINoteCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 74477422FD95AAFB96A9C37BB7C82E32 /* MIKMIDINoteCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A08BEF9C601AA7B9D2BB02D89C68645F /* SRHTTPConnectMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 28B784B40871DF1892423829E2610DB4 /* SRHTTPConnectMessage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A0C881978333586E0F2F52B1AFA578F1 /* SetMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDC27871CEE396D712089FAEF715D347 /* SetMetric.swift */; }; - A1797FA8DC8B5CBFC7627DCCF932E522 /* SentryInternalCDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 71ADCAE3D90BD309CE2A9062CABA944B /* SentryInternalCDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A26E477022D7BAD793BC195BA78CC9FF /* SentryCrashReportFields.h in Headers */ = {isa = PBXBuildFile; fileRef = F059627EB5B6F14D6ADFF7FDF4AD9027 /* SentryCrashReportFields.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A29DFFC67282B472D5F6A74B47CACB07 /* SentrySpanContext+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 14228DE9772125B484F08529B4BF3D8A /* SentrySpanContext+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A36354EDB20466346A0C06451A76BE78 /* MIKMIDIMappingXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 17268AC0F413736F6F8B9F5131871622 /* MIKMIDIMappingXMLParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A393F07D9673F724AFB1EAAA86FA867E /* SentryCrashReportFixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 58CED6652409D2EE4AA8580A35BF3FD8 /* SentryCrashReportFixer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A397809CAC83A80AAE52156B85F84BAE /* SentrySwizzleWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = FA14DEC9E802765F82D1A8EDD06A9C4D /* SentrySwizzleWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A39DA17B37F860B7A71CF4A268203BC4 /* SentryAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EF263FD48C8F7F05317ABE1FCDD7975 /* SentryAttachment.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A3F13A606E35DD5792FBF859BCC77FA5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9093C406D4B64731D18CCA6C385B6596 /* PrivacyInfo.xcprivacy */; }; - A470093B7160A9E9978D3F6F1A56F114 /* SentryCrashMonitorType.h in Headers */ = {isa = PBXBuildFile; fileRef = 50C6FB1EF2872A99F49A9617B4A08E32 /* SentryCrashMonitorType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A49B8174788EB78294EC5C08795BF46B /* SentryStacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 34A3BB5BA8E9818AEACCB1BD6DD07585 /* SentryStacktrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4BDC047B3F26A9115DB2E18164F5A75 /* SentrySessionReplayIntegration+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FABC3739F60CA36C092CF2C0223ECE29 /* SentrySessionReplayIntegration+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A58555A30D3F6DD2932F199645F0D437 /* MIKMIDIChannelPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D26CD688523F3C57213401EFDD1E301 /* MIKMIDIChannelPressureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A66982E2B8CC71618D36E9D902C811CC /* MIKMIDIChannelVoiceCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CEA682C719C79FAFB6D025E3DE00B7D /* MIKMIDIChannelVoiceCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A66A1150CF9AC2C4863AA1F1DD0916D8 /* SRSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 859C7C1828CE86CFD39DF3F7F4868F54 /* SRSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A687BF90EF94D48506FEA20E07B5D161 /* SentryPixelBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C22B6113525CAE7948EB1F4363FA4FC5 /* SentryPixelBuffer.swift */; }; - A70FBF5807414C1F32D97CD190D1E5F9 /* MIKMIDITrack.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BD8AC64D4E827EDE6B96AF3EFC4678A /* MIKMIDITrack.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A71B86F0A140929D5439924F289D5F3D /* DDASLLogCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = DE3ADFBE83594B129C861552C701D694 /* DDASLLogCapture.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A78110B581DFE9747E75E9D713F8704D /* SentryFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = A0F1C8387B9F711513BC694C1257A76A /* SentryFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A79AD3024A4B6B115043D8F439FF11A5 /* SRRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D9AB898C363D41D4E481EB5B188699 /* SRRandom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8251337377A590A2D5FFC044FD2A497 /* SentryCrashDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1954C60F88408AE1E27D411C67A64C3B /* SentryCrashDoctor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A87B808BC358D3CF036CFE7D999A7BF8 /* SentryProfilerState.h in Headers */ = {isa = PBXBuildFile; fileRef = 90FB191DFF25E58F5AD7C2973E729417 /* SentryProfilerState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8BE88CC1E857A5CBF3FB16F34E44DFF /* SentrySdkInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 689A48F516AF161D0C9E87999E7183FA /* SentrySdkInfo.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A8F08BC305B6A025ECEF3F2CD48E421D /* SentrySessionCrashedHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E37DE56638D8C8CA4EC981C5B6135CE /* SentrySessionCrashedHandler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A911732D4221F8636FA50F7534F9C495 /* SentryTimeToDisplayTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 6729B55F9C55EDECCD1D2BFADB8DD826 /* SentryTimeToDisplayTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A978431FB4BCB5DBC81664886B86497F /* SentryCrashReportFixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 2F6338A2D362B2FD9BA68A63ADCE1D35 /* SentryCrashReportFixer.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA03F112E69F81A279BEE0076C43119E /* SentryLevelMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 440BFF887B8FEBEA78D7FE02916A1E97 /* SentryLevelMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA72DF2A6B08DFDA765C66CAB96FD34E /* SentrySpan+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F24DBFD966AD61608D15CE3BB599255 /* SentrySpan+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AAAA8A9DAAC9BD2E9867F3DC1565FA41 /* MIKMIDIMappingGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD57E13BF3AFECEC395FF68062C78BF /* MIKMIDIMappingGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AAE36C2BF8E3D2F8AE0203CCBC2A2871 /* SentryProfileTimeseries.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9C7B72EFCA520A3F9774C14C668FBAB3 /* SentryProfileTimeseries.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AB0F79B318B887A36B85B240DB74B555 /* ORSSerialPortManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D6B9550261A744095833786371052979 /* ORSSerialPortManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AB209F4F025C8205A2AFBDB78A86BBD6 /* SentrySpanProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = E5F6B485DF6D918B24F3AF358483B380 /* SentrySpanProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB26977C3E057D1B3EE8075B6969F916 /* SentryCrashMach.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC6775638F38D17B39F7C1C42B0A381 /* SentryCrashMach.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB305CE4EDD2FDFA479EEDB481960DD0 /* DDDispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1085C147BBBC7A7D064C8ABF3C624BB8 /* DDDispatchQueueLogFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AB727E237B29D21A2E15F7E5216FF00E /* SentryRRWebSpanEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE330B03F9BC6E475FC6D3953AC3303E /* SentryRRWebSpanEvent.swift */; }; - AB86E6ECB40478ECD0EE565E1B1D5F09 /* SentryInternalSerializable.h in Headers */ = {isa = PBXBuildFile; fileRef = C0C3CC1F137AA503251BD2AA1E6F778E /* SentryInternalSerializable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ABF7C3A1834E6EFCEC2FE29C725CE7F3 /* SentryConcurrentRateLimitsDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = E6C750537F82086F752F1CB28A85A5BD /* SentryConcurrentRateLimitsDictionary.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ACA885F60431E53F0AC8C8ACB1F76145 /* SentryHttpTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B62F0D9B84A3AE71635C731B2867731 /* SentryHttpTransport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ACF3DF1BF349600818FAAB1EE7048FA0 /* SentryEnvelope.m in Sources */ = {isa = PBXBuildFile; fileRef = C249610D89B6543D6AE0CCE7384171F1 /* SentryEnvelope.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AD2EE563082F019D68C30DEC8482EB60 /* MIKMIDINoteOnCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 25876F8CF4AEE118E00C5841DCD5AAB8 /* MIKMIDINoteOnCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD49CA5FBD63B1A721BE6047FDB8F587 /* MIKMIDIChannelEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4849D2E9F89F9438BE85A9EEB1BE5D96 /* MIKMIDIChannelEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AD61D71B8AAE5FC2DA652C8849D5AD00 /* MIKMIDIEndpointSynthesizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2678663DBF6EFB33E4F37305843EEE38 /* MIKMIDIEndpointSynthesizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD7E99BEEAFCFC1113920D2AE4A3419E /* SentryDispatchFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 078810D0AADB156D6BEA27E4F0E1DBFD /* SentryDispatchFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AD9A2C0A13B584985CFF29E260A18937 /* SentryCrashWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 882F2C490C4B281DAEB04392CD181CB4 /* SentryCrashWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ADAE43EDEBFFD59AA57142A1FA9F7924 /* SentryGeo.h in Headers */ = {isa = PBXBuildFile; fileRef = E9E7DA61D49DBEDC25D0D54AF713F75C /* SentryGeo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ADBF7B2976E188D602B6A3582060DBEE /* SentryCrashDefaultBinaryImageProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 75F664A425EBBD24E296D0FD68F7769D /* SentryCrashDefaultBinaryImageProvider.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AE13E9F99FBEC955CADBE0DD1B9E3194 /* HTTPDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BA92B27E597DACDA2276CC472B98334D /* HTTPDataResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE649BAEC0C9CF228FEC045A3D861D85 /* SentryHttpStatusCodeRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AAFAB2B41EBA5E53C207ED48DAF341F /* SentryHttpStatusCodeRange.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE84536B5D1EE6FFC96D541EE8F54525 /* DDOSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = B945A3848C7CF183A6CD61FE0D141115 /* DDOSLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AE8C88F6129581B32AB259FD83C26DDA /* MIKMIDITransmittable.h in Headers */ = {isa = PBXBuildFile; fileRef = 1683DFE880F3A8097F1B9B0DA5E27876 /* MIKMIDITransmittable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF2444F362544538C6E76D33A95B51A3 /* SentryRedactOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8990502F713E1FCD895CF70754BB17D8 /* SentryRedactOptions.swift */; }; - AF34FCBB6E67A30AA9FC7BA164F555D0 /* SentryProfilerSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F181CC70B00BA24D837331622C011A /* SentryProfilerSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF3D7DE4BC9A757B4B828F55F2D18500 /* NSURLRequest+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C728140650FD24C44034CB0E47BE08A /* NSURLRequest+SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AF66282BFFAA24795BDE7C194206D35C /* MIKMIDISystemMessageCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CDA75873818A131B52825BF4D1D2B4A /* MIKMIDISystemMessageCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AF829E4A7BB7CC36E689808CE70D6C1D /* PSWebSocketDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C4EB8092FD3032A17342EE0DB912D98 /* PSWebSocketDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AFCCD19DCB9E667345C30139898BFC9A /* PSWebSocketInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A5AD88F533B61B658F9EB29DA79E16B4 /* PSWebSocketInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B009C1F2D6DD314054B2F6190B16E0E5 /* DDContextFilterLogFormatter+Deprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = FE5C43517361D54BCA00CBC47B2637BA /* DDContextFilterLogFormatter+Deprecated.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B09E65D80C6737EB9083234BD9890687 /* PARImage+ASCIIInput.m in Sources */ = {isa = PBXBuildFile; fileRef = BF667EDBB3DA39863EDE12CAA2B28907 /* PARImage+ASCIIInput.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B133C12A9500EF6A47B828FF8C0BCA01 /* SentryTracerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CF8E357E7B9DEAFE50F387C635D081A /* SentryTracerConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B13BD4267982B06FD960A6A1FD9388EA /* SentryFrameRemover.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BED14EE0EE2F8C4B5680F589B113B78 /* SentryFrameRemover.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B1CAFDFCFB8260F173E0FAA070AF7F1E /* SentryWatchdogTerminationLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 00CDAD423E0615A5F1B73567AAE45AEC /* SentryWatchdogTerminationLogic.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B1D4882E23E6E9E25D377E7047112C5E /* SentryStackFrame.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5AC24B8BE5EC6E0E2A51E0126426344D /* SentryStackFrame.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B1EE06DBCADFB469F22F6A3E748E9111 /* SentryNSDataTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = FCDEB86F6EB2160712E4BD9C37FE239C /* SentryNSDataTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B27DB7B40108916CDE48D55767E11F5D /* SentryThreadMetadataCache.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AECAF574D8039358F508D7760C619A96 /* SentryThreadMetadataCache.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B30E15A94A471C11F3384DE65E2CAD6D /* SentryMetricKitIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 002E8EAB517053DB5B6AB6B346CEB89F /* SentryMetricKitIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B3BE3A9D676FDB05D94D44B377CC6791 /* SRHash.m in Sources */ = {isa = PBXBuildFile; fileRef = F4CE8575A6E0A2042AFB4F7402F4B92C /* SRHash.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B415D2D8A13C4A19D80CE83F29047819 /* HTTPErrorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A94255A3E7159FA9B09AF83105A389D3 /* HTTPErrorResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4C67D5CBF48170BD6A9D063CA197EE6 /* SentryUIApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1D0C8F1DAC9BC7FD78C68101956EF6 /* SentryUIApplication.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B4DBE2BB46673218DD678B5C2D2A3109 /* MIKMIDISynthesizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61984F4DE6B94D0888C23ECD72BABB90 /* MIKMIDISynthesizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4DDC98A312019E4ABF8FFDB3EC790AA /* DDLoggerNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FC85588605EB1B92C336B2BDE67BD7 /* DDLoggerNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4EAB76C1FECCEDFD41AE10E5B270320 /* SentryDelayedFramesTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 917F676D916B3C5ECFA038FCFD1889D9 /* SentryDelayedFramesTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B50F993B02EA10D4B787D34B003F0E29 /* SentryTransportAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BACE33FF8E5CD9FB1552DE0B25FB514 /* SentryTransportAdapter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B52EF7FE94B3D1F7BC6F3B666EDA6BFF /* SentryAsyncSafeLog.c in Sources */ = {isa = PBXBuildFile; fileRef = 3BB002B4E1D9B65F4E897CA0FB7A4B36 /* SentryAsyncSafeLog.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B5F06813924F7B2790F17FBA0492F3CC /* MIKMIDIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 99FCD39FFFC8129127C5CA19016B47A0 /* MIKMIDIObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B61A498BAC433156323FD534C140B33E /* CLIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 415E9C97D6ECDBD29EDC9F238F4F55D9 /* CLIColor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B6A6E98E43556C4D014CD29C28B06C8E /* MIKMIDIChannelPressureCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = FA2E06D2969E68D50D464C74ADFA1395 /* MIKMIDIChannelPressureCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B6BA67150396CB705EC4076E00528B37 /* SentryCrashJSONCodecObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = AC4E4D72389513804DD8B90CB2EA46DD /* SentryCrashJSONCodecObjC.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B6EAB9064814C3AE52E81D96E1F6C06D /* SentryCrashJSONCodecObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 679A40BA073FD71482989A141AE62BC7 /* SentryCrashJSONCodecObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6FEDFCFC1D08665DD309ACEFDF52FBA /* SentryPropagationContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 38B96878D2F4FD366FEF8BC6E86C35DA /* SentryPropagationContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B79998FF0A519637E396B2717C0C25B5 /* SentryInternalNotificationNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 1749A707387498C3AC9334CF2D7769EF /* SentryInternalNotificationNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B7C62AFB86CC777FE30AE562B5FF7750 /* SentryCoreDataTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = E2B12166AE92031770B8C68ECD920F00 /* SentryCoreDataTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B8617EEA57021DC9CDDA2054334EC2A4 /* SentryNetworkTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F106B2971AA1D20AAC0C7A34E7D760 /* SentryNetworkTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B86B27B864EE1D5821149D54B206D4AE /* SentryWatchdogTerminationTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 977B851A58428EB952FF0D119072B3FA /* SentryWatchdogTerminationTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8D1493085BD89A441035929326A9CA1 /* MIKMIDIObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 171F1991405DD0D7AC2B4215D68562DA /* MIKMIDIObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8ED1606FE46D3DE376E5DAD0383145F /* SentryHttpDateParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E33FD9E0B047A63DFBACC460099C7A8 /* SentryHttpDateParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B9B6D208C68AED38A5325A1703063D1C /* MIKMIDISequence+MIKMIDIPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A2B776772C8FBF5D97BDE4D1F46C274A /* MIKMIDISequence+MIKMIDIPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA2AB49398A5D5B3535552613BD92C72 /* SentrySessionReplayIntegration-Hybrid.h in Headers */ = {isa = PBXBuildFile; fileRef = A9BF69708826D7B366F0FA218140968E /* SentrySessionReplayIntegration-Hybrid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA5CE7EFEB97DA7759355D22783689E3 /* SentryMigrateSessionInit.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D185E9BE30A18B4159AEE5B24E6FF2F /* SentryMigrateSessionInit.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BAB212996A595C6E85FB2F969476571E /* SentrySerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 1414E843B7F3A392F17CDE6B1B1545E4 /* SentrySerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BAE094C048C777C8B83BDC69EDD97477 /* SentryCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 9719074E200FB3095CD0C4D46489A012 /* SentryCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BAF223813E598E5DB72128610DC61305 /* MIKMIDIPolyphonicKeyPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E02FBB38C1B1059795527F815E7FEF /* MIKMIDIPolyphonicKeyPressureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB4110BBB48B992CD809578A6EB98097 /* MIKMIDIMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E1C58FE9A77E25213198A47B0BAB324 /* MIKMIDIMapping.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BBC1F11EEA7A69E75C3CD2BEB08E8141 /* SentryBaggageSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 518AFFCFD8120E2F662E84143B688507 /* SentryBaggageSerialization.swift */; }; - BBC632EE0C399810B52B03EC4506F5D9 /* HTTPDynamicFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 31078F47E86FF15C7DDD14551671A52F /* HTTPDynamicFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BBDDD4AEC109A255A060C77AA9461E45 /* MultipartFormDataParser.h in Headers */ = {isa = PBXBuildFile; fileRef = FC52D0AA13F7B55147A72C1F11F68B7C /* MultipartFormDataParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC163EB4E262D1EE7978BEBB84E1B8C9 /* MIKMIDINoteOnCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = EBC1EC183E581BEABDB8752E63D9B560 /* MIKMIDINoteOnCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BC35D7657B3AD144723712BFF1ECC6E9 /* MIKMIDIMetaEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45EB4297994223B1DA728605183EB558 /* MIKMIDIMetaEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BC7C26EC60EA12AAEA10783ADD6DA96B /* SentryTracer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F3E9F6A236C7AC41C336A3EAFCEDDE7C /* SentryTracer+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BCFC2E44874DED23238F729C3130729A /* SentryNSURLRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 03FC114E9FB08EAC5A4C35179F007AB2 /* SentryNSURLRequestBuilder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BD97C087EC6479D5B918E1326D49DCF4 /* SentryCrashDefaultMachineContextWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5DC823D881449DC09DDBC2313419CB /* SentryCrashDefaultMachineContextWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BDAE22A8E04EE686E8D3C5E7824A68A9 /* SentryMeta.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EA98A1FF0DDA53FCDD0A62FDD17EDC5 /* SentryMeta.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE2079363FEDF2A5018E8EC370A94BB1 /* SentryCrashMachineContext.c in Sources */ = {isa = PBXBuildFile; fileRef = A32D762F11D1189E284D764E3BC047EB /* SentryCrashMachineContext.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE4CEA3B07CA2D2584C8E33C13A96FCC /* SentryNSDictionarySanitize.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C38AF18350D688C18C717305352D13 /* SentryNSDictionarySanitize.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BE624E761A7C1DE6FA47FD0A063A5695 /* SentryCrashSignalInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D122CD1624E8E327CA8210293C36E768 /* SentryCrashSignalInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF126046D3FA6EE09E0541D4C0216AE5 /* SentryNSDataUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A047CA69288F77F6485DF86D21CAAB1D /* SentryNSDataUtils.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BF2D7D69E86AB4C1D77C7882E09B2400 /* SentryCrashID.h in Headers */ = {isa = PBXBuildFile; fileRef = C8EA855EDB6A2D904ABC2B9400FC5A87 /* SentryCrashID.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF398638B215DE44844CC9DC1B5893B2 /* NSRunLoop+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 2227371D94F8B8A65DAA28091BE24548 /* NSRunLoop+SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BF4C31CBC58DF9E50D187D9E8EC14737 /* SentryExtraContextProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 16D7FD3C5ACD54B0A93837D009A0EAC6 /* SentryExtraContextProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF4D40272B93F042B2EFD0CC1D194468 /* SentryViewScreenshotProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEE70C887CB1F71071471128E4A27CA /* SentryViewScreenshotProvider.swift */; }; - BF89FB16B5B0F10CA85780E6CB8E82DF /* SentryEnvelope+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F47EA5EA4204821A3101B46E12CDF103 /* SentryEnvelope+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFAEF7DD3545D9EB1D5D36FBDEAEC963 /* MultipartMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8E00185B4941FC407C5504DD539958 /* MultipartMessageHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFD61B463223A1FBAC3C8F904DEBCF5B /* SentryRRWebTouchEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6AE3F999716A927636D5C9486818CDD /* SentryRRWebTouchEvent.swift */; }; - C000070DDF3D09471F83ACBCA131BB08 /* SentryException.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DDC0A87FE1C27050FEA4510A865E954 /* SentryException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C019991AEB8E6BF8D8B0BF853603C75F /* SentryScreenFrames.m in Sources */ = {isa = PBXBuildFile; fileRef = B8BBDF85CF1F94AC96F3CDE4A1D8A741 /* SentryScreenFrames.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C05FEA5E69806AC4E6E09A2EB0DE974E /* SentryViewPhotographer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3FB0C6807A650937FD75BBBFA85AC1 /* SentryViewPhotographer.swift */; }; - C0643222BFFC8E1C5A5965C9FD253B94 /* MetricsAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A72E88B446CC4FE89F2C74FAE7E744B /* MetricsAggregator.swift */; }; - C0BFC985F5EF24C85B3B447136B074A8 /* SentryCrashSysCtl.h in Headers */ = {isa = PBXBuildFile; fileRef = F03CCC135A99036094780C23F708343B /* SentryCrashSysCtl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0D095D1139C1058C01942AD5A51F154 /* SentryCrashCPU.c in Sources */ = {isa = PBXBuildFile; fileRef = 6E178E7974AB7190576419D248D2DBAC /* SentryCrashCPU.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C0EE781D0242070ED7ECDBF12897FCDE /* ORSSerialPacketDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = FDC8135C80BF7A9563BFF3CF908BEB69 /* ORSSerialPacketDescriptor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C124C3A55D239A1282DD82E31EA3A69F /* MIKMIDIEventIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 719908577069DAA469E32B53A1AFB190 /* MIKMIDIEventIterator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C13541659C50B69C1389070088284A3B /* MIKMIDIMappingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C918A36C05882B46F306016F09316ACE /* MIKMIDIMappingManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C162EE65FF31798132A0B793F60DFDEE /* MIKMIDIClientDestinationEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = BD1E20E491C7915FFE70AB39BCD25636 /* MIKMIDIClientDestinationEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C17E199308A2A89086DD676138D27073 /* SentryFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E60E4FF781588BDFFBE2070AFE28A979 /* SentryFileManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C1EAA428CE23F8643A205CDC9AA7AC47 /* SentryUser+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C4BBE5B53EC30700D1B42981485562B5 /* SentryUser+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C23B55F32EB55B2EEDF9FC885903B3BD /* MIKMIDIMappableResponder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BF22700F7D912858F36BFD47695EF22 /* MIKMIDIMappableResponder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C266B22ADBBCF611AB0F546D25C4FC16 /* SentrySpanStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 388AE3DF38CAF85A745A190B1499A0F3 /* SentrySpanStatus.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C2AF0CB37A9354A3D8924F63192CD82D /* SentryCrashCachedData.c in Sources */ = {isa = PBXBuildFile; fileRef = 6D0CE7CEF84AD663BDC2CC13DBDC8D13 /* SentryCrashCachedData.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C31653D2DBFF5F499B96AB271301892E /* MIKMIDIMetaLyricEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 54BAB3ADC8A9F3AC4D2770B544D2CF86 /* MIKMIDIMetaLyricEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3A6E6F4CAA9FBD608F41E7F58AE843E /* SentryHttpTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 9837682E38F6D905DFE0CF4C429F933B /* SentryHttpTransport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3ED941A7527F6B1CE9037952D003063 /* SentryError.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F281F38CB8BF28E0D23E111E741B8E5 /* SentryError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3EE45D959F21B6C7EB734136BDF01B7 /* SentrySamplerDecision.m in Sources */ = {isa = PBXBuildFile; fileRef = 74F8739DF31C10AC2B4D347992BA8EE5 /* SentrySamplerDecision.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C3F8183452FA49DEC456C49FD42FE9B0 /* MIKMIDIPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D260887EA6D5BBCE842DECC9CC7289B0 /* MIKMIDIPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C44EADDBFFF9F6764C0A299A127B4CEC /* SentryDiscardReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 53336B94ECDDAEE4BECE906CE1B32E0C /* SentryDiscardReason.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4D1273B09D9E9BD1A4003563BE64CB0 /* BucketsMetricsAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBB2C1F5D10BEBE1E6A14A285137D1E4 /* BucketsMetricsAggregator.swift */; }; - C4F12BD34CC2882FC3722C05D6AE3044 /* SentrySystemEventBreadcrumbs.h in Headers */ = {isa = PBXBuildFile; fileRef = A0530EBEDFB6DF1385B3B2402D249C0E /* SentrySystemEventBreadcrumbs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5BFD2B5473D328CE23DB1D22ADEE559 /* NSLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1A387DC8BF0E02240242ADA0ADDDD2F /* NSLock.swift */; }; - C5F6E43C296889494115AD07DF9F00AB /* SentryCrashJSONCodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 1AF0287951066D2F2EFB23D2493059CB /* SentryCrashJSONCodec.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C5FDB08DF0BA68D68E2DF700943257FC /* SentryCrashReportWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A8F19CB050A06635F1498140F167DB8 /* SentryCrashReportWriter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5FE9DCD9087BEA6E32C4B97B38D162E /* MIKMIDIDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 3632911B297BDF8F22B432287E6B7D20 /* MIKMIDIDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C62B9DF23414FDEE33C217EF2B10C24D /* MIKMIDIEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AFD4ECDECC8685116C738E01C8186CE /* MIKMIDIEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C651D7F4A41B3ECBBD2CD713F0DD25A6 /* SentrySysctl.m in Sources */ = {isa = PBXBuildFile; fileRef = 622C97E1EB283492A3DA70E0D0BA1278 /* SentrySysctl.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C6A8D2BB9E01A7B9E7FFEDA47A8BC613 /* CounterMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4A38DC078003E8E69BA3A210BDC45D /* CounterMetric.swift */; }; - C70407E4FF5DA1F06802EA77CE147685 /* SentryDiscardReasonMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = E079D98F3D78BF502A659DF0A95E8127 /* SentryDiscardReasonMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C7555E2DADA2E6F253E96549DC9ECEBA /* SentryTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D908CE206B7EE8AAB43125D9079070E /* SentryTransaction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C774200666FB9799EC14F5B5D7742AF1 /* SentrySamplingContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D549A908ECDBE0BB33C7DC5E539A6ACA /* SentrySamplingContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C91EF246C0A5A853CEE04A9B835DFB26 /* SRHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E3855502235F54F86C56D7203DE2C7A /* SRHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C9379F78CD2FC55A1DB6C3C5B735DB0B /* MIKMIDIPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B7E72463E5410ABB781714E60E75E464 /* MIKMIDIPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C9FA5FC7C3FFC46B87E5225ADFA7EFA8 /* SentryFileIOTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DD606BDA81DCB58B6267FD417D3C849 /* SentryFileIOTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CA049DCF679AEB8FE48B56C674D7361F /* SentryClient+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A8D9DCCE19363B242DEE9AF8941359C /* SentryClient+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA632F8BDB8576CBE197E2065448C54B /* MIKMIDINoteCommand_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C8FFEDE08675BE4F3ED412F605A9BFB /* MIKMIDINoteCommand_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CABD890F820954F8B70AA917B64D7FCD /* MIKMIDITempoEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C64A38F0FE201F6A4D93D54CF4CDEF8 /* MIKMIDITempoEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB499BFC75E725B23B81F1844838C6D0 /* DDFileLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCE9430692A02EDC8F1F3BC1C817CFC /* DDFileLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CB56F13F07A8715916A4867F443D6858 /* SentryDefaultObjCRuntimeWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AC81250F6F7558BC4D0408D8607A788 /* SentryDefaultObjCRuntimeWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CB6AAE131B39D7C97EAADD14433D3532 /* UIImageHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B361147BC7C979EB189D29E3C9759832 /* UIImageHelper.swift */; }; - CBEF642F2A8B0DE19E03254F29619ED5 /* SentrySDK.m in Sources */ = {isa = PBXBuildFile; fileRef = ACD00B7E5C0BCB430CB82D4C142061FE /* SentrySDK.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CC34C8DD1776936DF3C75A672B14A0FB /* SentryOptions+HybridSDKs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FACA5BBEC82074BC615BCC18C33EF74 /* SentryOptions+HybridSDKs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC58F8293D8B94D3020D4281C1D6663B /* SentryUIEventTrackerTransactionMode.m in Sources */ = {isa = PBXBuildFile; fileRef = BA6B9607AB207FAE0B320D45203DD324 /* SentryUIEventTrackerTransactionMode.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CC8A1372A96DA193D857327074506C24 /* SentryPredicateDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A73F2F47F8E99F38D5C1145AE392DB0C /* SentryPredicateDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCB6450269D4F69F905811DC51CCE78B /* MIKMIDIMetaInstrumentNameEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B18721BF2C13AE6DA208C77710F3940 /* MIKMIDIMetaInstrumentNameEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CD15A8D29B11FF49157E321AF20902AB /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 90AD304C8E409EE16CB4625F8EC72805 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD5FF1DE06A0F9E136797CEDF4FA86E3 /* HTTPDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0121B52C65597E49D8BFAF7AD24D59 /* HTTPDataResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CD62219A42987824695AB7C8BF4BB499 /* SRIOConsumerPool.h in Headers */ = {isa = PBXBuildFile; fileRef = C2D924384BDE40B5F9255F8541416BC1 /* SRIOConsumerPool.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD9E8CBF881DC34EE3AFB9E34FF1DB1F /* SentryBaggage.m in Sources */ = {isa = PBXBuildFile; fileRef = F073A2002AE6CBCE085BF8EFB96FC354 /* SentryBaggage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CE3BA5413F43BA6AD528CBC7540135AA /* SentryDiscardedEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F31D1EFD7F6C45B0039EFC170CE770DC /* SentryDiscardedEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CE47808E0BD440868C56DEB13D219502 /* SentryTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = CE40D474002E563A7719600E2768FB4E /* SentryTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE99A8C794C12E493EBB3DB6D4856318 /* MIKMIDIMetaTimeSignatureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BACEC86247C2D652E699F492A8816537 /* MIKMIDIMetaTimeSignatureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CF47690FD96F011A040FF5E7973CE3F4 /* UIViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D912F9286CA59E3B581072F9C4B2B839 /* UIViewExtensions.swift */; }; - D0661FD3AFF75F1895370601506195AF /* SentryCrashDynamicLinker.h in Headers */ = {isa = PBXBuildFile; fileRef = 24E4B7595A7DF47CBF1034A282AEE6EC /* SentryCrashDynamicLinker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D09A9580276166FC435D6A3B942F77E7 /* MIKMIDIPitchBendChangeCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B25F60857D113A5E5D5599CC7AFF7C /* MIKMIDIPitchBendChangeCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D09E7760A3BF9CA168178136F946C7B3 /* MIKMIDIPitchBendChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 900BB119EB3B1A5260854113BB8B039F /* MIKMIDIPitchBendChangeEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D0B02A242D6B79350E4AE6B3B8F7AEC0 /* SentryCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = 234C11EDAB9EE2BDDB59E5AD7FE6F012 /* SentryCrash.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D187307BF1437D631ED9B0C6E39792EB /* SentryAppStartTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 45F39E50DC59A483ED314FAE0E0D0656 /* SentryAppStartTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1F9180D5379E39A803DCC34046758AB /* DAVResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8A5831B0B2E3DCE91FD58EB8328027 /* DAVResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D20830CE1BEE9CB1D2655880AC60F61F /* SentrySpan.m in Sources */ = {isa = PBXBuildFile; fileRef = FD311DB3AF8C9C7B280C86F38679DDC8 /* SentrySpan.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D22E1903718B4C2830A6F5D1125C7369 /* SentryMechanism.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D320EBDEAF874E4AC66A7087B8B355 /* SentryMechanism.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D278215607E32819094A43F695EE962B /* SentryAutoBreadcrumbTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2105B47F9F8C88AB59F95F1C674154 /* SentryAutoBreadcrumbTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2DCCBA996ABBEEA3AA6EE2C24282E95 /* SentryDefaultRateLimits.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AB4B65671912DD7FB38F6DF7AA21962 /* SentryDefaultRateLimits.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D2F7AE0BA57849870A155D649C5EEC9F /* MIKMIDICommandThrottler.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C9D1316302E6BBBCEA5935D4680620C /* MIKMIDICommandThrottler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D32AE54E9FC0B963B54ED5089CED5F54 /* SentryCrashFileUtils.c in Sources */ = {isa = PBXBuildFile; fileRef = EE65FBF3C516C082D871B79A87CFBADA /* SentryCrashFileUtils.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D35A3B4F99C44C7D26BDD6FF45434261 /* SentryTraceHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2B9F34DFCFDB4FD4513D109607BE8F /* SentryTraceHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D36ABD0F9ACF88F638DD56ED3311AFEF /* SentryLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D12B0B93EA4E49F18847C1344218D4 /* SentryLevel.swift */; }; - D3BD0BEBA4DE99F22DD1F072DE1092F0 /* SentrySamplingContext.m in Sources */ = {isa = PBXBuildFile; fileRef = F484B464B4FCE9F2E997BBF2252E9D42 /* SentrySamplingContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D3E810D73DF555ED6156CBD8852BB2A4 /* SentryWatchdogTerminationScopeObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = F1107A10A5376382F9C36065A8831980 /* SentryWatchdogTerminationScopeObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4C7E48BCFA9988ED0B2C93C7047F505 /* SentryUIDeviceWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = EC6DA11B76FE08F15D71FF41970330F0 /* SentryUIDeviceWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4D6FC6793C33CF75B3FF8147B6DECFF /* SentryTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A227909B32E001649C6040DD7E41405 /* SentryTracer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D51873CDBD026C7CB2680F7E5F53338F /* SentryGlobalEventProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 35A4FCE928F67C274EDA444289DEBAD1 /* SentryGlobalEventProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D55E9DE8374EA9E93CAE92E06CA3E1FD /* SentryRetryAfterHeaderParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 917BC1D2BBF2675CC1CF9239AB8FBB35 /* SentryRetryAfterHeaderParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D59DD88BFE033CA35A3920954702F71B /* MIKMIDIMetaCuePointEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0197B58FEC975FF5384D0823AD22B0 /* MIKMIDIMetaCuePointEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D636557B2FEE707BA2B7867FD2C310B1 /* SentryBinaryImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D2DF52B986595B4CECC7F4BF64A701C8 /* SentryBinaryImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D67CC53A1ACDC44517EF552330C896A1 /* SentryRRWebBreadcrumbEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A52B1C534D0B5EB541222E6CAFE0413E /* SentryRRWebBreadcrumbEvent.swift */; }; - D6A3272958A4E6D5AD3A044D04B4D9D0 /* HTTPAuthenticationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 04606597449A2FD011C00FE115D87D56 /* HTTPAuthenticationRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D6FD1847C05B1E2184F5810F4A45AF61 /* SentryClient.h in Headers */ = {isa = PBXBuildFile; fileRef = B2FB74BC40327781D5FAC957AA284242 /* SentryClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D73229DCD8865ECEB47FA5F4952C1D47 /* SentryEnvelopeItemHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F2ADAF8E55E7B5F2A237884DAA54A0 /* SentryEnvelopeItemHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D73859E5CDA7FCFD0D090B62CF814307 /* NSRunLoop+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DF1FC1426D43ED67E86AEAD7E1E22AD4 /* NSRunLoop+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D76339A44236AA3D0105185B032B6E53 /* SentryWithoutUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C05F86890CCB7B682705B4DC318DC76 /* SentryWithoutUIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D7A51FEC896E8CF2AC48CBAAB38FDBE2 /* MIKMIDIProgramChangeCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B1CD29CD7DB33C3F051C16EF7D89E21A /* MIKMIDIProgramChangeCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D7CACE598009EF6D7E8F35E8F6C472C9 /* DDFileLogger+Buffering.m in Sources */ = {isa = PBXBuildFile; fileRef = C6FF17B0A7EC7476265242C8863FFC42 /* DDFileLogger+Buffering.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D819198BBBE8ADC2CD82B7BE966FE78B /* SentryViewHierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = D111501CA55B0511CC10065E04546EC8 /* SentryViewHierarchy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D8891FA2F17C2C4A8945A4AC70FC1149 /* SentryCurrentDateProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 024A6D1401173777DC06FFE15264E3EE /* SentryCurrentDateProvider.swift */; }; - D89C52EBFA4F53027ACF62F715028BF6 /* SentrySamplingProfiler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7223CC1D887C2F20620C75D7B5795F27 /* SentrySamplingProfiler.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D8B3A62BD1C4EF01E2F40ED0F878FFB1 /* SentryCrashReportConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4434E2058D7BB29344E8826699301693 /* SentryCrashReportConverter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D8DBB62C33A8C49F3EDA89E593CCB1F2 /* PSWebSocketNetworkThread.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A2A8B7EADD76FB00CA167067EFFC83 /* PSWebSocketNetworkThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D90F71614661ACE774937F7E76EE13FC /* SentryDisplayLinkWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3473B11BCEC727EDC9EE47EA72638864 /* SentryDisplayLinkWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9277F3A030B8F6298A839732201AA30 /* URLSessionTaskHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E3C7205887FF01B002CC8B3102E585D /* URLSessionTaskHelper.swift */; }; - D933CFF3BB559B2BF610E7D5BE40F97E /* SentryDelayedFramesTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = BF27D256DE5D7B1EBD7CDEE1379C0FF7 /* SentryDelayedFramesTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D93BF478C020C7F99D78DD529BE82D71 /* SentryFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 2503880FB867E3E343795BC7316BBCFF /* SentryFrame.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D98367A341B32E28A6C9955875033D9D /* SentryBuildAppStartSpans.h in Headers */ = {isa = PBXBuildFile; fileRef = 1277E8E4CE73DDF6CAB9635A02F4DCD8 /* SentryBuildAppStartSpans.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9A8A45CAF0F24EC4113AFD40A3BCB41 /* MIKMIDIDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = D032E95436882CA6ECA90FB922DBF041 /* MIKMIDIDevice.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D9C52876DD6E34F63897BCFC755446E5 /* SentryDateUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FDE291D1F30B92DC534744B7CFAB8ED /* SentryDateUtils.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D9F189B3751A4B87BA4CE88D92A6FA62 /* SentryObjCRuntimeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E7CCCD39DAEF4274E60050DF470324 /* SentryObjCRuntimeWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA17BB33E04356FAA398DF672AB9845C /* SentryDataCategoryMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = ABCBC5E9EC605227E37FD7C331271004 /* SentryDataCategoryMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA705BF8A52A96E80CC81457AAB6727B /* SentryTimeToDisplayTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 62C02C2854B1E46006A0EB8867BEF867 /* SentryTimeToDisplayTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DAC54E5CB27B45ED2412460420273439 /* SentrySampling.m in Sources */ = {isa = PBXBuildFile; fileRef = AB1E2063BDBCF3FB40EC018AED4CF019 /* SentrySampling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DB61CAE95D4354A283098D1D0EEDCB9B /* CLIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BBC3A6510E964F9EFA08E197FA7AEF6 /* CLIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC20B5511C80BA2732A393F405CAE427 /* MIKMIDISystemKeepAliveCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B28B63B33D94F4EB70F39AA102B0A2B /* MIKMIDISystemKeepAliveCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC462AE433E2F55A3E9944AF284CA525 /* SentryMetricsAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F93A081B338C43E430DB9A88B0CEB6 /* SentryMetricsAPI.swift */; }; - DC4F1721515067BB700AEA474A451F42 /* SentryCrashFileUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FDE677CCBAB7DB9FE026E529F6E4977 /* SentryCrashFileUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DCBD1EDC6558927C4794C856F9ABF91D /* DDData.h in Headers */ = {isa = PBXBuildFile; fileRef = E212929ED215DD544BD852B998AD94EC /* DDData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DCC7775733355B6512DBDAFF57E88182 /* MIKMIDIClientSourceEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 96938FEB113D0B5CB884DDD289E9E77E /* MIKMIDIClientSourceEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD846DF37EE91BA96FE3D6C70C65436C /* SentryCrashScopeObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 05644E521E2472BCC80DF06EF85DC847 /* SentryCrashScopeObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDA94F409FCE14105C009D36043ED47D /* SentryDataCategoryMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = B6EBF2BDD6C4B322A9071E3EBED06C8E /* SentryDataCategoryMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DE33527A013E7EF998FFE4F3DFD44084 /* SentryCrashCPU_Apple.h in Headers */ = {isa = PBXBuildFile; fileRef = B781C0EFB3D1CAA61B9F9CEB608094DE /* SentryCrashCPU_Apple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DEF887939B1ABD7D189339DE4774E9FD /* SentryUIEventTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 70C8FA1A03695A7097E60136D152165A /* SentryUIEventTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DFB9F369D336648EE7807B23ADCCF812 /* SRPinningSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = C04E40D0463E2181F17F8207D3FD36CF /* SRPinningSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E0D3BEBF63D6E283F8582E4005466222 /* MIKMIDIPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D3B9B268F386C4D0D0F6A2D141445F3 /* MIKMIDIPlayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E12215FBDF3A3AA6DEEA4BFF40B710AE /* SentryCrashMonitor_NSException.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E9516F87499EBD9F56E18FA69933F3A /* SentryCrashMonitor_NSException.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E12807496D37E3713185A8B4B1E6E556 /* SentryMechanism.h in Headers */ = {isa = PBXBuildFile; fileRef = 82E7A3C8BC259E827062E2CE81E8167A /* SentryMechanism.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1494CF4920E57E5DA9279033D3A775A /* SentryCrashReportFilterBasic.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD439AAFED38A8FD922D59F40CDCF6C /* SentryCrashReportFilterBasic.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E173D6799EE0F0AA1BA542C7CD427444 /* SentrySessionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EF6D9E83F9FDA4407E1E07B6FD07EE6 /* SentrySessionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1A8B2C83BED92DC00E316499F8B18DE /* SentryBuildAppStartSpans.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8244CB203653C9A3DC1B5B2EBF9AB7 /* SentryBuildAppStartSpans.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E1B704839B804D2B6AC561DFAF4B6D9F /* MIKMIDIPitchBendChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D183F03D10C175042D263972039FCF /* MIKMIDIPitchBendChangeEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E1B83DF14EE881DE98F6CE05BB1DFF5A /* SentryNSNotificationCenterWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2114D14C475781B89A8C1390ECD686 /* SentryNSNotificationCenterWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E1D973CCE6CD3745DA19A5C0EF6F8328 /* SentryClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 55B1DE5664ECF76C263A541380A52324 /* SentryClient.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E25484914ACEEA6194B8868FBDC94C16 /* SentryCrashC.h in Headers */ = {isa = PBXBuildFile; fileRef = 549C94F5C50CDCE888151B266C22FA7B /* SentryCrashC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E293A13BCCDA9244E4C058648DAB482D /* SentryLogC.m in Sources */ = {isa = PBXBuildFile; fileRef = 51C2B6DB8237282F4AB7577802DE9598 /* SentryLogC.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E31E174B7355D316A5A7BBE53196FF98 /* SentryBaggage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3675E74D83886A4BF11E7B90F60322 /* SentryBaggage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E4D5AF1864FB539A5AF952772FC996E9 /* SentryAppStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FDF5B751E4E7E5D35CDEC8E4F4D16C8F /* SentryAppStateManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E55C07B7EB8F1291F69C67E2456CE418 /* SentryThreadMetadataCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 296BB14511DF73B7F8CAF2AAF001225F /* SentryThreadMetadataCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E589EAC40C5FC613BA87571E76F0E89D /* SentryCrashSysCtl.c in Sources */ = {isa = PBXBuildFile; fileRef = A21DA63C193D8455569C1695C86B59BB /* SentryCrashSysCtl.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E5C86C69C8C17083D5736B0CBF0ED1AB /* MIKMIDIMappingItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D56D49745490A9D00598A677A94F507 /* MIKMIDIMappingItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5D5F6E7715630F9C611CA7E04F18BF7 /* MIKMIDIProgramChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F00EEF230C3E3427EB59590923088DF3 /* MIKMIDIProgramChangeEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E5DD361F77DEEAFF5F023AC28110346D /* SentryNSTimerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 33FCBB7E384DD90E7D270977DDEB7D1D /* SentryNSTimerFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5EC795FCBD8F9A2FF8FFE98EC03EFCC /* SentryCrashJSONCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = 236D88238CEC740378901ACAA352EB71 /* SentryCrashJSONCodec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E666DB54982791891B8A889AFBE7B8EF /* SentryCrashMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = E326348860C69AE8458531DDA058E80E /* SentryCrashMonitor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6C56B78F18315CA23A1962098966FFE /* SentryCrashReportFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = C7065D21AEF1F441865BB047177D1ED5 /* SentryCrashReportFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6DA76DC4789F5BFA0EEE6AA94096DEB /* MIKMIDIControlChangeCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C880AC7263CEEADB94A62AC4C24EF8 /* MIKMIDIControlChangeCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E6FA7C73B7E03A6D76833EF47DC46B71 /* SentryProfilerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B716D891F8A7A134A4C30F6D1EB6697 /* SentryProfilerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E73CA0549599E482B6A40ECE82FE1AD1 /* SentryCrashCPU_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = 0BB0FCB255485DB0F4EBB6ACA9E71123 /* SentryCrashCPU_x86_64.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E78AA3E2AD53ABFE436F8DE545D6D8F5 /* MIKMIDIEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EED0E8FEBC8F02EC06C7204F93A531E /* MIKMIDIEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7B11761D2E066405C8CF4AA9E23202A /* MIKMIDISynthesizer_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = F12E9481DD93967AE2BA14DA96910E21 /* MIKMIDISynthesizer_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E80A2661BCD934058977B8DD6E99835F /* MIKMIDIPolyphonicKeyPressureCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2AB6125CC6084004F9016FA3EA7FA2 /* MIKMIDIPolyphonicKeyPressureCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E8E1219E0676529F65C960438F45AEC6 /* SentryHub.m in Sources */ = {isa = PBXBuildFile; fileRef = F419D6863CDA4C6ECF96457926C672AC /* SentryHub.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E8FDA840392A2194E00EA6D035684563 /* SentryWatchdogTerminationTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BBF982D611A40D45949D5887F6A49BF /* SentryWatchdogTerminationTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E94162A5F6BFB5C19D75E9D79DBE1BCE /* Sentry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 540CFA7719FDD2443BB971E4788581B5 /* Sentry-dummy.m */; }; - E967E850588D2B98679E6E1C4FA09D83 /* MIKMIDIControlChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C7DB7E3E3283AFBE47ADA5332BA30706 /* MIKMIDIControlChangeEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E96C8871923A362B7203ABBA7872FCC4 /* SentryReplayType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 602783FB47616AA7AC2CE4219CA024B5 /* SentryReplayType.swift */; }; - E9BB792F805702D6967A4643FCBA6857 /* SentryCrashScopeObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CF96C2D1602C43299C75888AA2A5B96 /* SentryCrashScopeObserver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E9D5F6444AF779F8D528122321B60FEC /* SentryCrashReportConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = D37474B523B58E0E54B0A02036C98ED0 /* SentryCrashReportConverter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9DB64B7331053396A97A5BBDABAF991 /* SentryStacktrace.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E7A0FD17A79CB0D4D3D8BBFF451534 /* SentryStacktrace.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA6EE79FB91940F368B998F6BAC89E4F /* DELETEResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F9AD2DD70D6E747E8FA93EFC17E50A48 /* DELETEResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EABDB5F6E0DBD5D0989D5F043E8AF711 /* SentrySpotlightTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 80400492C24E095114263D5800CB5BC2 /* SentrySpotlightTransport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EB02D5EFBBA7131C0555BCBD18C179AA /* SentryCrashNSErrorUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8397D2B19FDDB426EC98325ED864FA51 /* SentryCrashNSErrorUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EBAFDBE2D81188FADC00FFB8A5F923B6 /* SentryMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 322924C6AE953800AA28C13FDF607F10 /* SentryMessage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EC0047F79318AC8F938EC0A178D65FBE /* DDAbstractDatabaseLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F296E90DD98690B8386DD6DE256ADD /* DDAbstractDatabaseLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EC05FE1C5904D91E46143969DF01FD35 /* SRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 532096B023519D4776147A8050DC57FD /* SRError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ED4BC1521F9CADA4900053FD00403FCE /* SentryEnvelopeAttachmentHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F4712B197746775AA105B07E7090C /* SentryEnvelopeAttachmentHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EE4DE6F76C479E71D316DDD1D035AB78 /* SentryLevelMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6432131DACBE51AB900E90C31E26BD93 /* SentryLevelMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EEC3BF049E7D38061A5A96C4CFDC4208 /* SentryTraceHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA87EED89345DF05E322A1CA8DFCD9D /* SentryTraceHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EFC4E2B7517C2019AAB2AD6345E3CBCC /* MIKMIDISystemExclusiveCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 22CEF8541F327D9FCB098295FD7C1AD3 /* MIKMIDISystemExclusiveCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFF7F64AEF044BCA0926FD9062B24A0F /* SentryUIEventTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7C8BFB8928EBE3C195C73DD76A4DEF /* SentryUIEventTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F000ED7B4CC033147825CA51ECC89EC8 /* SentryNSProcessInfoWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 49A96E1C940808696DE22F968540B651 /* SentryNSProcessInfoWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F057EC0D8DE36C19DFF9F904A4FB825B /* SentryScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B19D46059777D27D66F8A8DE37C02E /* SentryScreenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0C96F8121644BEA0386E3EDF8AB8107 /* SentryCrashDate.h in Headers */ = {isa = PBXBuildFile; fileRef = 220E531991C8D6E2A53D46DF2863C861 /* SentryCrashDate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F1B099BDCF830ECDFDC4D28858AA56DC /* Sentry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FB82215239D51E779DB14364BF0D5B8 /* Sentry-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F22C8F080EFDAFE330CA33554B0C3EB0 /* PSWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = F0B9A289A6CA386238227B97D2E1027D /* PSWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F26AB78038CEE7072D26F9789716CCD8 /* MIKMIDIMappingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C9000C70F5BE4EC4A7A9436C81032EE /* MIKMIDIMappingManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F27DF7F6E5AE718151609712BCB19AE5 /* SentryAutoSessionTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 7701374A0A4E09CC6B6CBFC6416A01D1 /* SentryAutoSessionTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F2FE1A01677C62A04FCC0B958269B677 /* DDOSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DE46C7F5C1073736EAFB7016C204EF06 /* DDOSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F39C70023E1375E5B39DF1E998AF8F6F /* SentryThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FAA6C03AB3AF97C7ECEFCB826269031 /* SentryThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F3F1870764E62D7F76A782DD1B02A5E9 /* SentryCrashObjC.c in Sources */ = {isa = PBXBuildFile; fileRef = 8227C46DBB43CE98E5E9AE4EBBDFA00C /* SentryCrashObjC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F46186EE35FC9ABE860830607D599349 /* SentryPropagationContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 263B61AF5ECBD38D798965F9F036CA7B /* SentryPropagationContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F5055F0081B69B4E4CD91E465E1CCEA8 /* SentryEnvelopeItemHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1713B557EA810ADD424919743E429AC2 /* SentryEnvelopeItemHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F52DB52F13B5180A2636803503CB1BA5 /* ORSSerialPortManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 53CFC3C21346FB7D2700F4E1A85AB557 /* ORSSerialPortManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F59B6DE61EA3C273CD0C0251B1B7C220 /* SentryEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F206047DBF883008D889B1B81126B59D /* SentryEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F705DFF2EC1109338FE499A140718202 /* CocoaHTTPServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F0388A5DDDBCC3599BC947B6EAE0C4D /* CocoaHTTPServer-dummy.m */; }; - F75ECADFF9B8F8DDB7264278DC4093E5 /* SentryNSError.m in Sources */ = {isa = PBXBuildFile; fileRef = 476C98F025039310163818F921A55D38 /* SentryNSError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F7E1F6270E4144357007DD898382146D /* SentryStacktraceBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A9B7CDE009191229E1CE9C10BBD252B /* SentryStacktraceBuilder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F816A9B53568519F567AEF3B0541632C /* SentryCrashIsAppImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F40593B21CD780B6EE4C019D318CE67 /* SentryCrashIsAppImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F91F6C418F4A8DB03C2FC69E4B134994 /* SentrySample.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA60827BC3DAF72A33E3FE7FEBB2D70 /* SentrySample.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F96369C5CFFFF2F80E654A340B80E0CA /* HTTPRedirectResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C23ECB572E61FFE01D598EB4E8152380 /* HTTPRedirectResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F999E09790CC383637CE54E4DD62DC31 /* SentryCrashIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 179FE19E81AC0ACC9C0623869C08A9D5 /* SentryCrashIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F99BE6D54A42AB91A1EF0959337E7480 /* SentryMetricProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 02EFB13CF25F49237182708DE2CA401B /* SentryMetricProfiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9AEAB352456C776466104C28AA7C7F3 /* SentrySpanContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C9C3BAD2D822378BC8F20D0B7F1A297 /* SentrySpanContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F9B3790686CA650B9A9346F9937DBB02 /* MIKMIDIClientSourceEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AD4F54569A30FB3099349AA2FD35979 /* MIKMIDIClientSourceEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F9D775371AE9231D86ACED54637935B5 /* UIRedactBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93803DAF93725B5980811976380C1D54 /* UIRedactBuilder.swift */; }; - F9FBA4C26C1FE7B1FB61725CC20A6FF2 /* SentryNSDataSwizzling.h in Headers */ = {isa = PBXBuildFile; fileRef = EA154F8B9FE418FCEAC98B05895FA850 /* SentryNSDataSwizzling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA24EAB7BFFD71A4B8C0A8BEAA45FEDC /* MIKMIDIMetaTextEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D20321AF541BC473BCCCE5D01E59001F /* MIKMIDIMetaTextEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA2EB56D3D930D4F1D29E8C288A7B1D0 /* MIKMIDI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB3F04F0E8D8DBC552EAD1DACCCE390 /* MIKMIDI-dummy.m */; }; - FA31BE729963425F591193E287A38A5A /* DDASLLogCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D3CB77B497E3A08D81AED29EA3E0A29 /* DDASLLogCapture.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FA4C983C7C11ABDAE1FE574AD38E6B64 /* SentryCrashIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8203B0CC47F1C9B9094641BD32396510 /* SentryCrashIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FAC2F9EEE39A0186D9F922A8D4C941FB /* DDData.m in Sources */ = {isa = PBXBuildFile; fileRef = D227D41DE120A39AE10D358AEE6A6F3A /* DDData.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FBB05F338E5C6A6856BE3C310C681569 /* SentryDebugImageProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = AE73D62CFFD79A47310DDBA199176C67 /* SentryDebugImageProvider.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FBCB4E88FBC660C812CE998B90B2FF63 /* MIKMIDIDeviceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F87245CE3F29700434539E2E95E8E764 /* MIKMIDIDeviceManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FBDFBE19D382BA336109509D42614456 /* DDLog.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6641C0DC7F6E2AD573E98FF67F2250 /* DDLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBE4CAF9C1137E0ADCDEF4FA8917CFAE /* SentryDelayedFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E1D97E60FA4B5A68B55DA70032AB648 /* SentryDelayedFrame.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FBE5E02CB9AFA135FED55C4C6B6D46AD /* SentryNSURLRequestBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F4CFA0BD325A5CC11B091B5EFB6E8FE4 /* SentryNSURLRequestBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD07D81884AEEFFAA41514881C80BEFE /* UIViewController+Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = D1570417C9CCBF8CF1C9495525E81020 /* UIViewController+Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD8BCB1C7E67877BC6793B897181A283 /* SentryNoOpSpan.m in Sources */ = {isa = PBXBuildFile; fileRef = 95BE0CBAD3FFF9C6E9C2FBB26C7A2FEA /* SentryNoOpSpan.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FDD3E71B9AF5466B1BD26D2E8046381F /* SentryHttpDateParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 9136E7315992B6E961F99494784E423F /* SentryHttpDateParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FDD4A8A77D7B5315EC1F6A7D2C7DCC31 /* SentrySessionReplaySyncC.c in Sources */ = {isa = PBXBuildFile; fileRef = 05EF9B0A21C9A4534E6368A0EFFBBD8E /* SentrySessionReplaySyncC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FE00DA58347ADBB29A51D87CA6E7690B /* SentrySessionReplaySyncC.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E5DE78DD79E203ACA7E997D4A338F6 /* SentrySessionReplaySyncC.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE43B61C070B36466A861DCE20D1B456 /* SentryAppStartTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 205269A9ED2EB2F68381619F1B95743F /* SentryAppStartTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FE71659B35CA5BEE3362C166AB89D212 /* SRProxyConnect.h in Headers */ = {isa = PBXBuildFile; fileRef = CA6EC70B803A92E9C2FCA7DD54124AF4 /* SRProxyConnect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE8C356F8A64A1561775AE6C2C4F18B3 /* SentryCoreDataTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 42406CE116E1F217BD239B34DE3CC9C2 /* SentryCoreDataTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE92B2039BE912B1ADD409EB697EBD03 /* SentryCrashDebug.c in Sources */ = {isa = PBXBuildFile; fileRef = 9B713CA2CD2A320F2ED9F05F8CA69B6E /* SentryCrashDebug.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FE98E1B6B2C3429D009BAF0FD40B5832 /* SRMutex.m in Sources */ = {isa = PBXBuildFile; fileRef = B64EC76C48BA328809DAD17AB9C9724D /* SRMutex.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FEA8F3A312B0B9B808ED9A3D1932340F /* SentryProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3B6A92FBB2385DF304038245C985969 /* SentryProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FEC50DCEB784568CF50B58C1CFE0119F /* SentryFramesTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 53EBFB214FF0139C28586E10C83144DC /* SentryFramesTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF115F865F6851D637C6B9824C7D6F4F /* DDContextFilterLogFormatter+Deprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = A20F896728D6C7FFA53B17ED560FB95A /* DDContextFilterLogFormatter+Deprecated.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF254B5A51C78C7746526501F64C550F /* MIKMIDIProgramChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AB7555D58C8F1A07489012ACF5A22AB3 /* MIKMIDIProgramChangeEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF67F4B993096FACDDAB68A5DC267FDA /* SentryCrashBinaryImageCache.c in Sources */ = {isa = PBXBuildFile; fileRef = BB64F49CC4970288EEE9D679DB445E65 /* SentryCrashBinaryImageCache.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0058D03AE74B073E629DA4D9A81120B6 /* SentryCrashJSONCodec.c in Sources */ = {isa = PBXBuildFile; fileRef = E041B25B21D227873A96BDE132DDFBBE /* SentryCrashJSONCodec.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 005EF6A339C62456F09A150605F49388 /* SentryUncaughtNSExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 796356051463C4A0B91272A9A74D6F35 /* SentryUncaughtNSExceptions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 00F0B55E4429B6E73CA85006EE4BF375 /* NSUIApplication+MIKMIDI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DDFB30E711F1C3FE578EBBEC8808212 /* NSUIApplication+MIKMIDI.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 01CF55C715C528A0289A040925D9450C /* SentryCrashMonitor_MachException.h in Headers */ = {isa = PBXBuildFile; fileRef = FBA7B2B47B008EC3B8F9BCE63A5EEF6C /* SentryCrashMonitor_MachException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0235081360C0698B649A181764B8F958 /* SentryNSURLSessionTaskSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F2C22B83D91632FEE29FC7C9BCE0D19 /* SentryNSURLSessionTaskSearch.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0240EB9A174938D67B19CC63C5626A46 /* MIKMIDIPort.m in Sources */ = {isa = PBXBuildFile; fileRef = 40093623D3B618F467F3F28EEB258916 /* MIKMIDIPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0287336926F410D433E2EAF3A9E19845 /* SentryTraceOrigin.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1EF8C4703A132FD63BF29BC9036624 /* SentryTraceOrigin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 028DB6B59E21035FFAD210F28E7C2926 /* MIKMIDIDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 3632911B297BDF8F22B432287E6B7D20 /* MIKMIDIDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02A50D1F95F7D71F8E6068BF837850F3 /* SentryUIApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 36B2B3792103264900DFCB8E8272902A /* SentryUIApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02D2372D5B1F4E355BA2825559582472 /* MIKMIDIEventIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 719908577069DAA469E32B53A1AFB190 /* MIKMIDIEventIterator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 038DFA173BC1F500551B43042C0CA7B8 /* HTTPMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = EFDDE2D28C9D803BF4320C6063D59DE0 /* HTTPMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 042B7A4855D8776C4D384717A1921430 /* SentryTraceProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2188E143DDE107B1C5301D66F167D9EB /* SentryTraceProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 044DBAA24045AF12C30AE104E9574EA8 /* SentryCrashThread.c in Sources */ = {isa = PBXBuildFile; fileRef = 84615395DA31A84C51F94A99094E69AE /* SentryCrashThread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 04602BDA02D455C8D6708FE2C194B003 /* SentryAppStartTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B67152F73302D1D194D66B13AECB3ED /* SentryAppStartTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04D33C53DA990E850932AB1F4F645556 /* SentryRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D210B554E20E4A035B2898D255F0A365 /* SentryRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04DC78B160BAC79F6EAFF8E9E06B9346 /* SentryLog+Configure.swift in Sources */ = {isa = PBXBuildFile; fileRef = F60FB99184606DA379E83532E1C074CF /* SentryLog+Configure.swift */; }; + 04EDDD2924CB46B042167174AC638A4A /* SentrySpanOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F09EB9964B5FE3C5D6F2365842E27F3 /* SentrySpanOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04FB9E78FEA1FCB8AD3CDC13A382FBA0 /* MIKMIDIMappableResponder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BF22700F7D912858F36BFD47695EF22 /* MIKMIDIMappableResponder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 051D56A905F9936E4481FDED679059A4 /* SentryProfilerState.h in Headers */ = {isa = PBXBuildFile; fileRef = B0DEAD6A40976ADF39177FF5C3368ECE /* SentryProfilerState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 052CAF33DA1663C153D0136A5F4945E8 /* PrivatesHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 39923169280D94DC64CB6FD71BBCD5FE /* PrivatesHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 053064970BE64D95D8D1FCDD4AAC6F1C /* SentryRateLimitParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F05B10FD20805229FA5603F07372AB8B /* SentryRateLimitParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 05B7721987C840DEBD8C17EF749EEAB0 /* MIKMIDIMetaCopyrightEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AAD81E06D64AF06E03A3E04506279DBD /* MIKMIDIMetaCopyrightEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 05EEB0D57873ACAEB5E4CD6779F79E1E /* SentryUserFeedbackIntegrationDriver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E553A9EB4198D14179778FD1BE2007B1 /* SentryUserFeedbackIntegrationDriver.swift */; }; + 0654A7AEA0977849F0D5C0B85F58EC1E /* SentryScopeContextPersistentStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C510B32A1849EFD9BE230E7831DE35E /* SentryScopeContextPersistentStore.swift */; }; + 066E905615A74065A06A12C6638E5F73 /* SentryEnvelope.h in Headers */ = {isa = PBXBuildFile; fileRef = 54988B1CBC287D434B40E55EB0F67563 /* SentryEnvelope.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 06E48B6287F8BF2F717D37DC51EAED05 /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D4787A4AD01E6CBF77830877837B0A9 /* SocketRocket-dummy.m */; }; + 06FD642597BECB8887662032E31FD2F6 /* SRRunLoopThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 473E75BDFDA04AA427FA70CF259925D1 /* SRRunLoopThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0719B138AF65163D2434B36B42EF01A8 /* SentryCrashCPU_arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = 5F2C1817E4A1C97BDF0BC4097291FF52 /* SentryCrashCPU_arm64.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 074EF9EE2800990E106E16B9B6A103D0 /* SentrySampleDecision+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 23698092F85C73C0B4783BA0CD4865BA /* SentrySampleDecision+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0764E675D86508178F1C826E0CBE818F /* SentryDisplayLinkWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = CE4EBEEC29172F3F0BC6746337521897 /* SentryDisplayLinkWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 077663D5F9DF9D9995AFFF181538AA7F /* NSURLRequest+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C728140650FD24C44034CB0E47BE08A /* NSURLRequest+SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 084CDA34C0A01E7851B999BCCEEFBFB8 /* SentryStacktraceBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 993CF4388221193C6C987F7A3F902399 /* SentryStacktraceBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 08F305261B5A89E56A8446696BF82A52 /* ORSSerialPacketDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = FDC8135C80BF7A9563BFF3CF908BEB69 /* ORSSerialPacketDescriptor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0903E92419775664BAD9A28735D7329A /* SentryNSTimerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CBDD576DAD0CDB871620E3828CD761F /* SentryNSTimerFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 09587A235463DDD1B34E09B075C608A4 /* SentryAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DEF41D9B59330B53F10BBF26B0D4971 /* SentryAttachment.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0978158142308BB746CA32652DF45BD3 /* MIKMIDISynthesizerInstrument.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C8EC493F874B8809BCD9BC2DA9BBEF /* MIKMIDISynthesizerInstrument.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0982151698AA4E16DEC1C2F358AB04C4 /* MIKMIDISequencer.m in Sources */ = {isa = PBXBuildFile; fileRef = DF8FFFBF626E1A78D9F50E1E619FE4CF /* MIKMIDISequencer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A023621884FB912E2121719914E2654 /* SentryNSURLSessionTaskSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 39EFEC74A4F6F18F91E7272FB3627AD5 /* SentryNSURLSessionTaskSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A42D532A718D5B97FE4847730FED4A9 /* ORSSerialPort-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A287DDC7EA7068ABCB93823D1570EEA /* ORSSerialPort-dummy.m */; }; + 0A72FC7B052E2011B6DCF12313719170 /* DDFileLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCE9430692A02EDC8F1F3BC1C817CFC /* DDFileLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0AB1A7FF49CDAD6E50F72F4F239C426B /* MIKMIDISystemKeepAliveCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B77F6A4C4D6FD48E264BB250616E327 /* MIKMIDISystemKeepAliveCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0AEC948129048C26375B3840FB0E735C /* MIKMIDIMetaTimeSignatureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BACEC86247C2D652E699F492A8816537 /* MIKMIDIMetaTimeSignatureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0B2E42C2A468B2F81B6722732E89C303 /* HTTPRedirectResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 164E8D00BE22F96278C02265B90D7B1E /* HTTPRedirectResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0B6438CA8863012580F1E2D8C1E3E80F /* UIImageHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5620272E87C0CAC0C9AC2E6B49ABD96A /* UIImageHelper.swift */; }; + 0C8DDA939CDA3E0262A9676EFE3B3D3F /* NSUIApplication+MIKMIDI.h in Headers */ = {isa = PBXBuildFile; fileRef = BF76058C6035947C95DF0E0AB516A531 /* NSUIApplication+MIKMIDI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0CA36E8E371D224182809D5EDDD2D449 /* SentryClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D49E26FDEA0EDE4F3D63B6F1E3B3793 /* SentryClient.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D2163C2362A2AC3F7DFD2F868457046 /* MultipartMessageHeaderField.m in Sources */ = {isa = PBXBuildFile; fileRef = 77EA30B8425FD8954B23D6DDADDC115D /* MultipartMessageHeaderField.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D7A2F5F28053B6610F81F19113D3B90 /* MIKMIDIPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = D260887EA6D5BBCE842DECC9CC7289B0 /* MIKMIDIPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DD0F9BEB6CC2E3E1D98C3F43883FDD2 /* SRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C7BABCA4CD663FC5A91A269A0247B07B /* SRConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0EC6A7B73221C682621012A24E860683 /* SentryThreadInspector.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D6B7CA09FB9A842CFCB7952A9C2099B /* SentryThreadInspector.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0EFA7A70F9C53D7FDC17CF57B2028C30 /* SentryFrameRemover.h in Headers */ = {isa = PBXBuildFile; fileRef = 801359890C957E05995C5A9DE3F23D73 /* SentryFrameRemover.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0EFDE3A3113D5C6233A2FB09D6A78B55 /* MIKMIDIMetaEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45EB4297994223B1DA728605183EB558 /* MIKMIDIMetaEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0FD9F19E06CFC9816F39BBF6FF96419E /* DAVResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F8A5831B0B2E3DCE91FD58EB8328027 /* DAVResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0FE367EB26FA1F0206DCBE4F2762B1A8 /* SentryBinaryImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E2CE64E628BAFEF98C3765D2594305AB /* SentryBinaryImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0FE983B5C7B8C0079EC498C846754BBC /* MIKMIDIChannelEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4849D2E9F89F9438BE85A9EEB1BE5D96 /* MIKMIDIChannelEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 100D8155BE5B9CB6F7F071F451A5033D /* MIKMIDIMappingGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = E561C36E80F2AB36A7A52C3D9236F760 /* MIKMIDIMappingGenerator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 10198DF66B3B8F5BAEC4097295F9080E /* HTTPDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0121B52C65597E49D8BFAF7AD24D59 /* HTTPDataResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 105537780CD4D64B598BC98A5A628C7C /* SentrySwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 737DBCA538EEF16C5CE6DA6F6ED51FC7 /* SentrySwizzle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 10E0AA36C9AAD0EF6316B27751929CA5 /* MIKMIDI.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DBD06341C440F8640B2339335FB8024 /* MIKMIDI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 112CBF82B05CAD5473D52DF2F9C329B3 /* SentryTransactionContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5F4F15C25AF2BF307B81D105E417B9CB /* SentryTransactionContext.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 11759447844A2C0C10FF05C571C0E4D8 /* MIKMIDIDestinationEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = AA6F89079FEB1979B7671E45DAC632AE /* MIKMIDIDestinationEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 11AFB3040CF6D023EC175A1CEA0EEE36 /* MIKMIDIMetaInstrumentNameEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B18721BF2C13AE6DA208C77710F3940 /* MIKMIDIMetaInstrumentNameEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 11FBF94540AD65C1411D3AEE42C81225 /* SentryScreenFrames.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DC22CECBBE3E67CD8D9359EDC1C1CEF /* SentryScreenFrames.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 126A3EC477C658A59D9CC7EE021EEF52 /* SentryCoreDataTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C57C827E9D9379B1CB7C8A6BF78F51A /* SentryCoreDataTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 127384C91EDC269A900BD3AE0E666D34 /* MIKMIDIControlChangeCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 05C880AC7263CEEADB94A62AC4C24EF8 /* MIKMIDIControlChangeCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 129E36E15417D7EE56E7A7B1A1027D22 /* SentryBreadcrumb+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D24D0894702DF1776C05B5E0EF59BC /* SentryBreadcrumb+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12A37AF0E62DA930704B8FC680637D6F /* SentryDebugImageProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 8742C2399745ECC8D043A3E221FC7A8B /* SentryDebugImageProvider.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 12DF47F9CC4CD388A2FE45621D09BDFD /* SentrySampling.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F40A24EF070935EAB8080FEC19E264 /* SentrySampling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 13B9D85C706D6C71F5A69177924EABBB /* SentryCrashFileUtils.c in Sources */ = {isa = PBXBuildFile; fileRef = 6B5E158AED0B2C7CAF5B5945C4D54925 /* SentryCrashFileUtils.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 13EF59DB81CF02FF5C5A746414281994 /* SentryMXManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA582CB637004BC96A3D1A091653C33 /* SentryMXManager.swift */; }; + 14A94A6C5EE06ECC4E54FEF5456C937E /* MIKMIDIClientSourceEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AD4F54569A30FB3099349AA2FD35979 /* MIKMIDIClientSourceEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14B1ACB8BB5A90256A8F7D9E7FB9D5A8 /* SentryTraceProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = D418462B04DDDA7D63F4BD1479B611B8 /* SentryTraceProfiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14CFCDB5EF68A742F935B2112D1EA441 /* SentryAttachment+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B1C36E4DF7987DAB8302D8EF1DF518A /* SentryAttachment+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 156BDF85A75AC024BFB1D67CC66D1D7B /* SentryCrashReportFilterBasic.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D05DF185968A60037D48FD1D96378BC /* SentryCrashReportFilterBasic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 158CD5A92D0F3573967A3A6FE56EE14D /* SentrySession+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7D33B94A1B9DBFC2DCD2DFF44F66DE /* SentrySession+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 15B707379931F947448F78E81D52E69E /* ORSSerialPortManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 53CFC3C21346FB7D2700F4E1A85AB557 /* ORSSerialPortManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 162064222917CEB14D652D6518B30221 /* MIKMIDIMetaCuePointEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FB0CD51384346718A36B359D3B12A266 /* MIKMIDIMetaCuePointEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1658257A7E61A3C65A46CCB4E56BDD88 /* SentryTime.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4E05A8E2066D10DF0929835920C1746D /* SentryTime.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 167DFBA9259EA750F4659AE082718F90 /* MIKMIDISequencer.h in Headers */ = {isa = PBXBuildFile; fileRef = 842EF3ED83C5944AB14DA25945770838 /* MIKMIDISequencer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 16D10056E861945019EC3AEF01F8CACC /* SentryViewHierarchyIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 65922E3A45166DDCA4173E5BDC28BF83 /* SentryViewHierarchyIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 16EEC22BF304BADA09BDE0263EF8B417 /* PSWebSocketDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C4EB8092FD3032A17342EE0DB912D98 /* PSWebSocketDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 16F8417571B1CB3E7D2A3D6C9CCE3E6E /* SentryNSDictionarySanitize.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B410C510F3D3ABF7D884FFBC40A4457 /* SentryNSDictionarySanitize.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 174A6B1D3D81A98377D233E4D1FC6EA5 /* SentryWithoutUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B7F9C204A84B9AD912DBC085F2A35F07 /* SentryWithoutUIKit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 17850771A124E87F647F887B98D3390E /* SentryMetricKitIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 23E2D18CC0B28AAB2C4650DD4E7EBF71 /* SentryMetricKitIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 17BB5BB4C458E818FA2F9F75B67962DF /* MIKMIDICompilerCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = BB5920AC822770B7C25DC50F2D9808CE /* MIKMIDICompilerCompatibility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18738765E1AA84703326A63610F003F6 /* SentryMaskingPreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70FD76A2796E90020984F5AD24587BA1 /* SentryMaskingPreviewView.swift */; }; + 18A548CA8C73CB916896D0731353DA91 /* CocoaLumberjack.h in Headers */ = {isa = PBXBuildFile; fileRef = E52BCB07A2726354462572EBEFF1BFA3 /* CocoaLumberjack.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18D338DF0D078E2C37BA4134BCD13121 /* SentryFileIOTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 450C9712F3582C5F6928D190E5A22E0D /* SentryFileIOTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18E522C0AA33E53758BD70688441C900 /* SentryCrashMonitor_Signal.c in Sources */ = {isa = PBXBuildFile; fileRef = 8450784D7958893BC52C171399D38969 /* SentryCrashMonitor_Signal.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 197C87DD72CF2A4362933EA10AB0EE3A /* MIKMIDIClientDestinationEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 46476A7B8A6CD10A627F9418D169CCF9 /* MIKMIDIClientDestinationEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19B96DB16D5124BDDD92CF6F0F716479 /* SentryCrashDefaultBinaryImageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = BD3511636338F6815546F70E8554408C /* SentryCrashDefaultBinaryImageProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19DE4FCDB976C7E837BBA0BC875C4595 /* SentryBacktrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 013372DE237CA0C2353B5BCBA2415F09 /* SentryBacktrace.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1A04B1F1CC524F2ABE61BE4A29E62FC8 /* SentryDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 80FC9CF001523AF3C6DEFD61CF069029 /* SentryDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A3C6848CFF52F5EB1742A208E59BFDA /* MIKMIDIClientSourceEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 96938FEB113D0B5CB884DDD289E9E77E /* MIKMIDIClientSourceEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A5E33C14A7D0C8C015396B42A1A4248 /* SentryANRType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93B884D749F216BDA2A699DBE3FC1D5A /* SentryANRType.swift */; }; + 1AA3D19C703DBA27150EE09ACF9C7D6F /* SentryUserCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B42A3EF716427D6B5B709CD87D5E171B /* SentryUserCodable.swift */; }; + 1ACB451D2EFAA79F49F2C84C6193BADF /* SentryStacktrace.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E00BB3CF3266C62EEFB535D21DC0BE9 /* SentryStacktrace.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1AD7087069B65794537F3F381369EE75 /* SRSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 72410BFF01262739729F06CA6B62D25E /* SRSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1AE2CCC25E2E4A835B16331FA9DFC927 /* SentryCompiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 14CF687B759F72FE41D6E71F3A497585 /* SentryCompiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B4C383F790E1D713276D81F54EC4F64 /* SentryUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 021859CFC2B32F8EC80EDFFF4FF61E5C /* SentryUser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B935394DD50545E23275F7B8EF71D2C /* SentryStacktraceCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E746206C311B3619755484CD786ABA /* SentryStacktraceCodable.swift */; }; + 1BB64602BA9B6F86E4013598AFD1949C /* SentryTimeToDisplayTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B52F4F51D3A10B2D5148EB70139AD24 /* SentryTimeToDisplayTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BF820BE85E5F97681E1F6EDEC007CD8 /* MIKMIDIMetaSequenceEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 185CFDCD1462B098FBB7AC0E6EDC8320 /* MIKMIDIMetaSequenceEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C3867E79784FD94C7F8BB3C67FE383C /* SentryCrashMach.c in Sources */ = {isa = PBXBuildFile; fileRef = A916BA304F5A9005B5D0FAF7776AE362 /* SentryCrashMach.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C5DB598849A0910D8976FB0CF5ECA10 /* SentryCrashCachedData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA1A20CDB46FFB92641EC76FD79B2FC /* SentryCrashCachedData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C7C4792DB7D01B338850D72255E6A23 /* SentryCrashMonitor.c in Sources */ = {isa = PBXBuildFile; fileRef = 3EABE42A9BDBE5DA7D9FD19EBEB1552B /* SentryCrashMonitor.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C8FF31285EF666FCCC2B3C5F7C65660 /* SentryDiscardReasonMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A157016CFDCE8B69F5D9AC8243F7463 /* SentryDiscardReasonMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1CB9C298E8F49BF87EEC064FB31F47B5 /* SentrySample.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E1205EF093247098739F118D081AC02 /* SentrySample.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D5B8B9DE34CFF04FE6B817265B2383A /* SentryGraphicsImageRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A130B05C92B391BDAF34E51CDE1940A5 /* SentryGraphicsImageRenderer.swift */; }; + 1D62B1400099D1BB42B98811E99E780C /* SentryCrashMonitorContext.h in Headers */ = {isa = PBXBuildFile; fileRef = DC466DC7111241D7B7EC3144EEEB8302 /* SentryCrashMonitorContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D90673E3CABFD003D93644F84A8F96B /* MIKMIDIConnectionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8146F63CF2CEF0B5D20E3D356833C779 /* MIKMIDIConnectionManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E24520B951107DB604F5BEDC4392442 /* MIKMIDIControlChangeCommand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8303CA9AF549BECD7BA5D8F2A48CECF8 /* MIKMIDIControlChangeCommand+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E3629C68D10C2807461237A9B30653E /* DAVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = A30A09EAEF2D914E89C9895F37291A88 /* DAVConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1E8A4C2ABDE953AFAC3721EDEA3E6CA7 /* MIKMIDISourceEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 988923A666D72522C0D744911E35F3BC /* MIKMIDISourceEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EB9E66E9A3AA4AFD137C78C91C538B5 /* MIKMIDISystemExclusiveCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = B1D4029013299DFFFF40058BE4139C40 /* MIKMIDISystemExclusiveCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1F3459862C201E52F9FD05E45C47C9D9 /* SentryDelayedFramesTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = A6F64F8B24B4B2BCA7A20B23A598C9F3 /* SentryDelayedFramesTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1F7FC95B6747578A4C8C5A8B68857F8E /* MIKMIDISequencer+MIKMIDIPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BB82C25C4B233D8794576EE0DBC49E /* MIKMIDISequencer+MIKMIDIPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1FB36B46B9A94E3DD341110BE36E5E20 /* SentryMeasurementUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EF53651663A34C25FC46C6814C0A26 /* SentryMeasurementUnit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1FBF29A56277D7D3CA397C79D3281693 /* SentrySessionListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = F67BCCF7FA50880126FC18B5F463485B /* SentrySessionListener.swift */; }; + 20E2FB0D8F2293AAB8194D20D56F2178 /* SentryLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6B888DAA0B8319F95350F577A34A962 /* SentryLog.swift */; }; + 20E414D3EE89F574F58D54C3C69A9B37 /* SentryMigrateSessionInit.h in Headers */ = {isa = PBXBuildFile; fileRef = F9CFB605F4B51D73F6D831861DE41F5B /* SentryMigrateSessionInit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 211952C85B8C5E12B47D4C6AB311EE29 /* MIKMIDIMetaTextEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D20321AF541BC473BCCCE5D01E59001F /* MIKMIDIMetaTextEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 212F61A57DC9D98A4EF1CC438D03205B /* MIKMIDISynthesizer.m in Sources */ = {isa = PBXBuildFile; fileRef = C1844E20A839D34185D43C9C6CF6892C /* MIKMIDISynthesizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21628B290A5EDC48407D7377FE7CE6D7 /* SentryFileIOTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 680D25FC1D1C2516EB078E63F646D141 /* SentryFileIOTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21A2E2540E9231DADC2BF215F7ED95FA /* DAVConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D295BB7D5E69C4C2F89CBD7C6BC948C6 /* DAVConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21D1C98A91424F038ADE711EDE409E8A /* SentryProfilerState.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9751428F54E530C5952402C24C65443 /* SentryProfilerState.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21D944472DBECF576380048FD6C85973 /* SentryPropagationContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 96F36B319C20D9CCECB8380DAF1D0E43 /* SentryPropagationContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22107319A430E08ED31E33DCB7DCF967 /* SentryDebugMeta.h in Headers */ = {isa = PBXBuildFile; fileRef = C8F4F614F87D25048167240FF1310A1C /* SentryDebugMeta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 23009AF73E9846DF111E623F45E11746 /* SentryThreadInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CF6E6C705AB59F50EA0D4AD6BA9F8CF /* SentryThreadInspector.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 236657F780EDEEA6FF9174852F524CB1 /* SentryFileIOTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 44E6965C31564C8CC1589C2C4ED6F9CD /* SentryFileIOTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2366789ED077638C6F8EDFAD93830B08 /* PUTResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F9C148B837B0EE0FBFF1D4FCE84A55A /* PUTResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2393CBF06F072DBC4F051D19B997C65F /* SentrySystemEventBreadcrumbs.h in Headers */ = {isa = PBXBuildFile; fileRef = 429105E10E5496746F1E3568999BBFD7 /* SentrySystemEventBreadcrumbs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 23964EA81D1896E16196DA482A0EB39E /* SentryDispatchQueueProviderProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = E470ABE640336B2AF754A739775CDC74 /* SentryDispatchQueueProviderProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 24B03DE6D29B690C0EEC5933DD12DB1C /* SentryMechanismMeta.m in Sources */ = {isa = PBXBuildFile; fileRef = FFAE18C8793F04E16D66A3A645503499 /* SentryMechanismMeta.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 24F260A45898A35168ABC37B7EC93487 /* SRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C12D845A1CC6551AA46F001A4BFE8D7F /* SRConstants.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2560A49685CB706557B8D8C043D466C7 /* SentryBaggageSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF7CE801491B786152F529FE0DD007B /* SentryBaggageSerialization.swift */; }; + 256DD6393D7791D17B2D4B87C90A364B /* SentrySessionReplaySyncC.h in Headers */ = {isa = PBXBuildFile; fileRef = E2F95EB4A673FB421E155C6411A70419 /* SentrySessionReplaySyncC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2592E5C7958E28DD96ECB5E6738005E8 /* SentryLogC.m in Sources */ = {isa = PBXBuildFile; fileRef = 8431CD8C532A8DEEB662E2FE721C23E0 /* SentryLogC.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 259AEFF77A9D3726500BCD540D51D410 /* SentryHttpStatusCodeRange.m in Sources */ = {isa = PBXBuildFile; fileRef = CADDE9A9647F91E7D151ABF1EAAB7037 /* SentryHttpStatusCodeRange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 25D14CC8ABB6EC2094B93425E19889D0 /* MIKMIDIMetaMarkerTextEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 15B2A2E5E70BC78A8C2E2288B97FD55B /* MIKMIDIMetaMarkerTextEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2631CF97F0A2FEA2C8FB589DA615047F /* MIKMIDIEntity.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F447734ADC03DAB94041C24F155F64 /* MIKMIDIEntity.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 26874E13F8C1DF36E03DA71C0A9E9DC4 /* SentryBaggage.m in Sources */ = {isa = PBXBuildFile; fileRef = CB5C1A8C47AA551F58EC39F9B5BDD214 /* SentryBaggage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 268964F14AAE7B0A0B1B0EC6D2662BAE /* MIKMIDISynthesizerInstrument.m in Sources */ = {isa = PBXBuildFile; fileRef = 462B92525B0663237A3A78E871ED4F38 /* MIKMIDISynthesizerInstrument.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 26B97B14E0CFC48062D108B6C98A1CC8 /* SentryObjCRuntimeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5474B4DCA2758234891C7C33F4150D85 /* SentryObjCRuntimeWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2752BA5F431F1EC6645CE608833C6A6D /* MIKMIDIPort_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 795939DE6FCCDEB00B91D8A650C4EA2E /* MIKMIDIPort_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28366B1C78ABFF4C1C52827D838D910D /* SentryScopeSyncC.h in Headers */ = {isa = PBXBuildFile; fileRef = 779346D5BB5D5727452F040B2C854FF1 /* SentryScopeSyncC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 287C954C14C1D34C95AD2A9B6D397529 /* SentryCrashThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D31F565F26C3E8DE6E116F9CB27D589 /* SentryCrashThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28EE2E62017948158BD66EA2DB9B54E2 /* DDData.m in Sources */ = {isa = PBXBuildFile; fileRef = D227D41DE120A39AE10D358AEE6A6F3A /* DDData.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 28F7377DF75A179FEE0D05F05A4FA469 /* MIKMIDIPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D3B9B268F386C4D0D0F6A2D141445F3 /* MIKMIDIPlayer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 290BD980F463CDECA9302073F9C0BB49 /* SentryDsn.m in Sources */ = {isa = PBXBuildFile; fileRef = E90D0D2273EE786D76AFCDF55C520EAA /* SentryDsn.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 29A947496A1A28C493E6CC0A28D48986 /* SentryScreenFrames.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D45B793B8653991E78532EB0E7A687 /* SentryScreenFrames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A12E9A7209720A7DACBC8C498C6BF8B /* ORSSerialPacketDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A13A202EB5B1A6EA6A4E7F4C1273452 /* ORSSerialPacketDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2ACAAAEEDFC51BAFDA1B8024E4074588 /* MIKMIDIEvent_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF648B80187B6006ABE714309DA810A /* MIKMIDIEvent_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B2DE2D3A4235BEC492808D8760C9E47 /* SentryPropagationContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 5910F46B3D41DBDA7CB13B4C14C3CF92 /* SentryPropagationContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B8156952A413A29074AEDA747079B0E /* SentryBreadcrumbDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CD7F2CFB8DB56B7F548A712102E76789 /* SentryBreadcrumbDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B9916AF8E33232A507932205F074157 /* DELETEResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = F9AD2DD70D6E747E8FA93EFC17E50A48 /* DELETEResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2CA677FD59DBA0177C086ECA670CE876 /* DDDispatchQueueLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 161F0A5D1CE5D5F7EAB1724DCCE11BB4 /* DDDispatchQueueLogFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2CA8B75AD8E762E188B2C77EBB17D7F8 /* SentryDsn.h in Headers */ = {isa = PBXBuildFile; fileRef = 329823FCF83AECFFBADBD6558C83247C /* SentryDsn.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2CAA932140A7F83115E21C182D34E731 /* SentryOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9448B8D33A8B8886752785AD18161DF1 /* SentryOptions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2CACDBFA033E57EC541A714E4B306F5F /* SentryDispatchFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CB2432A7085A0A304B9D1C0C5FA4D4 /* SentryDispatchFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D88E9214349D77870AA757CF2B5226E /* SentryReplayApi.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DB22B97642F1FD219E44FBE2BE4C5A5 /* SentryReplayApi.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2DDEBF8FF431424F2CA8459612D8E18B /* SentryUserFeedbackConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54E33F6BE33F82C2674E878286B290EC /* SentryUserFeedbackConfiguration.swift */; }; + 2DF6EEF17DEBB3FEB88229C24F90BF76 /* SentryLaunchProfiling.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A1CC7B949AD3F3057926529ED016B3 /* SentryLaunchProfiling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E44E18E1307FF83FDB8FAB82307231F /* SentryDependencyContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A397C7EC43828883494A2BC44A7C2B /* SentryDependencyContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E4E8391D62C329D939117D00DFC9667 /* SRSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 859C7C1828CE86CFD39DF3F7F4868F54 /* SRSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E731D007457224D46CD6C45E7A9E78E /* SentryOnDemandReplayError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A4DB2B88278CCC63A35AFF04CD01C39 /* SentryOnDemandReplayError.swift */; }; + 2F3121CDF1B58F9E1EC954C2CD396DD5 /* SentryDefaultViewRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B507ED4338B1FC568FACFD979A642CAD /* SentryDefaultViewRenderer.swift */; }; + 2F5645353175B89772240C745B92F327 /* SentryDisplayLinkWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BDAC9EEC45CC939068731F85353694 /* SentryDisplayLinkWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F694601BC31E5488E6DA981ECE99C12 /* PSWebSocketBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = F0E08C7B71F571EC237E1A45466EA7AA /* PSWebSocketBuffer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F6ADF1BB99E1B48C2AF70ED419EF7C4 /* DDAbstractDatabaseLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F296E90DD98690B8386DD6DE256ADD /* DDAbstractDatabaseLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F767CA481379C801CBEBF04CBE29B9B /* SentryCrashIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 962C790D313BC9CD6D3795CD05661781 /* SentryCrashIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F942B6EE8E2905FB563728D01512864 /* SentryRateLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = F83A5CF950B53A27A5D17222EF446777 /* SentryRateLimits.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2FA7F4C0CE9F0D44B7177F9A4D6BECD1 /* SentryCrashIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = A8B05C33F5F838187210EE0090C8CBF9 /* SentryCrashIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2FAF81B69BC62C20CD42EF1F1F460841 /* SentryProfilerDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DDE95EC68375C1B66CB9573441844D9 /* SentryProfilerDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 300F82B02960D7C930387100253DF56A /* SentryDataCategoryMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 80ED7A4FDB50A475C8FBC673A4906C89 /* SentryDataCategoryMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3013298B881D6E22078F47E3440F49D8 /* SentryPerformanceTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 791BB305952470D5437C5B53ADE67EA2 /* SentryPerformanceTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3020A81744C96755C2A0FB997E4653BD /* DDNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = E1026F22848E378B0F43660D21EDEACE /* DDNumber.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30AC91EE1DD21528141C19C6F24DB76E /* SentryFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 26CF693CEF73453AA3CCAF5340A0A14D /* SentryFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30B7996DC9A18091C7553F8EF9434B10 /* SentryCrashCPU_x86_32.c in Sources */ = {isa = PBXBuildFile; fileRef = B18BF0A45152AE67AD7CCB3B1B2D9459 /* SentryCrashCPU_x86_32.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 310463CD905838279EBA8588D66AA30D /* DELETEResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 97374FB11D4E2C1DC17DDF20E0285ED0 /* DELETEResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3138FD5246AE698C58242B8B5F4DB275 /* DDOSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = B945A3848C7CF183A6CD61FE0D141115 /* DDOSLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 315BF99FF29C7AE5B53D44F16F5BA0CE /* SentryUIApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE193A78A30E6667AB07E47D03C65C4 /* SentryUIApplication.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 31B88380B074CBB3FE9DE474BD93D7C1 /* SentryExceptionCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D997B67763BC563D2DD7967BE28BAEA /* SentryExceptionCodable.swift */; }; + 31CDF8C2812739FA981A303BEE4FE587 /* HTTPDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BA92B27E597DACDA2276CC472B98334D /* HTTPDataResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31E2944D858BD38DF6A17E392EA3BBB1 /* SentryMetricProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 48991D9FBE861B5B206864421C37BFF9 /* SentryMetricProfiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 325FA59AF78D5A9FCCE98246C77278EC /* PSWebSocketInflater.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E093B03E5DA6356CAA2541D24724400 /* PSWebSocketInflater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32EEF62246F0CD85545A7FB030AF6E50 /* SentryDictionaryDeepSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 3046CF312C54D83F1BF1B011E53368EA /* SentryDictionaryDeepSearch.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 33074F45D7F70FA0CFDA341982597DE8 /* SentryCrashReportFixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 766EF1FD4797B6AE9B3270D760A9EDDE /* SentryCrashReportFixer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 332F1609F7D5F7DE50200B7B1A85D299 /* SentryViewRendererV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF0C274C930CE18FE5E126F2264578DF /* SentryViewRendererV2.swift */; }; + 3350D8A08C14A86EFF92600C380EE50C /* SentryNetworkTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 79E62D0B9B9FA0F42403B8F79461611C /* SentryNetworkTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 338319DB044603D7F0EE29DC6D759C82 /* MIKMIDIDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D26327A6C226830B2E1A3EE46B72674 /* MIKMIDIDeviceManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 338856996A217C7210B24A90623489AA /* SentryFramesTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = DCBF273CCEDE27D8C56FA3A8250A33BC /* SentryFramesTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 340C72F2B8196802A233F3145FDCB8CD /* SentryANRTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 028D527FCC2C66E74D481F5EC3F77793 /* SentryANRTracker.swift */; }; + 3423F6C6365E7129D077AA96679ED135 /* DDMultiFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F819F282E99A70F002E40A2B7B0C61A /* DDMultiFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34A06D758E8908251F5DEA7E11FE059D /* SentryCrashCPU_x86_64.c in Sources */ = {isa = PBXBuildFile; fileRef = 394A9C321CBC68C8D29496EC6670DFAF /* SentryCrashCPU_x86_64.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 34BD071558957F50111F5F84AEDD4FBC /* SentryCrashMonitor_AppState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2776C41D22848733563DFB32582D1201 /* SentryCrashMonitor_AppState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 352B1BFAAFF0844781F6EB933B89F269 /* SentryLevelHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F149CC719361878E22B89970F9BDE9F /* SentryLevelHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 364A63BA9E90154E30C4C44B0F55FCB5 /* MIKMIDIClientDestinationEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = BD1E20E491C7915FFE70AB39BCD25636 /* MIKMIDIClientDestinationEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 366ADE9E84E87A0AB1E1921F954D272B /* SentryCrashMonitor_NSException.m in Sources */ = {isa = PBXBuildFile; fileRef = 869A0000ED64E788FC7A510588EEE58A /* SentryCrashMonitor_NSException.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 36C27088E492032CC14F0210C43F5C84 /* SentryCrashMonitorType.h in Headers */ = {isa = PBXBuildFile; fileRef = 852032663E4A7D45316C9EDD5CFFC96F /* SentryCrashMonitorType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36C40FC3925C359997E4F541DAF026E9 /* SentryNSNotificationCenterWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = AFDAAC10BE35358D509B630C8414DDF7 /* SentryNSNotificationCenterWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 36CBCC7A5B79598445444F1F26415489 /* SentryNSDataUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EF77AAB993822801A86A4FAF11D57CD0 /* SentryNSDataUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37372FE801D1AE8347E6B01DF0894DA8 /* SentryFrameCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753F54012FFFFD42AFABF656AB79C7A5 /* SentryFrameCodable.swift */; }; + 375F1AD6C519D526D029B09C58B30915 /* MIKMIDIOutputPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 67ACCD2DF5751002FF5D6D1109D7E6B8 /* MIKMIDIOutputPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 375FC1B1A513D99C77F174AC94D387AD /* SentryCrashScopeObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 231DDA31B0FD020205630FDF53855B3B /* SentryCrashScopeObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37860A995833FBC5FB9C7A296F2528C1 /* SentryCrashObjCApple.h in Headers */ = {isa = PBXBuildFile; fileRef = D4D42B04022071057D472D6A697EF9BA /* SentryCrashObjCApple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37BF25240639AA279978977FFF33F819 /* SentryTracerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 058190E677CEDCFB61A886E056E82508 /* SentryTracerConfiguration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3832F164BC4B9D22CDC240C8EDF9D5B1 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = F54EF32EF2FE2D4E238B2148553D7C6D /* PrivacyInfo.xcprivacy */; }; + 386F36C17738AB97148FEC12DD7DC180 /* NSLocale+Sentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C9354E0B789A3F43108EB67B8D3D5 /* NSLocale+Sentry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3878AEBC553D6A4F81DF9AA832ADE598 /* SentryBaseIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B3CB1CD10B710358F24273B2E5D334 /* SentryBaseIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38C808E78E2EEBB225D1430EAB1D998A /* SentryWatchdogTerminationScopeObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA940F1554158B255A21A9E225411EB /* SentryWatchdogTerminationScopeObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39275CBB86C21DADF1DA02C06DB10E77 /* SentryAppState.h in Headers */ = {isa = PBXBuildFile; fileRef = 81FB4ED6990EF83BB240340C11A01284 /* SentryAppState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 392FD12D939910DD01B777F10548A33A /* MIKMIDIPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 327361A487C2579906EEC29BEE955F87 /* MIKMIDIPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39C8FBD8BCBB244832012E295DF0A749 /* SentryCrashReportSink.h in Headers */ = {isa = PBXBuildFile; fileRef = 6858EAD1428B271AD06FE1828D2E4924 /* SentryCrashReportSink.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39D5769E1B7783AC69BC317E3CDD7490 /* SentryUIViewControllerSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 71924EE8FD21994FEC60C7192D798591 /* SentryUIViewControllerSwizzling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3A8BEBDA1B6F3698E23777D12B42C512 /* SRHTTPConnectMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = BCAED0A39006EA29797534B9445A9D76 /* SRHTTPConnectMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A9DC3EB72FA8442983149E9CA5FA79B /* SentryCrashUUIDConversion.c in Sources */ = {isa = PBXBuildFile; fileRef = 35E8F22E89E5AE0BF8B33125B9E34560 /* SentryCrashUUIDConversion.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3ABDA7BFF235110BDAAF56758D8CC092 /* SentryHub.m in Sources */ = {isa = PBXBuildFile; fileRef = 972D0DDFFD016B086F9E12707D142036 /* SentryHub.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3AE7E602A9326AFE4943A994B3A05E88 /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = B28A4D71BC04B1694C7A281176FC21E0 /* GCDAsyncSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B3A8E58B64C1B3C4A831FA309FE0437 /* SentryCrashMonitor_CPPException.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE2799EC60774AF37D6EE071244A705 /* SentryCrashMonitor_CPPException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B40CD7B282EB9A16DD29C6731162991 /* SentryDefaultObjCRuntimeWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3814EB66727ED77A2067142A97224796 /* SentryDefaultObjCRuntimeWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B5596EB0842FB4388148CA581C476D4 /* PrivateSentrySDKOnly.mm in Sources */ = {isa = PBXBuildFile; fileRef = BEA5AB62CCE589AE5F7C3ABB35E84D2A /* PrivateSentrySDKOnly.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B6CC8BF17EBB804DAA87B1293F0CCCA /* MIKMIDICommandThrottler.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C9D1316302E6BBBCEA5935D4680620C /* MIKMIDICommandThrottler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B8F7B47CE9F5CF0728DDA5651F58D53 /* ORSSerialPort.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3CBC5C39968D0ABB2A9C7DEB2B01F8 /* ORSSerialPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3BCC83C00C9DE6C0954B783BEB83AFBC /* SentryCrashStackEntryMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = E00A5FD6AA293963D41721191843BB41 /* SentryCrashStackEntryMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3D44ECA9D387E36773BEEF95679A4408 /* HTTPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D774FC3483E8ABA760F84985504762F /* HTTPLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D643FC23FAA3174C506880665A68913 /* SentryNoOpSpan.h in Headers */ = {isa = PBXBuildFile; fileRef = EB98D830E8E41543E535AB98411B20FD /* SentryNoOpSpan.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D7A618BC4391306EAEB660F34D64C22 /* SentryExtraPackages.h in Headers */ = {isa = PBXBuildFile; fileRef = AE74D23E7EF85AE415B3A683D9CC5C31 /* SentryExtraPackages.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E3D7CD559BF18B764BFDEAF5D771A58 /* SentryCrashMachineContextWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = FEDA4CB82BECFB01B2F039AFA1AA62DB /* SentryCrashMachineContextWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E5E3DF0158A79003EC654FA39E9EB91 /* SRHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E3855502235F54F86C56D7203DE2C7A /* SRHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E6049E2732771D4090F6010E8100C50 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9093C406D4B64731D18CCA6C385B6596 /* PrivacyInfo.xcprivacy */; }; + 3E6457183D6DCDB79E3150D0FEC1CA71 /* SentryCrashMonitor_CPPException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 276C4BE1B5F22F7CB6FC184CB06622CC /* SentryCrashMonitor_CPPException.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E65C0084750EF11D19E2B294AA18E31 /* SentrySampleDecision.m in Sources */ = {isa = PBXBuildFile; fileRef = 692EE743E6B42DEF470106A9BE2480C9 /* SentrySampleDecision.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E6820E349E1E9AFF09EF16666203698 /* SentrySpotlightTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FDD1A0A32D4A1C67B66E9C27ECD239 /* SentrySpotlightTransport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E682547832453BCB4BA4B0D7606869B /* SentryDateUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EC217681D4187EC5D6A5D0653005F9C1 /* SentryDateUtils.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E6834F0469F1498DB002C285211BECF /* ORSSerialRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 36D6B5D4D68F48D96C4BF35A6758112C /* ORSSerialRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E8FDFA38E3EAED6D2EE39634876FF68 /* SentryCrashReportConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = FF25162D473D23E31D743B900E3537AC /* SentryCrashReportConverter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F9AA044B1A8BDA25393145A20FE8270 /* Pods-Hammerspoon-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 85C2F84F2F3BB5FE4BD4AED20D9CEF88 /* Pods-Hammerspoon-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 405830704E32666C342BB8B4F0A7F5B6 /* Data+SentryTracing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3176F06FFFF10AF7105AD2AA38B09181 /* Data+SentryTracing.swift */; }; + 40980AF41DC7C159720BCE3AE67AC072 /* SentryException.m in Sources */ = {isa = PBXBuildFile; fileRef = C16FB91F92FCF7EE5B278BB9AAD6DDB1 /* SentryException.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 40A174F9B1D60F6EAA1BF6506738DB83 /* SentryCrashPlatformSpecificDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = CCD5A1E882F2F945A406879F94E539E7 /* SentryCrashPlatformSpecificDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4174767455269D3FEB4FEE823837B826 /* SentryRequestOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A0420ED2F06C298E891E27608911A133 /* SentryRequestOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4266EB2B013E1B2540000C358ACC0A7C /* SentryAppStartMeasurement.m in Sources */ = {isa = PBXBuildFile; fileRef = 94D32381EBFB62DFBDCD427E9E04D6A7 /* SentryAppStartMeasurement.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 42BFC1BDA36B535FEB959C7630BD71C6 /* SentryLogOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C960815AF5A9CC36433E8014FAE64E8 /* SentryLogOutput.swift */; }; + 43E92A018F1E69F7B5DFC5DE30D9C4CC /* HTTPConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = B771A3598FAAD66A8DD42FCE854B8CB9 /* HTTPConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44CC60417BACAF77A66FD4E2231019A7 /* SentryCrashID.c in Sources */ = {isa = PBXBuildFile; fileRef = 6ED8126E44539AD06EE44B2225B50C8E /* SentryCrashID.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 44FB816D3DC0546A2BA7237A812C3F73 /* PSWebSocketInflater.m in Sources */ = {isa = PBXBuildFile; fileRef = 92FE6A882C4D18E418625FFC2139AA49 /* PSWebSocketInflater.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 456342428A67C3B2567101D54DEE494E /* SentryBreadcrumbTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 284B6CD9B01AB8911497ABA822DBAA46 /* SentryBreadcrumbTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4579C8CB184B05DA684B6073DCE3E429 /* MIKMIDISourceEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 553BF87CD5AD99E7E5554E1C079DEBAB /* MIKMIDISourceEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 458D15C81F325818961D3DF81D2EE5CC /* Sentry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 866AB42A14F3AA83F5CCB0D431EFA9DF /* Sentry-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45E6092131F766170AEA8A9292012E45 /* SentryCrashDefaultBinaryImageProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 860CA4F7747B83DC0277AED809DD45BF /* SentryCrashDefaultBinaryImageProvider.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 46468C1EAC00C942FBC7FF02D58E17CA /* PSWebSocketUTF8Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E9D4653D70BC0D04A09041E841DC3D /* PSWebSocketUTF8Decoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 467975712189615A5AB41295305E461F /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 15BD9E7FC207DD702FB5F81ED78A7971 /* DDLog.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4681CAE9ECA0FA59AD690869E938AD26 /* NSArray+SentrySanitize.h in Headers */ = {isa = PBXBuildFile; fileRef = 8685F2D00E2938BDB0EE0F8821012911 /* NSArray+SentrySanitize.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47097FD89ED1ECFFBCC974FEAF45D3CD /* SentryCrashBinaryImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F70D5524E23EF0358766F8ADEDB31419 /* SentryCrashBinaryImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 471DED388EFF976E999474A8D789B04A /* SentryCrashInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E3C2ADFA10F7F852AEEF7A8DE9EEA83 /* SentryCrashInstallation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 47748A3B4A070E1227965533AEB2E7D1 /* SentrySession.m in Sources */ = {isa = PBXBuildFile; fileRef = 608861AAFB8A9A37D02A662816346B36 /* SentrySession.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 47BCF1ECD5DB1BB2471FB6D7FE914D93 /* SentryAppState.m in Sources */ = {isa = PBXBuildFile; fileRef = 18DF647FE820E68B8D1BF9BCB8EE36AB /* SentryAppState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 47E88534588489C84E968AD2B09918DD /* SentryEventDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35A0966B65DB16054066AA015E1677D /* SentryEventDecoder.swift */; }; + 48099444439EB504F5F0C66F6E9A8A9E /* SentrySampling.h in Headers */ = {isa = PBXBuildFile; fileRef = 485C496F42583F102554E3C3FF0DE554 /* SentrySampling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 485B558711B328A08DF4F0B12D8517D1 /* SentryGeo.h in Headers */ = {isa = PBXBuildFile; fileRef = 19E2621A1FA98E207D7A07A698FD91B4 /* SentryGeo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 490702ADFA1073E96A43E35C73432C25 /* SentryCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F330A5304CD73E2EB40FB043576762E /* SentryCrash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4951ACB799160F339A9A34FEE4FFA591 /* SentryFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D792184A9AB8B9AA1AAE185E026E65D1 /* SentryFileManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 49827DE6152D08D990832A4EEFF56178 /* SentryMigrateSessionInit.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A80A7A13984B16A5017326FC28E37A4 /* SentryMigrateSessionInit.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 49E4CB3E1A7DE13AB71D0C3FF90CAF4A /* SentrySamplerDecision.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2B5123344E3450B3DE3F5ECDDC16BC /* SentrySamplerDecision.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 49F2E634C941C405E65E6A2D6B68CE6E /* CocoaAsyncSocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FA4E690D2B100C84644FDCAF2781A4C0 /* CocoaAsyncSocket-dummy.m */; }; + 49FFD63455BE8E97E52F356A313A6982 /* SentryReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A5502C1BB41C9CB48FC04B0AA902541 /* SentryReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A3B521A44260D4E27AA32128C50982A /* SentryCrashMachineContext_Apple.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BB4F7FD2FF745EF831C1D3DDB30782E /* SentryCrashMachineContext_Apple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A6B9477DC81A028021AA701BB1E4550 /* SentryRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A0095ED28923BB433C6936C719EF5BF8 /* SentryRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4A964B46A9814CE51E9BBFFF31C04238 /* SentryDispatchSourceProviderProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B197A91F7D0C4150426ACD0206DC628 /* SentryDispatchSourceProviderProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4AAE224DCB5C6F7B5FE16CF66E99541B /* SentryScreenshotIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 803B67F9CE05575013E5ADC8ADB47651 /* SentryScreenshotIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4ACE91694BAA33978C3952C0EF175E8D /* SentryFileIOTracker+SwiftHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470BF913F7D53019E3A526D3E9B05899 /* SentryFileIOTracker+SwiftHelpers.swift */; }; + 4B00E98D6D8D34F450FF7A282F131E39 /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7912F98687E5F3DC6F52736B5D6E6B2E /* DDASLLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B011D9132F9495BC7C61B48FAFBEF2F /* SentryANRTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = F06AFF0B6CB2017451A3DBD7A62F0404 /* SentryANRTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C15C66636B911C5C8FE629D3B07F064 /* SentryMXCallStackTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = E49D6B49784CF0D1FE93A45D08C27655 /* SentryMXCallStackTree.swift */; }; + 4C2C0BF68A439C275BEEE4CC6A509214 /* HTTPFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7A7F3DA043B0BAC501772A67431080E /* HTTPFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C349CE5B1CE3E32D06C246992B1B90E /* SentryScope.h in Headers */ = {isa = PBXBuildFile; fileRef = AC48BBE59A92DDB13D38B820F3F678C9 /* SentryScope.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C90908929770106F838618A098FEB84 /* SentryExtraContextProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E700A685FD8EBECBCF26E1AFD0B2EED /* SentryExtraContextProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CC76D57708D57F29242DD18FB0D613F /* MIKMIDIMetaInstrumentNameEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEA6082BF4F36CDA50F064854D137E4 /* MIKMIDIMetaInstrumentNameEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CEF49E60D3264D36F6C09E606194989 /* SentrySwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 902956407F04A8529E31397B44044937 /* SentrySwift.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D3F10C8B51BBB027EA9F317B7ECE073 /* SentryCrashStackCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 17706ABCFF2B9D6491443187EFE9D6A4 /* SentryCrashStackCursor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D4B3321165378F9C5187B0097F0A0FD /* SentryCrashReportStore.h in Headers */ = {isa = PBXBuildFile; fileRef = B4B51596D6FEA1B245A3E64A6B90B049 /* SentryCrashReportStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DB3EF8DDB1C9480E817A51EA23B84F4 /* MIKMIDIChannelPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49657FA527D4E8591335FF1E1AFAAE5B /* MIKMIDIChannelPressureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DB81C1B9D51A0523931BE805BFE6726 /* MIKMIDIPolyphonicKeyPressureCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2AB6125CC6084004F9016FA3EA7FA2 /* MIKMIDIPolyphonicKeyPressureCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4DE070DFC7B193BAA5D4ECC976694B27 /* DDRange.m in Sources */ = {isa = PBXBuildFile; fileRef = DE1371E30EEB0E988CA1463D902B91DB /* DDRange.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4E34B6C27C0550AF72D4DED05245A8AA /* MIKMIDISequence.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FBEA235F7AEFE3EA2731A3825ED6AA5 /* MIKMIDISequence.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4E9F4169DB76CA0C5D9DFFAD304009FC /* SentryUserFeedbackWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CA33A799DE7529D5F98E4C436AB560 /* SentryUserFeedbackWidget.swift */; }; + 4F53D7022F4BC050FAC5A751CBB7EBD3 /* SentryAutoBreadcrumbTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 986E4537FEEC81A4A92BB801CC5F32B8 /* SentryAutoBreadcrumbTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4FA1876845E381F4065C373A27D563A4 /* PrivateSentrySDKOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = BA461260B836E1856DD2B51049D06618 /* PrivateSentrySDKOnly.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 514909C2C2CF6CFFD20EF2F6BB85DCD6 /* SentryDictionaryDeepSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = F3FC80C3ADCA7662387A1DD3DD181EB2 /* SentryDictionaryDeepSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5198B5EE6E28908502B767C6CD4B4799 /* MIKMIDIUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 58FE9CD444F12E26D56766FA813434B9 /* MIKMIDIUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 519CEED96EFE47F03FFA19E47215BFE8 /* SentryCrashMachineContext.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A993FFD99C1A626733F459F61F8C910 /* SentryCrashMachineContext.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51AE367B20B039F2E20155A53F01FA19 /* SentryRedactOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2723DF245A3E8BD4D7727FD8CAC6C354 /* SentryRedactOptions.swift */; }; + 51C1CD43D1609FED3B4CC16D20E43F2B /* SentryProfilerSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 985518D47F23D213ED423113D40FE92B /* SentryProfilerSerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51CD1AB7A35E37A0F9A431F2D32E658C /* SentrySDK.m in Sources */ = {isa = PBXBuildFile; fileRef = 997616B6DA81D6F3C87407FFF729C3AF /* SentrySDK.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51E10FF0812F90C312014791A977C4F9 /* SentryCrashDynamicLinker.c in Sources */ = {isa = PBXBuildFile; fileRef = 529BD936C9CA23DDB0ADE2706EE53592 /* SentryCrashDynamicLinker.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51FAD1611EF36C8A6E739C430CEED406 /* MIKMIDIMetaSequenceEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D1626E41ADEADF114F1B496238C1581E /* MIKMIDIMetaSequenceEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52088A14CA7BC6AA47349669D2ED8FB6 /* SentryCrashCPU_Apple.h in Headers */ = {isa = PBXBuildFile; fileRef = 052C710A729B965AECEC546BF9942B0E /* SentryCrashCPU_Apple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52660B315ACF7F2547332D40284AD616 /* SentryConcurrentRateLimitsDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = D47E5153895B6B7A14604DABF446B044 /* SentryConcurrentRateLimitsDictionary.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 52D6FECF92B3511D90AF4B06972D3814 /* MIKMIDIMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = 63287F7C271956C517D8C46F44A34241 /* MIKMIDIMapping.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 530CCA47660BF96C104146392069C3C7 /* MIKMIDIProgramChangeCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B1CD29CD7DB33C3F051C16EF7D89E21A /* MIKMIDIProgramChangeCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 530DA3E0A81C6288672E056A239DE9C7 /* SRProxyConnect.m in Sources */ = {isa = PBXBuildFile; fileRef = 53BD21DB8B784C65C60DC1CE6061B8FA /* SRProxyConnect.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5394FEAC8A59769CA4963EA48BDF342D /* MIKMIDIMetaLyricEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 54BAB3ADC8A9F3AC4D2770B544D2CF86 /* MIKMIDIMetaLyricEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53F9AE497D1E175CFCE3FF58F4397C56 /* SentryCrashFileUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 73AB4DDC65DEBE301AF3FAB0EA7D01DF /* SentryCrashFileUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 544FBF77F31503611AFC8F290266A752 /* SentryBaggage.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F0A7A9FD76E7239DF27262BBD31705 /* SentryBaggage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 550B9B9DC54D1BCC715BB6677EC0776D /* DDTTYLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A5AB178CB948A92A61BDFF58CFE8020D /* DDTTYLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5570C2FB870631B2613416D5856FC7D5 /* SentrySwiftAsyncIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 077CDD946DE2806683A1D4BE19AE5018 /* SentrySwiftAsyncIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 55A55113CA838F6E706FEE11D23E294D /* SentryDevice.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABC9ECB062E169D711AADAD1B4338F85 /* SentryDevice.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 566ACFAA6B7539A45CA47E2AB35FC728 /* SentryDebugImageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C0C717F70AAC5FD32FA303A355692468 /* SentryDebugImageProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 567E6DC3F65E327C49F1C6444145E58F /* NSURLRequest+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B31AFAB139B55E0B8A0137989929E2F /* NSURLRequest+SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56ECDF79E74D7F9C25F35CC830B06209 /* SentryCrashC.c in Sources */ = {isa = PBXBuildFile; fileRef = 69213797A356DF8976DD7F1F04E08C83 /* SentryCrashC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5750A571AD72B83F60BA260921405B9C /* SRIOConsumerPool.h in Headers */ = {isa = PBXBuildFile; fileRef = C2D924384BDE40B5F9255F8541416BC1 /* SRIOConsumerPool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57627DC3E3FCBC3FB3F2DA0ACB06FF3C /* SentryWatchdogTerminationBreadcrumbProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB507D998AA7F2F2A28634AA05F2537 /* SentryWatchdogTerminationBreadcrumbProcessor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 579872A06F23B8418DF980CBD66FE6A6 /* SentryStackFrame.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4B133E75C9F7EBC7E643723106C3732B /* SentryStackFrame.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 57D4483A93634EFC37D152B2E9C7B564 /* DDFileLogger+Buffering.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EB9B39EBFD3DBC150D2AAEF6478AC81 /* DDFileLogger+Buffering.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5847CFDD951F769348FBEC28BDA1E9B1 /* SentryEnvelopeRateLimit.h in Headers */ = {isa = PBXBuildFile; fileRef = 551BB35E3C712DDA178DACCABFA43A21 /* SentryEnvelopeRateLimit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 589EAF2965E1B9213E139860498714DA /* SentryCrashNSErrorUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FDCFBC3FB42F10C63DC2479E301672FE /* SentryCrashNSErrorUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 598163AD12989A31730BC7F36BECD943 /* SentryEnvelopeItemHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = D296C27301789D3757AB682A2CF42968 /* SentryEnvelopeItemHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59953D5C46B2E90DCC0CF679683C869E /* SentrySystemEventBreadcrumbs.m in Sources */ = {isa = PBXBuildFile; fileRef = 01B63CA809BEF8900F931C9747D4F055 /* SentrySystemEventBreadcrumbs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 59DB79E4198BE78C8941AA1FBBBFD4FC /* SentryConcurrentRateLimitsDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = D509789FAAB3D35278CEC34975C1AC73 /* SentryConcurrentRateLimitsDictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A86F60FBD9E2DC2E07E99915D8DCC2A /* SentryCrashIntegrationSessionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = EA27E5AA16C18B31FA6F0E5F3E0E6CD2 /* SentryCrashIntegrationSessionHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5AD11295C2BF27DD6FF87B9B39245D85 /* SentryLaunchProfiling.m in Sources */ = {isa = PBXBuildFile; fileRef = D42942DBAC112680AC9219076B4DD29E /* SentryLaunchProfiling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5AE33F40063F5BDF66DB1371049C7B5D /* SentryAppStartTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B36053CFFD2CC74E756799F68DD1E21 /* SentryAppStartTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5AF145AA310DAA5F2FC25071882C6922 /* PSWebSocketDeflater.m in Sources */ = {isa = PBXBuildFile; fileRef = F58A384DCA1ED1FAA4272D7D7D2BE088 /* PSWebSocketDeflater.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B42EBD5386739E3103EC15161507F7E /* SentryUncaughtNSExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0179E9161467D79028511F818361982 /* SentryUncaughtNSExceptions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5BAA8681DB79F37952A5C24AD3CBD23E /* MIKMIDICommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D513CA96F29F44A4E6158DC7AC257404 /* MIKMIDICommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BBC77CB766D3C47D37F194F9A1C589F /* SentryAutoBreadcrumbTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F9E586137C66364ED6A0E3E9EDE5CD /* SentryAutoBreadcrumbTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5BD9319BFFF7E6F98EF781E465A4E099 /* PSWebSocketDriver.m in Sources */ = {isa = PBXBuildFile; fileRef = 882A838E208D86B393D611DC290E199F /* PSWebSocketDriver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5BF3D4B5C5334360BA48D00CF40D27BB /* MultipartMessageHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = DDBA0B5951D9B5655132C777A476E711 /* MultipartMessageHeader.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5C9FDFF8B9DA00BDA1B6B8059C399D36 /* SentryCrashObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CBAB854066F69496EB0245AEFB9F8A3 /* SentryCrashObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CA9C869C0F56E01F8CB200159708239 /* SentryTransportFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 04582A5798B98EB4AF71CA40FF4EAE81 /* SentryTransportFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CED2A98414D23D22A201E217C1BA2A0 /* MIKMIDIMappingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C9000C70F5BE4EC4A7A9436C81032EE /* MIKMIDIMappingManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5D37732502748A0BF79C11C5D87918D7 /* DDAssertMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F2DFA25283C5C7C974020B2A3E4D741 /* DDAssertMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D43D131D69DE123CCB992D1A0BCED2D /* SentryCrashInstallationReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BFF15B851B2A7FC1CC6A5D740D06724 /* SentryCrashInstallationReporter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5D9F74BF330632C883018C742E94C54E /* SentryVideoInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009C928869658FEE95DB027504142E72 /* SentryVideoInfo.swift */; }; + 5DA6E9EAB543C34BAB1AA4BF6EB7FEDC /* SentrySessionReplayDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E93EA72DF2CA700E681C64D9FF5F5FCA /* SentrySessionReplayDelegate.swift */; }; + 5DA7AD7B2578090D81023B1BDB3BEF8A /* MIKMIDIProgramChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AB7555D58C8F1A07489012ACF5A22AB3 /* MIKMIDIProgramChangeEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DEDC4BBB3E2D60503A7B10A689CFFBD /* HTTPErrorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = A94255A3E7159FA9B09AF83105A389D3 /* HTTPErrorResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E2CA1EC0C0FDBD85A231BD0E8A23049 /* SentryTraceHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = FD87772C2442EFF67AAC22A28D5384EE /* SentryTraceHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5E46F108099E29D550C9C6F3BB1B8E08 /* SentryCrashMachineContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D3FD570912E77AB7BCCBB5C3A6E8F7F7 /* SentryCrashMachineContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F6060210E7AE96D78DDE36B423D1FED /* MIKMIDISequence+MIKMIDIPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A2B776772C8FBF5D97BDE4D1F46C274A /* MIKMIDISequence+MIKMIDIPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FB89591DEAEC81ECF254EB0D6ED5CD5 /* SentryCrashNSErrorUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 86B5524E4BF6E6FAF2E5040F120D7DCD /* SentryCrashNSErrorUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6132E39833C0B5752E42788AF7FFEDFD /* SentryInternalNotificationNames.h in Headers */ = {isa = PBXBuildFile; fileRef = F7A1D95754B6C14BA494052EE52F8FE0 /* SentryInternalNotificationNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61F591259210DDB9B38281D1DA7B5372 /* HTTPDynamicFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 31078F47E86FF15C7DDD14551671A52F /* HTTPDynamicFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 629DB43B6857920AEEE5B92B84CC52AA /* HTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 775D797FB9E9557643EFF7E556A79580 /* HTTPServer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 62AE5A443BE9F95115B1DB82A227724A /* SentryHttpDateParser.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3602E5F6455132F4E292E10674FA06 /* SentryHttpDateParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62B39DDA61B6FFD30FE53204B2A3F1EC /* MIKMIDIMetaTextEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6951F73B50642A08DF568AE1C79853AD /* MIKMIDIMetaTextEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 62E4952E25CDA63102A0F02B92EB62E9 /* SRSIMDHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 9561FEDBADF0DECE998FFC6602D09873 /* SRSIMDHelpers.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 63ACFC367A6861FDFEAD52BF8E419F92 /* SentryTracerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C6769C935F89ECA02D9BD5593B5893F /* SentryTracerConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63D38AC88CD2316503AC6E87E062F41C /* SentrySpanId.m in Sources */ = {isa = PBXBuildFile; fileRef = A507AE1FFF1F537AD1D200F9331240B3 /* SentrySpanId.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6445C54655FEF992C4600D056DD044A6 /* SentryUserFeedback.h in Headers */ = {isa = PBXBuildFile; fileRef = B67906939A2348172FE9659844C6747A /* SentryUserFeedback.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64532BCE0EB1AE6F867DE0CEE7B82F2B /* DDAbstractDatabaseLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C00FF6FD698FA69CCE76C46B9EC0F13F /* DDAbstractDatabaseLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 648B66F5A81712D1D9C98C09BBF7495A /* SentryCrashMonitorType.c in Sources */ = {isa = PBXBuildFile; fileRef = E3DCDA102369CBCD7C8D59D754E876BF /* SentryCrashMonitorType.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 648D6420F4A5EB2AAFE8BCAAAFF958C1 /* SentryCoreDataTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 1431BA8DEB4E4CA7127C1CFC41D57E98 /* SentryCoreDataTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64E26413681664AC9DD1E5548D8995E5 /* SentryLevelMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F335B1294D313270A41CD72CEF2145 /* SentryLevelMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65E864AB8E1879AC0E6286770FE554EF /* SentrySessionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = EF16DC366ECD6B929DD0A891AC53C431 /* SentrySessionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66C87B1B432B0CCCBB81D7D8973EE53D /* DAVResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3158D2A9B45ADDF2C26131EEADB1C3 /* DAVResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67F32CBDC9E4C4C07884A18C076A363F /* SentrySerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B0FA1FE890CA999B3D2831011107B2 /* SentrySerialization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67F835B610EBF86D4CBCC45D30265BEF /* PSWebSocketInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = A5AD88F533B61B658F9EB29DA79E16B4 /* PSWebSocketInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67FA663C1BBEBEF50B9089F8FB49418C /* MIKMIDIMappingItem.m in Sources */ = {isa = PBXBuildFile; fileRef = AB801297707EC98AAF57E7099565E70C /* MIKMIDIMappingItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 680C3EA1C264B63649D9DA58C3002EB8 /* MIKMIDIChannelPressureCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 1087416496E799B6528187BE45604779 /* MIKMIDIChannelPressureCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 684995CB6B19ED3B902C08858C8D76BF /* SentryCrashMonitor_MachException.c in Sources */ = {isa = PBXBuildFile; fileRef = 06F3584AC84A12B554C65FA97E890322 /* SentryCrashMonitor_MachException.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 686F534846F9A3A7BA9BF4E9CA9D87AE /* SentryUIEventTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 0056FAD39DB21391884A09035A6D2260 /* SentryUIEventTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 68FEC5CCB2C72B7BFF8E8F36D33E5F8C /* MIKMIDIEndpoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EED0E8FEBC8F02EC06C7204F93A531E /* MIKMIDIEndpoint.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 690AFDF2CF55CCA402ED31C6E236825F /* SRDelegateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 13D198ED86F2FE058B09CD420BC7D3DB /* SRDelegateController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6952FD3CAF70E936FCDE885DEA4041FE /* MIKMIDI-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB3F04F0E8D8DBC552EAD1DACCCE390 /* MIKMIDI-dummy.m */; }; + 6955DBACDFA4AD17CE0F4652D0614B5F /* SentryCrashSignalInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = C9EA8DFF457592E0521C7DAF988E0AE5 /* SentryCrashSignalInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 69C3DC99C6EF834BA4447A5F14FD988E /* Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 651FC660333B7E155A3F1DF14F8EFE3B /* Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A2DA1140E1C59FB7551F1EC5EB434DB /* HTTPRedirectResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C23ECB572E61FFE01D598EB4E8152380 /* HTTPRedirectResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A421CE76148C52C60DBBAA7663ADC72 /* SentryRRWebVideoEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3811493C5079B9277374661C1B287BE6 /* SentryRRWebVideoEvent.swift */; }; + 6B41CF17071AC0458E163A0A5271049C /* MIKMIDIChannelPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D26CD688523F3C57213401EFDD1E301 /* MIKMIDIChannelPressureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6B4C40DD939A71693DFB8966F1092EE9 /* SentrySerializable.h in Headers */ = {isa = PBXBuildFile; fileRef = E5BFFB554D6A95231397D224FCBE6847 /* SentrySerializable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6B8D3E0785F0D208365E0F4F3D895F4F /* SentryWeakMap.m in Sources */ = {isa = PBXBuildFile; fileRef = 760534382C7512D529F3B65DE1CAB4DF /* SentryWeakMap.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6BD8D80456CD17ABD0FEB27B88E2085F /* SentryInAppLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = B45463C44779423861F8CC9A10EC1DE3 /* SentryInAppLogic.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6BD9FF57858F18702D417E85201D29E7 /* SentryNSError.m in Sources */ = {isa = PBXBuildFile; fileRef = 21F3C8C2EB62EFEBD3CAE9816B2EC59B /* SentryNSError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6BEC412A3A3779DEAB2BD46D2D7A3CBA /* SentrySubClassFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = ED8E8998B575E9D0F374F5EA95BE52A3 /* SentrySubClassFinder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BF830C7A5429B98971A1669630B5FC2 /* SentryDiscardedEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 270072B02CEC084041BDFF3F0A1E34D1 /* SentryDiscardedEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C39E30422269DB3C21C80C962864DEE /* SentryThreadHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A9B972E4B599D01FE20772DD4F8BA84 /* SentryThreadHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6C87792F1A0D3DED303771B5544A72B6 /* SentryTransactionNameSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = B592BDDEDC3B796CD7CDA4B41FDB78BB /* SentryTransactionNameSource.swift */; }; + 6CB2E6C4235B35D01253874F2B0811E5 /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 41E0EE5B81F67811FF6BBAB9FCEC3D9D /* SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6CC2AC4C45E9B16B8FB2CB73E7F12F12 /* SentryCrashWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 87F5310C509B09820467AEA5E83F6CF8 /* SentryCrashWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6CDB926EDE842BC204621E7FF25D183A /* SentryMechanism.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8EC61D3FC344869A3B369946567D11 /* SentryMechanism.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CDC88BEF61128BF470EA1A95924D34A /* SentryAsynchronousOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E014C597F8503F3B805C5BEB3188CD /* SentryAsynchronousOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6D0A6430EF121BCFFCD92FD460A823AA /* SentryBacktrace.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F3A56A23F6EFD3EFBD6A052CA289D192 /* SentryBacktrace.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D883D6EC60DDF353C200B5F4A25A55C /* SentryByteCountFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ED19E4EE016DE9514B8B1AE8519B346 /* SentryByteCountFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E70BFBCA92E1DE309357AA07B06B406 /* PARImage+ASCIIInput.m in Sources */ = {isa = PBXBuildFile; fileRef = BF667EDBB3DA39863EDE12CAA2B28907 /* PARImage+ASCIIInput.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E7F58B39A7E6C3BDF3E69E6D7452EBA /* SRLog.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8D88F1B3F79FA718713A3C5570F7C8 /* SRLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E9A6AF1720E8D0ACF308A01C0CB6A2C /* SentryMetricProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 99DE7F77081A82AE48E64A4BCA50341F /* SentryMetricProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E9BAC7146680E56D286CD2EB60F93D6 /* MIKMIDIMetaTimeSignatureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E23E22E62E2A7F4D4F2BEA5A464291A /* MIKMIDIMetaTimeSignatureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F442478CAC7A7AEC478C22A0E5DD144 /* DDFileLogger+Buffering.m in Sources */ = {isa = PBXBuildFile; fileRef = C6FF17B0A7EC7476265242C8863FFC42 /* DDFileLogger+Buffering.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F57F8043E82EC2163001AB59E8D2B82 /* SentryCrashStackCursor_Backtrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D1574FE7064E811BA1B58710A68881D /* SentryCrashStackCursor_Backtrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6FE970D519428BB1002C9F9A8926D2BA /* SentryCrashStackCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = 21B8F0B5D1D07D21B6B362F88AADDD0F /* SentryCrashStackCursor.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6FF00D052063657027C317F3101B5FE7 /* SentryEnvelope+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F18BD9D2EDB8D81CF9CF6796E591E4 /* SentryEnvelope+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7031DAEA38770B817B29CDE10FE97189 /* SentryAsyncSafeLog.c in Sources */ = {isa = PBXBuildFile; fileRef = 618BA3247A099BAAF9854B99AEF2D19F /* SentryAsyncSafeLog.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 70338541632BDCAEFE61A723B52F5FEC /* MIKMIDIDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = D032E95436882CA6ECA90FB922DBF041 /* MIKMIDIDevice.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 705AE823CD9CD9A822179C9B5BA7A5B6 /* SentryNSDictionarySanitize.h in Headers */ = {isa = PBXBuildFile; fileRef = CE986B0045E01CEBF67692FF3AAE6D94 /* SentryNSDictionarySanitize.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70EC8DFDC86C4D54414CDAB6BAA5BD22 /* MIKMIDISynthesizer_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = F12E9481DD93967AE2BA14DA96910E21 /* MIKMIDISynthesizer_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70FED50858F4C266023349A334019901 /* SentrySessionReplayIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ECF7428D7D48B6B324E1A1B692CEF6E /* SentrySessionReplayIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 712B98F4B7C2DEE3D950918A4A4C2E00 /* SentryInternalSerializable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3397846B7AA2F27310F47D9DADD93BDD /* SentryInternalSerializable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 714609517C95A04D4E4755F76D2F2141 /* SentryUserFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = 6057AFB6E368501A096D36AC5200D8CA /* SentryUserFeedback.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 714D05F3F9D8E25415836ECE5CDAB6E5 /* SentryCrashVarArgs.h in Headers */ = {isa = PBXBuildFile; fileRef = 82A8708C9020A49A576D394A78F672DF /* SentryCrashVarArgs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 714E8A01D489A240F880EB118C7FF302 /* SentryMetricKitIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FDB48DACB41173A07478A764B92A88A /* SentryMetricKitIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7156A3E681EDDA522653498654495409 /* DDContextFilterLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 25EC2FF8F3A2BFF1EA380AAD477C9303 /* DDContextFilterLogFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71809BC9F599918E42685BD09D73586B /* SentrySample.h in Headers */ = {isa = PBXBuildFile; fileRef = 6994371A271453DE37CF3696D10832D3 /* SentrySample.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71D9DD39A3413609AE1C79DD14C16A00 /* SentryBreadcrumb.m in Sources */ = {isa = PBXBuildFile; fileRef = B9989CED3E978FD838B8906F4484F0E6 /* SentryBreadcrumb.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 723A548F857E46CA2295DDDA9A3B5FBE /* MIKMIDIMappingGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD57E13BF3AFECEC395FF68062C78BF /* MIKMIDIMappingGenerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 725B4176A1B7E145CA1CB4EA59561113 /* DDASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7658052A9D7297CDB1CCB186BBC436 /* DDASLLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7271D2BD55282B6244119D8CC700D52A /* SentryHttpTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = E2DDE768164BFBBE68483A76040892BD /* SentryHttpTransport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 734E9E5A31C9C08AF2D61371CA4E5392 /* SentryCurrentDateProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07610E46341931ABB56277836339F2E0 /* SentryCurrentDateProvider.swift */; }; + 7352CFF94CA206DA0C39D25C4D662D3B /* SentryCrashCPU.c in Sources */ = {isa = PBXBuildFile; fileRef = 1D9AD3508FB5D236DC14882B18CEF9FB /* SentryCrashCPU.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 739CE79C098376B15F02D2AFA56847B7 /* SentryRRWebEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11617A193A6E07D8C0F5EDD6B18C9EAE /* SentryRRWebEvent.swift */; }; + 74112F0D37026C535EBC0C6527D7C551 /* SentryCrashStackCursor_MachineContext.c in Sources */ = {isa = PBXBuildFile; fileRef = 2A810B627FDA462FCDFBFB1A545F216F /* SentryCrashStackCursor_MachineContext.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 74584E05868E0E034738944FC7064A5D /* SRMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 1252F3C09544319DC7D7C7BEBB6BA6C3 /* SRMutex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7462487FD704DC919243F805CE086C84 /* SentryDependencyContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 899A467E33D23B3C4851C216969A646F /* SentryDependencyContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7485F686B1AD019F0CB734A6AE0E05EA /* MIKMIDIMappingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C918A36C05882B46F306016F09316ACE /* MIKMIDIMappingManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74F0294750FE60C2969E909667F02A26 /* DDFileLogger+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E6086857AE4642BBC4787C78C287E073 /* DDFileLogger+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7502DA9B14D64B19E461975885C1A9EA /* MIKMIDIControlChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D62045ED6EEB4A5B2EB20E85A5194BD1 /* MIKMIDIControlChangeEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 751CD6ABF66107DE5240DAF30508CE23 /* SentryCrashIsAppImage.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E9BBD3D4A8A0CDF9A463B13B6A4DE0 /* SentryCrashIsAppImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75917C9B7FD49C31D4A27477ACAABDA6 /* MIKMIDIMetaEvent_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = BD5FD0ED28F5B03F8693B93FCA798D73 /* MIKMIDIMetaEvent_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75BCA99C1A8D300CB661ECD24739B730 /* MIKMIDIPrivateUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D041180E7BB7625A1791279021F5EA /* MIKMIDIPrivateUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 75FBF22CA1672D6BCB38CF186549E59C /* SRError.h in Headers */ = {isa = PBXBuildFile; fileRef = 7727B987F0339C867323875120AA4E95 /* SRError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76394FC98C42A7BE3BA5B7B48FBF2F50 /* GCDAsyncUdpSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DE302533817BAEF9AC01B8EE7198ACC /* GCDAsyncUdpSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76482762B19BDD94AACF28EC4321CA77 /* SentryFramesTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = B46ED8FE1059606448A598FAFA916B0D /* SentryFramesTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7718629440F8DFA7E0C0A5592F1D4C0F /* SentryMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 274B1CED1B8D4CD6287750407D5E4D63 /* SentryMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 77633941F4B5FAA47F24C4B2E624A9EB /* SentryUIEventTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EA7FCD80FE5A77CCF48BBF5C05D6DE0 /* SentryUIEventTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 778414292E99FECAECEC6D90D872235A /* SentryCrashReportFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 59824770943737B3409AC9C6DFB353AF /* SentryCrashReportFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 785B303EA8DC3EDFB124C5D53ED1CF2A /* SentryANRTrackerV2Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E645006E8D8EA853F704FC02A697714B /* SentryANRTrackerV2Delegate.swift */; }; + 790616F2E775411F7860D1581CC3914A /* SentryFeedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EF38338515091AA4C76946C8DDD9DE /* SentryFeedback.swift */; }; + 798A10AC6A07FE99F37F45CB9130B924 /* SentryEnvelopeAttachmentHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 001F7086DC38609BA43D840DA7572E9B /* SentryEnvelopeAttachmentHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 798A7959006E2882AF3A62A1AC035022 /* SentryCrashString.h in Headers */ = {isa = PBXBuildFile; fileRef = B1EC6104EB05DF5001CE063BDC2968A9 /* SentryCrashString.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79954EFEA4833B949D6148D9A278B22B /* MIKMIDICommandThrottler.h in Headers */ = {isa = PBXBuildFile; fileRef = DAF311B7298EBA625A098E822CBFA2EA /* MIKMIDICommandThrottler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79E2C079AD5D7D76E495E1098CDFF745 /* SentryDiscardReasonMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 31B0FEAEE80615E6DB6CC8F99175C4D3 /* SentryDiscardReasonMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79E971F26CDA18124BCA9D46E3074FB1 /* MIKMIDINoteOffCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 48C1F65A6C505A7160B6C24F20026139 /* MIKMIDINoteOffCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A3D2384B5C5B31DB8BBD32F318338E5 /* SentryCrashScopeObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 7854A8E688C6F9AFEFB2DC1F553A3A36 /* SentryCrashScopeObserver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A97AFCF017C074429B22B2C3871C8AA /* SentryCrashDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = B3D46ABFCAEA12066A55E4802173859B /* SentryCrashDebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7ABBB1BD8B41F91F6183B625C6B4715A /* SentryNetworkTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 61D0FBF0FB9B0DD0B15F5A65A023A765 /* SentryNetworkTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B1166FA08499A5AE0D42F34528E091E /* MIKMIDIResponder.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C0C431DAD109DCB31F56A6A04807B7 /* MIKMIDIResponder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B2B8A754FD5005F37B64DBB8105E57F /* DDLog+LOGV.h in Headers */ = {isa = PBXBuildFile; fileRef = 40123422A0F14609043890ED9DE59B5D /* DDLog+LOGV.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7BC4909EA8A2B2C0641CCF74DA25757E /* SentrySessionReplayIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 69FC9A493447CC0C47EFDB9709BF76FE /* SentrySessionReplayIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7BD5105FBB8A405DAFB92F30D4B9344F /* SentryCrashExceptionApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = C65029C2756339F4165691E5C7F116EC /* SentryCrashExceptionApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7BF9819222E50CC390E4ECD046CB793A /* MultipartMessageHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = AA8E00185B4941FC407C5504DD539958 /* MultipartMessageHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C31888C2D70E9AC60E76D75008A0858 /* SentryCrashCPU_arm.c in Sources */ = {isa = PBXBuildFile; fileRef = AA883C425153F298787046063BC18C7C /* SentryCrashCPU_arm.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7C43EDD590F70BEB1A2EF86148532E74 /* SentryThreadState.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E5C966A0EC914D5EE46BE39ABE8CBA87 /* SentryThreadState.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C5DB939D5F8D7A9B0C3948CDF249663 /* SentrySamplerDecision.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B29681374060812EA7A9A552877F72 /* SentrySamplerDecision.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C76D8A9EC8BD88A465BA0F4565D0227 /* SRIOConsumer.h in Headers */ = {isa = PBXBuildFile; fileRef = 536908CAEFEA94317FD61C71ED227435 /* SRIOConsumer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CF883007AF93267CEBF23E39D5C995E /* SentrySpanContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB06B912B54A368FD5987358A227924 /* SentrySpanContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7CFA826169499097E738541E4AA461BC /* SentryCoreDataTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A47CD6102F516A4E7022AF905006C88 /* SentryCoreDataTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D2CB2ED5B88E38CBF73551280BEE5FB /* SentryUIEventTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = A43554692DE28A726723B5003DB600EA /* SentryUIEventTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7D8E2210314ADDF5ED52B9D24C6A5D5C /* NSLocale+Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A9B133D6CCBF73D42C4AC6FFC8C3C7 /* NSLocale+Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D9955FEC2214678160DFDC8A13557A0 /* SentryDefaultMaskRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A63DCE4981065611C31C7EEDE8BD21 /* SentryDefaultMaskRenderer.swift */; }; + 7DC1637F90466D5F8ED0B91E6B106B0E /* SentrySampleDecision.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D479123FFF32CFAE54A474073412A73 /* SentrySampleDecision.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DDD13C0777D2229E466EBF7688572AB /* DDRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 308889CAB3F4EF7E155B8902D89C91BA /* DDRange.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DF4E3F1EBC3795AB688628F8FBC89D7 /* SentryHttpDateParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 767046EE68FEA336E72AB909244174BD /* SentryHttpDateParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7DF6D0A2F297B57F6747CDA55793F6F1 /* ORSSerialBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = D8CFE95C10F85D5744A16D3D436C0AB4 /* ORSSerialBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E4AA5034D47773FB697CB22013A8970 /* DDContextFilterLogFormatter+Deprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = A20F896728D6C7FFA53B17ED560FB95A /* DDContextFilterLogFormatter+Deprecated.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E57DFE2833B18E191D692982600B90D /* SentryCrashSignalInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A5CCFEC704FA755C8CE5B212BD31D8AC /* SentryCrashSignalInfo.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E61C110A235BC1F546F5F26C8F19DC0 /* MIKMIDIPitchBendChangeCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 74A74CE5079B3CEE1D1525045572CCA8 /* MIKMIDIPitchBendChangeCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E92285B6980D8611C07B086D0D9A7CD /* SentryDispatchQueueWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = B98C7CD492E48CAA488CDB124B649F1B /* SentryDispatchQueueWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F320E750150374D09407061DEB52007 /* SentryTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = C34BC0893A5319CBEDC74F1CF83EFEB6 /* SentryTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F3429D0C372403C5B91DFF410FCADDA /* SentryUIEventTrackerTransactionMode.m in Sources */ = {isa = PBXBuildFile; fileRef = C623F9BD27CF3F02A1CA571BE5BC8D56 /* SentryUIEventTrackerTransactionMode.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F8E39D860A3C6343B689AB0E30489D8 /* SentryRRWebCustomEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25800E26608878D462E3E6D61075B16F /* SentryRRWebCustomEvent.swift */; }; + 7FB077E3DB68D41334CE14432B5EBABA /* SentryCrashStackCursor_MachineContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 579C1987961701C3DC34E4669A1ACAFB /* SentryCrashStackCursor_MachineContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FEF1581184DD7F158F99B0B2038F1EC /* SentryEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EAFF0A1D72037928F26DBD4A5F15241D /* SentryEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 802102197EEE0C3E91B8462326E6C134 /* SentryOptions+HybridSDKs.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D72DCE8B696F2B887D26F23A9F6C13 /* SentryOptions+HybridSDKs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 802CA6A06F750EA52C62072A6E81BA85 /* SentryThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF723904C58EEEBA7F0FC57E76F60F1 /* SentryThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80F65A94BD5ED2FD87C79B4605F0A187 /* MIKMIDIMappingXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 17268AC0F413736F6F8B9F5131871622 /* MIKMIDIMappingXMLParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8133BE5E77DB050F8439161CF18E38EC /* SentrySpan.h in Headers */ = {isa = PBXBuildFile; fileRef = 004E9D8F0572D852FBD4217E5F36B340 /* SentrySpan.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 81743B70BF84A5BA22E1C09800BA1C81 /* SentryDateUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 29A677004F9648AD355A23D448EE6FD5 /* SentryDateUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 81994CF4D7E7F3F442B2F404D1F266AE /* SentryScopeObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E0D3724E4DDE5EC0334CDA4A188BDE /* SentryScopeObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 81A6F16B34305FB016A1D699A22B49D2 /* DDLog.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6641C0DC7F6E2AD573E98FF67F2250 /* DDLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 820C7EA3A0E195216B2CCD0E64132A65 /* SentrySdkPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F50E054F032942659168740045E84AE /* SentrySdkPackage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8220DDFDA75BCE40A803D01D742F06F2 /* SentryFileIOTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FBA08D83020FDFD54F1C1ADC2A0B1E5 /* SentryFileIOTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 824FB54D2E4F52A60CB32FF2B7C9669C /* SentryProfileOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BFA36DAFE25C26848B65D5B9546792C /* SentryProfileOptions.swift */; }; + 825B97241F59486F4965BFACC02BCC45 /* UIRedactBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 380720F289D32D2C48334147581D9570 /* UIRedactBuilder.swift */; }; + 82AA025D5EC1A58C8902EEECFE1DD8F7 /* DDDispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1085C147BBBC7A7D064C8ABF3C624BB8 /* DDDispatchQueueLogFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 83436E7F485E6FB69B5CA0B2021CEF93 /* NSNumberDecodableWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 886D98EC2DACD7E9BB813F7239EFAAAB /* NSNumberDecodableWrapper.swift */; }; + 83C8FB1FE8204891F235E32F4C5FE667 /* DDOSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DE46C7F5C1073736EAFB7016C204EF06 /* DDOSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 843D29C61967D764CB26D8B64F212DCC /* MIKMIDIChannelVoiceCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 856EF9D8335163A11F7B46D310CBA477 /* MIKMIDIChannelVoiceCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 844DEBC61B0342ABA886750E77C21D2F /* SentryDebugMetaCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83EF69E0F85672AAD70D4BACA3CC92DB /* SentryDebugMetaCodable.swift */; }; + 84D72E6B546B624A0C3EA8B3E7CAF0CD /* SentryNSURLRequestBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 78205A92F2839CDC4A1C28F0B7B7F6CD /* SentryNSURLRequestBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 84F2B66DF57F5671118118F041B2F0AF /* SentryCrashReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DA0945F044E57FC4CE6EEC35A93D13A /* SentryCrashReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 84FE3267ADC7A81F76109E6E6A375E62 /* SentrySessionReplaySyncC.c in Sources */ = {isa = PBXBuildFile; fileRef = CF8FF95516B2F152E962F6C71C3ED8FB /* SentrySessionReplaySyncC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 863A28C9ED354C2A3DA2911A96EEBDA9 /* SentryTraceContext.h in Headers */ = {isa = PBXBuildFile; fileRef = A4BAAA8F7F968CA32CC27AFA6CA33C47 /* SentryTraceContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8643068EDE480015A6A7A5B022B67373 /* SentryEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 50320404BFF01F18A129183B0C337CCC /* SentryEvent+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 865D2AC9EB69681654F152C03FEF13D1 /* SentryCrashMonitor_Signal.h in Headers */ = {isa = PBXBuildFile; fileRef = F45B7DE827E13E28A3AE4A7445A790F4 /* SentryCrashMonitor_Signal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86741083FF5CB10DCBDDDCC8FD5B6B46 /* SentryPixelBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 316236D9C173411539F7E7F4A637842F /* SentryPixelBuffer.swift */; }; + 879E8BA3FD6E3FDF3EF5442378ECA03E /* SentryRRWebMetaEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F97689C32B053EC22D6AB6C52E6FB7B4 /* SentryRRWebMetaEvent.swift */; }; + 87CCE98BF330D500282C9A7BE96F32E8 /* MIKMIDITransmittable.h in Headers */ = {isa = PBXBuildFile; fileRef = 1683DFE880F3A8097F1B9B0DA5E27876 /* MIKMIDITransmittable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8856045DF2E34794AD023501E1761540 /* SentryUserFeedbackThemeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C823581AED4553C5C6E46D9AA85B4C48 /* SentryUserFeedbackThemeConfiguration.swift */; }; + 88947F2F6166DF0D259FC5CB00C9DE50 /* MIKMIDIPolyphonicKeyPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E02FBB38C1B1059795527F815E7FEF /* MIKMIDIPolyphonicKeyPressureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 88BC8167E31E32B58B96CA7AB46EBB45 /* SentryRRWebBreadcrumbEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22AB0FEDA7EAD5C85C1FDE15ED1A9120 /* SentryRRWebBreadcrumbEvent.swift */; }; + 88C659BEFC573D1B91C1E8469FC8522E /* HTTPErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DD846D611BF2B613C5F9750B9D84F66 /* HTTPErrorResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 88D660F6117AD3883925AFCAEF12E697 /* SentryUIEventTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 1786C01754EC8C5B78CB5EE6F0768E26 /* SentryUIEventTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 88D81A83423D0102AE97D62A188DCF67 /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3885B913C1E200018511545544082A /* SocketRocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89226711D6B5B6566E22FD36170707A5 /* DDData.h in Headers */ = {isa = PBXBuildFile; fileRef = E212929ED215DD544BD852B998AD94EC /* DDData.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89703597C5115A9B09976CE628C2BF13 /* MIKMIDIMetaEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 43EE2D0D8212F6A8B92C1170D5D4BAAC /* MIKMIDIMetaEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89CF02DB9E8BA69C1423B0AEA3694773 /* DDASLLogCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = DE3ADFBE83594B129C861552C701D694 /* DDASLLogCapture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A06C89C2D9DAA05DC5A18BE62042919 /* SentryCrashReportConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 430652E45105CAFD41539D0566D1445C /* SentryCrashReportConverter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A1022B711D2E3E22723D6B46789EC96 /* DDNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 469D7081C4DC34D2858E99DDFF2D0366 /* DDNumber.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8AC8F959DBA5217960C09F2125376934 /* MIKMIDIControlChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C7DB7E3E3283AFBE47ADA5332BA30706 /* MIKMIDIControlChangeEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AD9E152A0094613610ED99DB8E5B0D8 /* MIKMIDINoteOnCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 25876F8CF4AEE118E00C5841DCD5AAB8 /* MIKMIDINoteOnCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AE6BDDD3E5ED3E97801ADC5B5804366 /* SentryReplayOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F6606D384C7504B41F7E421FD83752E /* SentryReplayOptions.swift */; }; + 8AEA495A9FF62846076EE9197FEA32A9 /* SentryMeta.m in Sources */ = {isa = PBXBuildFile; fileRef = 6338BB028CB4769B232401C32BAB3B35 /* SentryMeta.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8B6E86C9F18754E4BAA06F66F5907F99 /* SentryDateUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 607EADC16855B1A779A3991C3A0EBFD6 /* SentryDateUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BB8F0120FFB945E23D50032840279B3 /* MIKMIDISystemMessageCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DA2CA87B777B7B3C88D6A8AB74B31EA /* MIKMIDISystemMessageCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C492199E4A91733DC02FF510103DB6E /* DDLogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E78CC11F2A5054C67E14DF1D11AAB22 /* DDLogMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C9ECFE161EAABFEFE5E2DF9D28AABA0 /* MIKMIDIDestinationEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 00F62D80A09A80EF0A76119764A3EDF1 /* MIKMIDIDestinationEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CD6891FF4A941DCAEC571C4194EFE64 /* SentryUIDeviceWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 102D810320BAED7D73F0F729F69F8E6B /* SentryUIDeviceWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CE8A5CF43DC81DB215B5815FCC8D77D /* SentryViewRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5C2BA3093CA54F9EAA36262AD80B8CC /* SentryViewRenderer.swift */; }; + 8CFF6946D8705337FF1A2DEDF0045064 /* SentryCrashMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DD887A0050B4A72475E9A589CEF0F89 /* SentryCrashMonitor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D0A97728D4E7AA9F0E582443858A5B0 /* SentryRateLimitParser.h in Headers */ = {isa = PBXBuildFile; fileRef = D8C0E7D478EAD9ED8B1713A1FF92DF9D /* SentryRateLimitParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D1DA889BE92BCD20990B488CFD5E91A /* SentryCrashObjC.c in Sources */ = {isa = PBXBuildFile; fileRef = ECAF569749A4EAF9881B2B361470A4C0 /* SentryCrashObjC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8D887EC0B7FC3D0455D1E6BFC0B12175 /* SentryProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2641BD78E03439DE79614893EF6BE10F /* SentryProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8DCAAFD61D80CD2FA1931C73B9A20E4D /* SentryRequestCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8787C7AD08C4D777BB7FC083F3099E0E /* SentryRequestCodable.swift */; }; + 8DE2B5A8C7B621F655940787B8FD6328 /* WebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = C251B86DA142E465F4DDED9F3D4235D9 /* WebSocket.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E71B7DD9B3A7EE7818B65876A2AA2D0 /* SentryCrashID.h in Headers */ = {isa = PBXBuildFile; fileRef = 637A79839224131C565D604C2DC3FCDD /* SentryCrashID.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8EC0F8825085F637BE0C24CEEB99F50E /* SentryEnabledFeaturesBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CF79A70E491771CAA0F27C87186FD64 /* SentryEnabledFeaturesBuilder.swift */; }; + 8EC7917CD6737FD6D8F96DE0A99975C1 /* SentryRetryAfterHeaderParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 56B0382EE064056D6F3A2E9B182CB2AC /* SentryRetryAfterHeaderParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F3AA0E83C0710647D7A712B72432BB1 /* SentryUserFeedbackWidgetButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A755AB12FF42EC1906EFDC999FD041D /* SentryUserFeedbackWidgetButtonView.swift */; }; + 8F53BBD31FAE5290937E2AFE93163CFA /* SentrySpanContext.h in Headers */ = {isa = PBXBuildFile; fileRef = F9767DDC70218C85369C2B63DB39AC85 /* SentrySpanContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F8131B7F9808353A92711BDC76D3AF2 /* MIKMIDIConnectionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F4F4F91847F1528BD31F55AC01268C /* MIKMIDIConnectionManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8FD688966CC01B9C1EDF7314EA428376 /* GCDAsyncSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF6421DE4DFF747AA5E89018265FB5E /* GCDAsyncSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8FDA14E207C3D80235CDBDDFDAC6CE2E /* HTTPResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 69399242B4A7FE5F37A8B1B13039D16B /* HTTPResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8FF3F3638C8C313DFF1C16B4BAF7F059 /* SentrySessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = C796AADF925BE2B926ABA6BD4279FEDC /* SentrySessionTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 900F35E41F2EB538CA505BE23DC52364 /* SentryMeasurementValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 78D92A19F8C2D52A0F66E8B6429A147E /* SentryMeasurementValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 90526CE02022E7BB8D5988682C5B7EAB /* SentryCrashDefaultMachineContextWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = D10C154DCC4EB4534D4CC64FC1750F16 /* SentryCrashDefaultMachineContextWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 90592C9439CD2BA46B9DD0DCF7E38087 /* PocketSocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5512BE654B5A8D0635EAEC3986B81467 /* PocketSocket-dummy.m */; }; + 907D8007159477F50E1856F1B9349B80 /* SentryTraceHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = DCE90B00255F2927CE141770B326E2F5 /* SentryTraceHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 90E2F1204F67B016ECFB8C68A21A523A /* SentryInternalDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B7AACFF2F231309B1CC3F0E79F9220 /* SentryInternalDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9132AFE0BB0E356F7E69CFB67CFEB342 /* SentryRRWebOptionsEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4368713B1FE88AF5DA10E9243D722F26 /* SentryRRWebOptionsEvent.swift */; }; + 9352F896926669CD3EFF5E054EDC1BDB /* SentryPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 593751EA69F36F6172EA650E840CF54F /* SentryPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9380A78CCE2FB8AFC6E0E2FB917CA1C5 /* MIKMIDIPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = B7E72463E5410ABB781714E60E75E464 /* MIKMIDIPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93B759F4F4170CD0997DF91BFE121507 /* SentrySystemWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 349D0679DE687C71E44AF38C213E94BA /* SentrySystemWrapper.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 93ED446C8DA68BB692D6F1CA7B965BEE /* SentryCrashReportFilterBasic.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E451E243AAA1FC8E8A6366EBFB0916D /* SentryCrashReportFilterBasic.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 94F01A4E72CE7F2738E9FAA5BB999079 /* SentryUIViewControllerPerformanceTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = C82B4EE1530BCF01766CB046EEF27F35 /* SentryUIViewControllerPerformanceTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 952CEEBD967E29644FD24008B5BE7116 /* MIKMIDIInputPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A856A9DAFBF64AF6064FF8EE12DECA1 /* MIKMIDIInputPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95318B9A88AEF836F77E28A6EDAF8168 /* SentryStacktraceBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 905C379BC198F2746E9035C78DACDA5E /* SentryStacktraceBuilder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 95D1DD7D736C41D79A2D9317F2F00524 /* SentryNSError.h in Headers */ = {isa = PBXBuildFile; fileRef = 54FF28980D7924C6E4835108FD3E219B /* SentryNSError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 960BF464A5FB2C32D33C07801B841974 /* NSMutableDictionary+Sentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 71EEF02F06471E5DF11E077D1E87A062 /* NSMutableDictionary+Sentry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 962C8B450D064740EDA2593CE84F486C /* Sentry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E976ACA64E92D8B5567B2DF9D4CC5085 /* Sentry-dummy.m */; }; + 969463810682F59655D58C17190F4212 /* SentryInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 761BE105A5AA23C0EF4E77730748BEBE /* SentryInstallation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96DBAEB48CC05544E73D68AA2720DD42 /* SentrySessionReplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB603C3EAF7E3528B9B23815FEE3209C /* SentrySessionReplay.swift */; }; + 9705D484D167955D704888D4154DCB8E /* SentryQueueableRequestManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F25F3CE7B1A0BBC43D6EC09C657694D /* SentryQueueableRequestManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 974593E3B3E3267532748EAD484B0A20 /* SentryProfilerTestHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = FD6A10FD3DBBD95204783545F7E92E42 /* SentryProfilerTestHelpers.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9800F902DC7644118D24D3D159AABC6A /* ORSSerialPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5D0EFE8DC739CC9BC50409F6356BB2 /* ORSSerialPort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 981BEEF652C9A3EF5D56BEB909131DC1 /* CocoaHTTPServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F0388A5DDDBCC3599BC947B6EAE0C4D /* CocoaHTTPServer-dummy.m */; }; + 98271C91DBA8D0BB2CA488710C9CC77B /* SentryWatchdogTerminationScopeObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = A059A28870B5D0DFCBE9719234C0FDFC /* SentryWatchdogTerminationScopeObserver.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 985DD109B2304DE5A56BBEDF8444CBEF /* SentryUserFeedbackFormConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0C4FD24B189D37A784C7FA3A67B7B84 /* SentryUserFeedbackFormConfiguration.swift */; }; + 98DD28BF5C9135FBCA548E4240846EF8 /* HTTPDynamicFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 3980919F72C2514EA9B7B839CD47DC06 /* HTTPDynamicFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9929C959ED646991B479560CA1199C52 /* MIKMIDIDeviceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F87245CE3F29700434539E2E95E8E764 /* MIKMIDIDeviceManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 99667A53E54E0490750AE19E306299D8 /* SentryFramesDelayResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7534924A5060AD1CC67934DDD8990953 /* SentryFramesDelayResult.swift */; }; + 9A323F779C3C8B53FE4A6FB3EE65E949 /* DDFileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E0FBD9FA6F80068C5760D31CFE8E782 /* DDFileLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A3CE33A376008276A4A53B8E0A61085 /* SentryCrashMemory.c in Sources */ = {isa = PBXBuildFile; fileRef = 55B226C7054BEAECF5C271CABC1131B4 /* SentryCrashMemory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9A3F152DEB19832CB3325961E91CEB57 /* SentryLevelHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B8E5A0AF65B2B2E00649D8467C40419 /* SentryLevelHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A47E9A2BDF5C1827A5E42B7DCB13646 /* SentrySpanDataKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A1CB7ABC4CB0A39DF6B67D3E17ED3E /* SentrySpanDataKey.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A62AFB9240D1AA7B4EBA8040200CA8D /* SentryBaseIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 77CEC4A4F173A75CC4169BF407C46F97 /* SentryBaseIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A817406B51FE4ED713B9BFDDFD24921 /* SentryPerformanceTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B5B51C125C702370ADCAF158ABCD3EF /* SentryPerformanceTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A87B4CE5A18F4C0FC83DE315F9274FF /* MIKMIDISystemExclusiveCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 22CEF8541F327D9FCB098295FD7C1AD3 /* MIKMIDISystemExclusiveCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9AD4D3DAC08F01B31211D4B06FF05FE3 /* SentryRRWebSpanEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BBB46D1FC26E9A9EEE21EAD0AF902A /* SentryRRWebSpanEvent.swift */; }; + 9AF1CB6C02DB161463DCF46F7936D1F2 /* MIKMIDITempoEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2A098E7EE2E765710251A10465AAE3 /* MIKMIDITempoEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B31AA38050D0FBD86023E2740EA36B1 /* PSWebSocketBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 36FD7BE852BC2FF341138C7171380B46 /* PSWebSocketBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B94014DA16A962917DA7C52702EF839 /* MIKMIDIMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E1C58FE9A77E25213198A47B0BAB324 /* MIKMIDIMapping.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9BF1579A313D14FE24DF4B224F06EA2B /* MIKMIDICommand_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 342C4BFA3B1528D963A808CA031866E1 /* MIKMIDICommand_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C2C5928ECF33F1CE2AC9DF906A3DB2A /* UIViewController+Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = F87EB4D917774B89F9474698C8FD5E46 /* UIViewController+Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C2C9B1DF73D04EC79916108723A6790 /* SentryWatchdogTerminationTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A1A6B9A785A451370BCE0D1A30B12A4 /* SentryWatchdogTerminationTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9C5DCB1054D5CCFA730B150A47C96D9A /* MIKMIDIEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AFD4ECDECC8685116C738E01C8186CE /* MIKMIDIEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9CA1D04D105C20D235BC67A4D4A0408B /* HTTPMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F786C5330BF38BF3DC5E1DC57D5BF65 /* HTTPMessage.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9CC4F1E6B2F7EA2BEBC134C8566B6F51 /* ORSSerialRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FF3E1FE10A4237F180D820E914F31342 /* ORSSerialRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D0439D5E4DA21D0DD272E363FEFD22E /* MIKMIDIInputPort.m in Sources */ = {isa = PBXBuildFile; fileRef = 628B93E18C67B0838D7595837DD1CCCF /* MIKMIDIInputPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D399881DA6632C8174F627C64728BEE /* MIKMIDINoteOnCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = EBC1EC183E581BEABDB8752E63D9B560 /* MIKMIDINoteOnCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D7A1997A3F98FF59A65EF38E98DA9E9 /* SentryGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = B6342F723012AF8852AC4F1966C63194 /* SentryGeo.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D8E9006DD6DA78901B45CE79FC55A11 /* SentryAppStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C115A9F676A6B8E2F92A53A09EAD3091 /* SentryAppStateManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9DBFC154758BE865C1122D2B65449777 /* MIKMIDIEndpointSynthesizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F1B7EE9AE522713F47F20B897EEB3AA /* MIKMIDIEndpointSynthesizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9EC1111D4F617B8F623E15842FDF6814 /* NSRunLoop+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DBF4C768EAE37EDA9A497C404AD5067 /* NSRunLoop+SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9ECC096B1D8DE03A288905BE92CED9A0 /* SentryTransactionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = C42A1F14CCFDCD30A11BCF25E8EA144E /* SentryTransactionContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EDA662D67A5422B3992BF122D6C9FA4 /* SentryDispatchQueueWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BF24CE9E15C64AC6AD96BB7167FEE1 /* SentryDispatchQueueWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9EE113403FA74A9B777FAB7484807B76 /* MIKMIDITempoEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C64A38F0FE201F6A4D93D54CF4CDEF8 /* MIKMIDITempoEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EF3AFD0572F1B13399E292811F19306 /* SentryOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = F451BDBC211EF22CA3D935AF49D0E393 /* SentryOptions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F1228E44CACCFA60F530C4BE253CF43 /* DDLegacyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 01201FEC0DDE5E8DFA7FCC97D0B81255 /* DDLegacyMacros.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F1FC97005280BCF65A1B935FD8A3158 /* SentryCrashMonitor_System.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E54BA06A5ED36D17D78302114356BFE /* SentryCrashMonitor_System.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F704D375E65832D18590D4A66BD932B /* SentryCrash.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AB407DBDE81E8C64B22BA37E69216E8 /* SentryCrash.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9F81E1F3894517C89E57125E9E477A90 /* SRURLUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 219D73DAA3E1EA0AC149B413906E2817 /* SRURLUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F8497B0495A0C21ED2647E6E151CC49 /* SentryDefaultRateLimits.h in Headers */ = {isa = PBXBuildFile; fileRef = 971EFB9F42CC92340CFA0E717BD61903 /* SentryDefaultRateLimits.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FA993CA3336811E0D6308417A7B57DE /* SentrySdkPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 1023631B2DDAFDC722D8F521E02CC448 /* SentrySdkPackage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9FADE9037A50D5CEA5F770D8AC7E1CFF /* SentryViewHierarchyIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FBDF0C2BA961DE92ADF6FA319B00B20 /* SentryViewHierarchyIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FCF503964EA555B93E1AA67F18C97F2 /* SentryRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = D1EF3BDAAC4CA8F686FDF7887BF26532 /* SentryRandom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A00747C98E48D217AC4D46B729FBDF7C /* SentryCrashStackEntryMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ED352D192C63D0CF0253B4AB24C6C66 /* SentryCrashStackEntryMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A04877121E53A7BD1274EF6514DAE5E6 /* MIKMIDIChannelVoiceCommand_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CBF1051BE74C19B87CD434F8D2B68A1 /* MIKMIDIChannelVoiceCommand_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A07296A41BA1AC2DD42C6FB1431639EF /* SentryCrashIntegrationSessionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D8CEB0BF30CF4C289F3D5EF6932490 /* SentryCrashIntegrationSessionHandler.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A0826D01855E887E8EF83B2CD2769858 /* SentryMeta.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B7308025EB333D2B55A98C7A0FC1E5F /* SentryMeta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A09760ED7CD7E0C8ED0E003F47F043DB /* SentryNSTimerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = D872FB48215B27841F868DB140428098 /* SentryNSTimerFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A09F549F619F47F0D5A31DCF9F5B0171 /* SentryException.h in Headers */ = {isa = PBXBuildFile; fileRef = 868B71843A3A0C5871F81E441D659711 /* SentryException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0A843B36B6CEDDF3A154C6A04555854 /* SentryNSProcessInfoWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A1ACDED416CB68F5EAB3AD0C1A53DE8C /* SentryNSProcessInfoWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0C4816078B950B46F8167F1E7B7D942 /* MIKMIDIMetaKeySignatureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D58201D58497942CFA0790FF0D7A067A /* MIKMIDIMetaKeySignatureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A10254FE12BBBA5743DEE98745F89B07 /* SentryCrashSymbolicator.h in Headers */ = {isa = PBXBuildFile; fileRef = DC13C47D74A1189A7E3D992AB90CB201 /* SentryCrashSymbolicator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A17744DE32844B1903FDD0E5DC5E02B4 /* SentrySamplingContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 626D2BE20859CA5A395F1C969F689591 /* SentrySamplingContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A1DB0E5DEBB0F5E3E5C127F975555835 /* SentryIntegrationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A4AC60D34897EE4A2A1817B03B8BDFE /* SentryIntegrationProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A205604994BC7AB136B8D451C9A8C3A6 /* SentrySession.h in Headers */ = {isa = PBXBuildFile; fileRef = DFE5091698975C1345A5BB944AE573BC /* SentrySession.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A273CB47C2F487233538DD55DABF0EAE /* NSURLRequest+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = A4938F684913D37B6337405025347608 /* NSURLRequest+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A2AE89F36F2A8757F5C709893DA16533 /* SentryGeoCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB661E0A7D8C236E2E5D89538E42DA92 /* SentryGeoCodable.swift */; }; + A2AFF231D2D3A6A395DA2F6D9F1D45B0 /* SentryCrashCachedData.c in Sources */ = {isa = PBXBuildFile; fileRef = 9F7210EFFBF686CD251D5A1B4427B08B /* SentryCrashCachedData.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2B01B7679A4D260125A880A9749DD8B /* HTTPAuthenticationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 04606597449A2FD011C00FE115D87D56 /* HTTPAuthenticationRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2EDED36DEFE6DF7A991C3C681BDE99B /* SentryHub+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 93A9BB91031482A7585D5BC11375A453 /* SentryHub+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3BF3F1C5E4DF4A33621E517B4D53E48 /* MIKMIDIEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F20AD937CC715C9437083ECE3CC1149 /* MIKMIDIEntity.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A3ECD6FF84F81A4D1F8DF4F3508AFAFE /* SentryDelayedFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 0275EEFB092C3971B7C75A9A34DB7296 /* SentryDelayedFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A442C24A068BB7B31BAEB52CFE8C79A4 /* SentryANRTrackerV1.m in Sources */ = {isa = PBXBuildFile; fileRef = C1993EEEA8310DAF1EDFB9DD5D060C7A /* SentryANRTrackerV1.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4662CBB53C0D17007988786E79B9731 /* SentryTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4560AB5859635E3ACE377AD42C07D96C /* SentryTracer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A50AA26C4ED2A5ACB0343C7747CC563C /* SentryProfilerState+ObjCpp.h in Headers */ = {isa = PBXBuildFile; fileRef = C88092370104A9779634B014B6CFC897 /* SentryProfilerState+ObjCpp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A56B3264D8E7FE4C9C79F9C0A88DAF04 /* MIKMIDIUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D9E5C74871E9B3FCA8CFBCF49BE558A /* MIKMIDIUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A65ABA5E2E07C1EEBE5C040AAB8BA4C6 /* SentryViewScreenshotProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C07339D3D8A51AE282986026D39FFE23 /* SentryViewScreenshotProvider.swift */; }; + A6839845F817176B98E18DCDAF086F32 /* SentryDiscardedEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B64F313D3588C5DBFC21BE76C0FBBC9 /* SentryDiscardedEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6C32A5A1AC22985366DDDFA52404FE6 /* SentryClient+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6C15F539BEE4CFF8462F8C4C1F539B /* SentryClient+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A70E8425FCAFC620A0AA0D0EB4722E7F /* SentryCrashReportFixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 992514C828A3C923EF053BA67001F382 /* SentryCrashReportFixer.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A72B9B390411E61766A4E2B2D376B95F /* SRRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 22AE211865707E46D0BA556617C54287 /* SRRandom.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A751B71ED24B35EDA51779C26E048534 /* SentryCrashJSONCodecObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B0272FEEA151065EC6D0602290A4ECC /* SentryCrashJSONCodecObjC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7FA68D5238CB6902921A520B927BA77 /* MIKMIDIErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = FBA686097CC7BAC119F4E818023BFC63 /* MIKMIDIErrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A818493AE7620EC718B81C8A826BA82B /* SentryUIEventTrackerMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AA652C709B56A0B405A3467A2B83D3D /* SentryUIEventTrackerMode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A861430DF3E9F9D38D79FB687183A377 /* SentryCrashJSONCodecObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99DA03A4F6DB9555424E94484A8B3639 /* SentryCrashJSONCodecObjC.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A895451351C1BF480EA8CA9AF756BB15 /* SentryAppStartTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = ADA3453AE613ED13A83F04EE0B1EE04E /* SentryAppStartTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A9237C56F350DDE12839C073E70729FE /* SentrySpanContext+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A6CCA424894D6D2DE3A103A3AC34D506 /* SentrySpanContext+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9AC5A33611BDA53EDAE63AE84A81185 /* SentryTraceContext.m in Sources */ = {isa = PBXBuildFile; fileRef = FB8EC01BA0C474B16B4C1A4C057605AE /* SentryTraceContext.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A9BCA5E31DFA7A4E7ECE60697E7B3C98 /* SentryIconography.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB16E9474E3B42771CBCD73DEAD9F9BB /* SentryIconography.swift */; }; + A9D87A6D8BF4E4EBDA2910462C4AAEC4 /* SentryReplayEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A42039A24680DB263DDCB2E0BC8A9F0E /* SentryReplayEvent.swift */; }; + AA2BBC6F4429D855D1B4071AB8A71725 /* SentryCrashInstallation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD573609C4DD4D53E4FDCCA8D3C9BF3 /* SentryCrashInstallation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA81FA4A46FDA8B0046B2E4006531D4E /* SentryBreadcrumbCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4867757319AC6662D5CB9107F231ECA4 /* SentryBreadcrumbCodable.swift */; }; + AADB7C22B44B0BA6E4C9F0ED222280C3 /* PSWebSocketDeflater.h in Headers */ = {isa = PBXBuildFile; fileRef = 87CEBFB7B7323593F0CE749DDDFCF274 /* PSWebSocketDeflater.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AAFD5032178C4B059F1DA13BBCBAF53D /* SentryProfileTimeseries.mm in Sources */ = {isa = PBXBuildFile; fileRef = DC9AD2CB1B51FEB4E6E5F500A12B8369 /* SentryProfileTimeseries.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB2DEF423610B60E1E987D7832051D00 /* SentryBreadcrumbTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DCB6A9CF59CB3C19BA6FD767AE6FA14 /* SentryBreadcrumbTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABA7F20D744C2862BECBBC0656EA1B61 /* SentryCrashBinaryImageCache.c in Sources */ = {isa = PBXBuildFile; fileRef = 5D9326E03577B623C1AC1B0387909AA4 /* SentryCrashBinaryImageCache.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABE5F496D6671B6FC4F66D37654CC53E /* SentryDateUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = FBDEBD17883145566C04C70792D10BC6 /* SentryDateUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABEABBD69588975AB564457F1489BCD9 /* PSWebSocketTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0C2102DF60E0D9C23EBF54BF520521 /* PSWebSocketTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABFD35D4D4134E544423E563A1836A96 /* MIKMIDINoteEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 439E12F2F5FF227C1EEBA4139698416F /* MIKMIDINoteEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC2594783DF8FE6B970590B5538CF090 /* SentryDebugMeta.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AE0C65C5CF4751EABA0AD5D22AE848B /* SentryDebugMeta.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC43756D26BA899CC3FF2279097443DF /* SentryNSNotificationCenterWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF64A10A0E6C53C68112EDC4760DA1E /* SentryNSNotificationCenterWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC95CD25F6CF41C460A99565ED74D5F9 /* SentrySwizzleWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DAFF5FDBEAD7BA25D4D7B2500CA8B22 /* SentrySwizzleWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACBD7AEE37F16C52B6FD5E433EA0D37E /* SentryCrashUUIDConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = B100F93931218F4CCC7AA0F468B65B27 /* SentryCrashUUIDConversion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACC448E342137ACC470994D9B9BECD97 /* SRPinningSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D9DD0F1F73F404D1F497B759EB460E3 /* SRPinningSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD5F802287D040F84128325118448D6C /* SentryClientReport.m in Sources */ = {isa = PBXBuildFile; fileRef = FD69AF300313A982FD0653873C5DD202 /* SentryClientReport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD7AE991769DC22C151B59585CCD6DBD /* MIKMIDIChannelPressureCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = FA2E06D2969E68D50D464C74ADFA1395 /* MIKMIDIChannelPressureCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD87F6E3FA48619EC7FC8058F8BE07C0 /* SentryAppStartMeasurement.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B05F7340C216792A8C5D1776111E7A8 /* SentryAppStartMeasurement.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADAC99F0278449DF714900938FA22C95 /* SentryDefaultRateLimits.m in Sources */ = {isa = PBXBuildFile; fileRef = 1714F00193A1476C02AD85B8AD41F18E /* SentryDefaultRateLimits.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ADC3E499226E3F960B4BF139612B7BE1 /* SentrySDK+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 418EADF1958EC0B72736CF1ACE9AC785 /* SentrySDK+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE39FB2AF34CC8B76D353E8FBE41696F /* GCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 62EABEDC93B6E8D5EDEB3A5380695CFF /* GCDAsyncUdpSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AE783271D657756A2961BC76D431AA60 /* HTTPAsyncFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 29043E8DD87496520FAA80F10793C3CF /* HTTPAsyncFileResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AEF9BB4B823BDF77B3D309FADEF09A57 /* MIKMIDIObject_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = D91AF7E51225D293CDFAB3AFC7AA84B2 /* MIKMIDIObject_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF33F6FBBE8EA390F8A5BE73204F6BD6 /* MultipartFormDataParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 041DAB1542071DF652503FE967D18864 /* MultipartFormDataParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF493924C614CAE46D1EDEF206F5BD56 /* NSArray+SentrySanitize.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C42F0634096933ECEB25CA80F635342 /* NSArray+SentrySanitize.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF7F07D02E7FBCB00381590249BB2604 /* SentryNetworkTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 978B9A6D4D3166EA514062544A9156E6 /* SentryNetworkTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF883A8C50416C2854DDAFF19C151A54 /* SentryCrashReportWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = E423319C60D2FD4826987354FD55AFA5 /* SentryCrashReportWriter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B03C3D033D9D7F922ECE147B534A2BA9 /* MIKMIDIMetaTrackSequenceNameEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DBC734BD7650923AAAFC72B8A6895B0C /* MIKMIDIMetaTrackSequenceNameEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B05FCDC5904D1C9FD75F258A652086C1 /* PARImage+ASCIIInput.h in Headers */ = {isa = PBXBuildFile; fileRef = E19C3C27FE150C79821DFE5D7E9A9183 /* PARImage+ASCIIInput.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0DD583726E9B6378B9FD3B4CD331D17 /* UIViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D826AB1169755019A7446381B83EC43 /* UIViewExtensions.swift */; }; + B0EEC4846A0BEB2068B6E7A651AA7798 /* SentryInternalCDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = F0BCFCD2AC19D74D9D1469678961B4A6 /* SentryInternalCDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B11000625AB894ADAC44CD625D15C388 /* MIKMIDIMetronome.h in Headers */ = {isa = PBXBuildFile; fileRef = 6070688B3B9F5CD8BA8E6F9A8ED1459F /* MIKMIDIMetronome.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B18C1F9852FE31107AEA01F0056C3C27 /* SentryUserFeedbackWidgetButtonMegaphoneIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 610BB5A8905145D2EE889BB7223C140C /* SentryUserFeedbackWidgetButtonMegaphoneIconView.swift */; }; + B19CAC6638326EFDC39EC28507B0581A /* SentryScopeSyncC.c in Sources */ = {isa = PBXBuildFile; fileRef = 253295F694E7890A00F07B7CE7B2D381 /* SentryScopeSyncC.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B1B39F3446DB693181D8316F54C8A436 /* SRProxyConnect.h in Headers */ = {isa = PBXBuildFile; fileRef = CA6EC70B803A92E9C2FCA7DD54124AF4 /* SRProxyConnect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1DC73679DDACAA97E9250022DE498DF /* SentryCoreDataSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D7A56DDC91677E82BCA78612D8B6B9E /* SentryCoreDataSwizzling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B1DCFE703919294A47C4779E98F336A1 /* SentryMachLogging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80112564CACA3F1A4BE3CC98B0CFA186 /* SentryMachLogging.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B1F3FA578599744BA5F2455469466E7C /* SentryNSDataUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 626A731139D310F97A71D6B1461DA7F3 /* SentryNSDataUtils.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B204F7DB7F568FA6FED9F9B1D3EA0725 /* SentryNSFileManagerSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = FC12DB2166C48A428920120E76AED97B /* SentryNSFileManagerSwizzling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B219FD8C27E41E9C13126D52E9FE95EC /* SentryNetworkTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = AB5AF804AE8846C9CD01A4E07FC50E56 /* SentryNetworkTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B22C9587150510B368957239A795D9A2 /* MIKMIDICommandScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BF60F22A344A23CE2814221D0C3C12 /* MIKMIDICommandScheduler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B28D230B9DF1ECD173D1AEB9464A60BF /* SentryGlobalEventProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 671F9382A4126D5A55576E24D47C5F2D /* SentryGlobalEventProcessor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B293B6902145108C8E7D84EC9DEE562C /* SentryBreadcrumb.h in Headers */ = {isa = PBXBuildFile; fileRef = EA95EB854533E791CBC83372272BA2ED /* SentryBreadcrumb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B2C5E119FD3043386C255170D18CE878 /* SentryReplayType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F3075B9EFB5A520D04DE0B8930B7FB1 /* SentryReplayType.swift */; }; + B2E757C8B02025C20388E129ED41177B /* SentryWatchdogTerminationTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = C3E4A324E1C9C10A80A3F94A8227322D /* SentryWatchdogTerminationTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B341F7169F86EF3256D051D77599ED86 /* SentryPerformanceTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 049E23F5B81F0F22B9FA86B657E1BBC2 /* SentryPerformanceTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B382FBC6E3BA0B875D4A95531573AEA8 /* ORSSerialBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 34464D38DB64C467279A7B55DA1F31D5 /* ORSSerialBuffer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B3BEE8DD4A19B3FE8C59E3A1B25AD32D /* SentryHttpTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = 043E6A45053C7F61725ACA8110E89FFE /* SentryHttpTransport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B41D305C1FB787E3F626ED6A6D2C78AC /* HTTPServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6712244FC2230421B8DB3EB777B89EF8 /* HTTPServer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B422C7E18C35A69D7E74CEC164FF7D4A /* SRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 532096B023519D4776147A8050DC57FD /* SRError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B426475E75BB07C3031D923E596872BA /* SentryQueueableRequestManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BE391DB4728D2CA5CEC5C03EA5E17122 /* SentryQueueableRequestManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B448B87D620897F13C169886A2060A4F /* MIKMIDIEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CEF80D3FB1440C59CF57335963525E4 /* MIKMIDIEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4D650861487DD2881AE59A46284120D /* SentryCrashCPU.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5B32494BB6A7E0732E8E034D0EBFC7 /* SentryCrashCPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4FD8AA244DE53CABEDDE23F79D1799F /* ASCIImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 58898C2C80AF3049268C2B9E34A65D89 /* ASCIImage-dummy.m */; }; + B52C05B32C91ED1D21376A9972C2A676 /* SentryDataCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C7410D5636DE4AF21AC08BFEB8627B /* SentryDataCategory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5456195186CE7957E416C7DD618788D /* DDContextFilterLogFormatter+Deprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = FE5C43517361D54BCA00CBC47B2637BA /* DDContextFilterLogFormatter+Deprecated.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B54F2F0DC370DC8D41CBD679F0647EBA /* SentryUIViewControllerSwizzling.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BFA2A57FE74C0109751D246FA015350 /* SentryUIViewControllerSwizzling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B56DA5D89BFCB25A0A1E1756E8F44FF5 /* SentryTraceOrigin.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DB94733E03560E5A2C7A94D9CB5C0A /* SentryTraceOrigin.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B6014201659C519452F92F8945839646 /* SentrySwizzleWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = CE73E9AD4131629352FB52E7DA588C11 /* SentrySwizzleWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B6106D0213B630D8BD71F52C70651EC1 /* SentryANRTrackerV2.h in Headers */ = {isa = PBXBuildFile; fileRef = C4BBB13FB47AE7ABC026F4407FCD7DD3 /* SentryANRTrackerV2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B61E23AE8E1FE30A7C131FB9B5EA527C /* SentryCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31B995DE34CCFCF5DE8B1F6AB7D05486 /* SentryCodable.swift */; }; + B6C59C815558C1721DB817886EFB9907 /* SentryNSFileManagerSwizzling.h in Headers */ = {isa = PBXBuildFile; fileRef = 16493FC5B7C0AC5D3788D851B54CDFDD /* SentryNSFileManagerSwizzling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B748CF8E5769D7004495FC84731FE7A7 /* NumberExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A12BB6450CB713A25FC31E05608F6FF /* NumberExtensions.swift */; }; + B77E9972A4AB64BFED7498A53E2B6306 /* SentryWatchdogTerminationLogic.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BA37EA8EBDF8452273DABA4B7A44C40 /* SentryWatchdogTerminationLogic.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B79728DAE1B94FFC0AA9732C39FE0B47 /* SentryMeasurementValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D6107FADD7A4D6A02EB83A93A57348A /* SentryMeasurementValue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B7C311049C73859D22C54974AE8C3083 /* MIKMIDIMetaCuePointEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0197B58FEC975FF5384D0823AD22B0 /* MIKMIDIMetaCuePointEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7E06D96D9B0E99735270612F9F69D6B /* MIKMIDITrack_Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F30D997712AB96094372E02201362BD /* MIKMIDITrack_Protected.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B80AF287D3B5C47F2DB83467BC1E3E98 /* SentryCrashSysCtl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D1F0EC48B392EAE9559B50CAE05D675 /* SentryCrashSysCtl.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B85BF8B91D7F020E3CA9F76482D20050 /* URLSessionTaskHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2BBF0C74419D0A425C4C44E66854A0 /* URLSessionTaskHelper.swift */; }; + B86A400DCEE9DA879D1A57C52BDF8115 /* SentryCrashExceptionApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = CC5BF7FF018EDD63174F884B0299AA74 /* SentryCrashExceptionApplication.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B87BD90DBAA91E91D283C87BD8B8024B /* SentryEnvelopeAttachmentHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B73F79C8DF2CF94E0A214C93BE0C8AF7 /* SentryEnvelopeAttachmentHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B8B3496BCEBFE96658DFE221D679CBD2 /* MultipartFormDataParser.h in Headers */ = {isa = PBXBuildFile; fileRef = FC52D0AA13F7B55147A72C1F11F68B7C /* MultipartFormDataParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B8C2A4F8285D15DE39D45327D74AA602 /* MIKMIDIEndpointSynthesizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2678663DBF6EFB33E4F37305843EEE38 /* MIKMIDIEndpointSynthesizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B8DB40C7DE9B742E8F2E8F1FE4AE9273 /* SentrySdkInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 237B85ED6F21DC95418B8CC837360902 /* SentrySdkInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B8DF1220EE1A04DAF7250AB0A10B1037 /* CocoaLumberjack-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CDD6A528EEF81F6568DCCCCADDC5E5E3 /* CocoaLumberjack-dummy.m */; }; + B8E1900112C571D6F2F68264D1A46275 /* MIKMIDINoteCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 74477422FD95AAFB96A9C37BB7C82E32 /* MIKMIDINoteCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B9C4F7207BDA879FE70B05174BEB280B /* SentryMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF2359FFBE6F63197FB962A1D32CC764 /* SentryMessage.swift */; }; + B9CCBFCA39666C4BBD81545BF16AC236 /* SentryCrashReportStore.c in Sources */ = {isa = PBXBuildFile; fileRef = 0013D56BADDF79F078E56D7D1608765C /* SentryCrashReportStore.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B9F4D6C54A4B9BE8594E558B9139C86C /* SentryThreadHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1AA62902933987086690BA9DDEBDC798 /* SentryThreadHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BA48A112724150B9CF872BB25E246C68 /* SentryBinaryImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = E3EAE18F63ED8BB6C897E0F72506E6C8 /* SentryBinaryImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BA626EB5DA309C094877B2D23DE2E3F4 /* SentryTracer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F0CF2F51A62EFD082A3A49DCAF25C8BB /* SentryTracer+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BAC80AA1F157C589E5419CCBA6EC675F /* MIKMIDIPolyphonicKeyPressureCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 16AE75DAA9C3A79DA01D5BB93F854C68 /* MIKMIDIPolyphonicKeyPressureCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB2EB2C48BA5C164AFBB40CFC9D1BAFD /* SentryExperimentalOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F479A31F0BD78425CDCB47E749CF74 /* SentryExperimentalOptions.swift */; }; + BB5845246D771FCD07EAED221670E059 /* SentryCrashDefaultMachineContextWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3434547D607D12E91702F4301342CB10 /* SentryCrashDefaultMachineContextWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BBD53B19C68FFE3A5D8F69F7EFF3B24D /* SentryNSErrorCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7B3627211F504E596A425413F11F97A /* SentryNSErrorCodable.swift */; }; + BC94CCBB711C8274CC4302842D3D2583 /* SentryThreadWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 379BCAC282AF45EF53C5AB10EFF1381D /* SentryThreadWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC9CB2C50821D6BA89F7FDF3478FD015 /* HTTPAuthenticationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FEF703340493D0D19727935AE04F688 /* HTTPAuthenticationRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BCB591120920187A3E36991B41C9ED55 /* SentryThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BDB86C5FEB06CBC40D536435F0A6253 /* SentryThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BD3716915601B3940BF3F8E866D20471 /* SentryLog.h in Headers */ = {isa = PBXBuildFile; fileRef = A1A30C9B714366214F409090EDE145BC /* SentryLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD7967F9A5A396BFBC71E3B5DAFB4887 /* SentryCrashSysCtl.h in Headers */ = {isa = PBXBuildFile; fileRef = 769C10C5440726870C9566A393FB330B /* SentryCrashSysCtl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BEE7893785F4E1E1D564BBE4E3EBDB48 /* SentryOptions+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3CE00499D0DC4D8CD0444C39AAE976 /* SentryOptions+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BF189707E65A125947C64A9A6479B39B /* SentrySpan.m in Sources */ = {isa = PBXBuildFile; fileRef = 26E98CFCB2D54038D5E16D80413A5E59 /* SentrySpan.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BF245A836C4585F4D382AD8326A0B849 /* SentryCrashMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 777B437606ADECC1E4624CE8A33BC112 /* SentryCrashMemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFAE931B736AD7B03A28470485723B7F /* SentryCrashInstallationReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E2EB4EF0AA177EA07CDA3A4AA91622C /* SentryCrashInstallationReporter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C00BD26E25A255F519CF02DD80925E02 /* SentryProfilerSerialization+Test.h in Headers */ = {isa = PBXBuildFile; fileRef = 653D91BC0ABA78E68D1ED49B2D755DEF /* SentryProfilerSerialization+Test.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C010E856170B5044AB52EF7D332D6D92 /* SentryCrashReport.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F04E49972C94BB40E3470AEA96076A2 /* SentryCrashReport.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C054D89491B225B47C57417F9B0AFD21 /* MIKMIDIEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 79BA363AA17520C8A474FC95D86CC169 /* MIKMIDIEndpoint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0AA388D48B58F0D3D021B30683B0DA1 /* SentrySysctl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AEED5DE1B8557ABD0BF34522210EDF1 /* SentrySysctl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0DA41DBA7BED717E75C96B148D9E3DF /* SentrySamplingProfiler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A416897A0822626DBF259384531555A0 /* SentrySamplingProfiler.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C15F9540A941D802525DF22033EA6244 /* SentryCrashC.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EBD7244F2BC8F0C99E45AF1D5057468 /* SentryCrashC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1966C56927E1C0B40224FF9DBF0943F /* SentryTransactionContext+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E633D058AB81487F408737C19DFF697 /* SentryTransactionContext+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C22743413A98E1686C8793AFAE7FB19A /* SentryId.swift in Sources */ = {isa = PBXBuildFile; fileRef = B03D0F765739BABC924DB4163592AD11 /* SentryId.swift */; }; + C2322DC75B9A0F6117D4C0E67F35371B /* SentryViewPhotographer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A79989E04584B70FDCF4FB0E6FFC504 /* SentryViewPhotographer.swift */; }; + C2B231C963C21812A1F1A347716CA6B8 /* MIKMIDIProgramChangeCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 012E02FAB1EB2D6407156DB6FDBBBEFD /* MIKMIDIProgramChangeCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C2B800D81407645EF41B7968FDF12203 /* SentryContinuousProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C0AAD32EA78A0C2DBBB0286C2CE2A46 /* SentryContinuousProfiler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C33841662080C41E9531C8BA3760DB73 /* SentryCPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 61A750D5ADB197562FFF3E10262A9BFB /* SentryCPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3464CDCC64D1D73AAE0537A30603CFA /* SentryTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = A4B8FA7CA3389D3F77D2A5DC7FA90DEC /* SentryTransaction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3850EEDCA204B5837B23C0F7D0E5518 /* SentrySystemWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B42BBA860B282A2F0AF43C80AAA3C5 /* SentrySystemWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3876371CD8B07E554657EDDA967D181 /* MIKMIDIPitchBendChangeCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 07B25F60857D113A5E5D5599CC7AFF7C /* MIKMIDIPitchBendChangeCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3F5D2B1963896381142EBF45C4AF8B6 /* SentryReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = EDDD2760E0F22210874A3DCB8C6223F9 /* SentryReachability.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C441C5C5A715C2ED984A968D4A83A1EC /* SentryRRWebTouchEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F545D7F8B2046D3F801B76E41366D28 /* SentryRRWebTouchEvent.swift */; }; + C4D48F2B68630D22D46388EDBD473148 /* SentryOnDemandReplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 151525B4A0622A06FC999E601AC07B74 /* SentryOnDemandReplay.swift */; }; + C4E5C94423B8467699D8CA641FA2C4F7 /* SentryHttpStatusCodeRange+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 10B7B1F0F9E63C5395855656C702BB9B /* SentryHttpStatusCodeRange+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5160B09FF5CFF0FA14C87E3E89B8757 /* SentryNSURLRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6F99BE0B6E03B6B649725645C0B0D /* SentryNSURLRequestBuilder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C586FEF4BD9ED734EE11A4464839B39E /* SRLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 813BA02EB99705920E6D4C7E5020B44D /* SRLog.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C5BAFF7FBC6EE2336E6D127EDEC367A3 /* SentryUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FF5016A53C87B7327B6FAD067C8D889 /* SentryUser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C5E68AB69485890D4525952AE7FE11EA /* SentryPerformanceTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CAE2FCC3E4271135530031AB7E5D8D8 /* SentryPerformanceTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C6083AA0ACC128577BCD71D5C3164AA8 /* SentryRequestManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 20B81C9973FFA15370060C4E472BA317 /* SentryRequestManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C661C0D9F11E2797B8CEE8078F0C0F86 /* SentryThreadMetadataCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 033950F001665A8484A9EB48A1B52F12 /* SentryThreadMetadataCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C6747EC345CB416B8DC8177F3DA7DDAE /* SentrySpan+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DFF64F1A541FA55FB0E0B906D45F16C /* SentrySpan+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C6788627E0105DA895379A2ABF451563 /* PSWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = F0B9A289A6CA386238227B97D2E1027D /* PSWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C6C7509F1F3E090DD78040DE9B4A99B0 /* MIKMIDITrack.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BD8AC64D4E827EDE6B96AF3EFC4678A /* MIKMIDITrack.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C70B4124BB4DA1742D96EC0D5BCD2520 /* SentryPredicateDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A75E814B2BB31AEBA39926C9406663F /* SentryPredicateDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C70D8CE38E31D4673D3F5F0E29AFF356 /* NSRunLoop+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DF1FC1426D43ED67E86AEAD7E1E22AD4 /* NSRunLoop+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C728D34757B5D6023059A31ADE5605DF /* SentrySamplingProfiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D091905D5DFC8D1E70DE497E1D01DCCD /* SentrySamplingProfiler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C72A3F26FB13E9C3EEBDF397DDB68760 /* SentryUIViewControllerPerformanceTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = DE3CFC8EBFAA9FB970C25D425FCE1A0F /* SentryUIViewControllerPerformanceTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C77DD32D9DCE018D918145633E3D59E8 /* SentryTransportAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 926AA2D4E5E1CED329F2F95CFF5FD2CB /* SentryTransportAdapter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C822696230130108F3AB3AE03B2F5D5B /* SentryMsgPackSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 68C767D29AFECF17502A88634DA84F85 /* SentryMsgPackSerializer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C860C52DBD445F475FDC2C407F9D694B /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3C1D58E4E6B1F8FBE276BE35800880 /* DDTTYLogger.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C8ECB3C0219D45F32E48CE63B5F0D750 /* SentryFrameRemover.m in Sources */ = {isa = PBXBuildFile; fileRef = 0825C4A23F176C3FC423A6783054EB9E /* SentryFrameRemover.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C8F11038D2AB7AA5871619A91B063F87 /* SentryMechanismCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712D1C0F77040989841F4CDDAFB51A39 /* SentryMechanismCodable.swift */; }; + C92F0B143746145974A13472C207505A /* MIKMIDISystemMessageCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CDA75873818A131B52825BF4D1D2B4A /* MIKMIDISystemMessageCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C9419B99BC228624FDBA0751905CFB86 /* SentryCrashDate.c in Sources */ = {isa = PBXBuildFile; fileRef = DD50C1A63AB5540BE015C11A47A7D319 /* SentryCrashDate.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C9634CCE175EEDC217381F1B7B99BDFD /* SentryProfileTimeseries.h in Headers */ = {isa = PBXBuildFile; fileRef = A279C443C60B1D2BCEC66CB27950153A /* SentryProfileTimeseries.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C97BFB0021815E5B124A3C4BAF255698 /* SentryInstallation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BB7055F6886355C95341A84A5DA036A /* SentryInstallation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C9C4DCAF13DC17665FD5FC96ECAB8977 /* SentryBuildAppStartSpans.m in Sources */ = {isa = PBXBuildFile; fileRef = 536AE9255874B3EE4CF493D8694B55F5 /* SentryBuildAppStartSpans.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C9C6E1D7310347FFB7532BE02ACF5E3B /* MIKMIDIMetaTrackSequenceNameEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A1BF895D48796B4F288E1C73CBDDC275 /* MIKMIDIMetaTrackSequenceNameEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CA22C3CED1126B6DFE3D02C6483C6F3F /* SentryLogC.h in Headers */ = {isa = PBXBuildFile; fileRef = D9AEE7B904B6F822F4823028C45E48BD /* SentryLogC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAAA96E88D14B8E9FC850590189728E8 /* SentryTracer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9773F177546E1954F32757DEDB59677C /* SentryTracer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CB1E4AA2993620771B46B2F226EEC046 /* SRIOConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A17DC292BDE963530239F05E2FA34FC /* SRIOConsumer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CB5697C40710A4DA3922EC7F990AC334 /* SentryCrashWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = B21740BEE120420515F88CB36EB4E7B2 /* SentryCrashWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB5AEFEAF089B7F454112FAED3ACE858 /* SentryProfiledTracerConcurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8668C520399BA6040828B01D2D0DB6 /* SentryProfiledTracerConcurrency.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB6C661371B5594A918E35484BF038FC /* SentryCrashMach.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EDF710824EDFA7FCBDFC684A1751BC /* SentryCrashMach.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB707A3FA1E1447910AC22E11C2768EF /* MIKMIDIClock.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE178F589061D15708753D9A179E2A1 /* MIKMIDIClock.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CBD0E242B9E68A900E492E21CF39D237 /* NSRunLoop+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 2227371D94F8B8A65DAA28091BE24548 /* NSRunLoop+SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CC1B0976477F4F8E10B7E62B099F30B1 /* SentryLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD760758EC90E5B840F414265CF91A19 /* SentryLevel.swift */; }; + CC51857B1EB90F880FECDDFD0999D948 /* NSMutableDictionary+Sentry.h in Headers */ = {isa = PBXBuildFile; fileRef = 53145BFCB99835D4A526D1BE4F34E7F1 /* NSMutableDictionary+Sentry.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC5CC3923B3FC25775F913F312F30171 /* SentryAppStartTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A6E96F9686CED11A83C8CF2B199428D /* SentryAppStartTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC7ED099C421BD5607251AA87F5F83F9 /* DDContextFilterLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = FDDE5C1FA0BAD805D5EA880C4524FC3D /* DDContextFilterLogFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CC9CC542A4F216C9136DA6904AB7F672 /* SentryWatchdogTerminationTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = A139368FACD29D3F545E73A99828C356 /* SentryWatchdogTerminationTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CCC424D9ACAC15B7650E789CAE098621 /* Pods-Hammerspoon-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AF41F1AC3465584EF871191F0D8FBB1B /* Pods-Hammerspoon-dummy.m */; }; + CCCFCC2E91E861FE0839199533F4448A /* SentryEnvelope.m in Sources */ = {isa = PBXBuildFile; fileRef = B93A05C04A80D55F1AC0267A538409EF /* SentryEnvelope.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD0FD48834F4C6A478E450A916E19E2E /* SentryEnvelopeItemType.h in Headers */ = {isa = PBXBuildFile; fileRef = CED63A8241CEBFABCA543D7386B56B0E /* SentryEnvelopeItemType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD297CCA65D784328882D03174DF70DA /* SentryCrashDoctor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EF8FFF4E82EC52DC0981A0AE8A13E09 /* SentryCrashDoctor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD393AD9B87D860B8722DDE4F6AEBDAF /* SentryCrashDebug.c in Sources */ = {isa = PBXBuildFile; fileRef = 90AAB05173D10F905323830BBD3002D7 /* SentryCrashDebug.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD70633E2AE8B57A954808179509528E /* MIKMIDISystemKeepAliveCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B28B63B33D94F4EB70F39AA102B0A2B /* MIKMIDISystemKeepAliveCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CDB9CE0362D878D130A1A74A1D07DA46 /* MIKMIDIMappingXMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E1ED0785BCF2F459FEF9088AC5E1193E /* MIKMIDIMappingXMLParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF13857ACF6DB179B9B766F365E449B3 /* MIKMIDIMetaKeySignatureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B3F4666DB87FE6C1B2D8FF038DC8E9 /* MIKMIDIMetaKeySignatureEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D01499C0BD368FB27C61CBF9AAAF5872 /* SentryProfilerSerialization.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9AF02E3E80A14C3AB15F7F1941ABFF37 /* SentryProfilerSerialization.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D03EA6AC51AC10C6CA46870B9132A0C4 /* SentryDebugImageProvider+HybridSDKs.h in Headers */ = {isa = PBXBuildFile; fileRef = 49A605666CA85583E29E08A36EB170A8 /* SentryDebugImageProvider+HybridSDKs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1731F0C7336706115CF26732F44888D /* SentryReplayApi.h in Headers */ = {isa = PBXBuildFile; fileRef = 92AFDBA9D5CC855EA00FB21CDCD61E55 /* SentryReplayApi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D17B4D2EBD84038F89A9286028324338 /* SRRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D9AB898C363D41D4E481EB5B188699 /* SRRandom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D19DD97327B84307FF002304266B6CFE /* SentryMechanism.m in Sources */ = {isa = PBXBuildFile; fileRef = B78012F8184B73CD5BA07D024CD7C475 /* SentryMechanism.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1A3EED2340F8541A6893AE20A39E996 /* SentryCrashDynamicLinker.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE09D1A76FBED0D1AC8C6F2A4339EE8 /* SentryCrashDynamicLinker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D25687C5F1F3840319A85BA24CAF9403 /* SentryCrashStackCursor_SelfThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 31C5457FF8ADE708DFF7EFB02311DB60 /* SentryCrashStackCursor_SelfThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2A185792053AD54488AC5C389B9D08C /* FileManager+SentryTracing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31662AC140EAB71ADE4F22051918EF76 /* FileManager+SentryTracing.swift */; }; + D2B29506D82889DDB36DBC0397A6C1A7 /* SentryFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B1AA9C2546C314F065772764262F6B /* SentryFrame.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D35474D31ACF0B987271A87E12ECBB01 /* SentryMsgPackSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 49A1639BD3DC7A32C3CA6A797E1E1FB7 /* SentryMsgPackSerializer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D37189908AD3964C981C1D41443EE2E6 /* MIKMIDIProgramChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F00EEF230C3E3427EB59590923088DF3 /* MIKMIDIProgramChangeEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D3AEAB21579101486860833407F8FDEF /* SentryWatchdogTerminationBreadcrumbProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C4A091BDDB40BA378161CF539D14D11 /* SentryWatchdogTerminationBreadcrumbProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3CB0EA1FB073DC73546BD989E9E5517 /* SentryCrashDate.h in Headers */ = {isa = PBXBuildFile; fileRef = 06B99B03C274E9A595B31BFBFD7D0E1C /* SentryCrashDate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3D9FE1C6993A1BF524E5A0D93B0A6A9 /* MIKMIDIMetaMarkerTextEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B4DD6C47B43DBC164DC611E6F13AC05 /* MIKMIDIMetaMarkerTextEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D41B1558F2B194DABF746BAF8ED4E866 /* HTTPConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = C419E2CDB019AEEA1BC2F89D332C4F70 /* HTTPConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D47F36B7B71C9C9A864564732C62DEAF /* MIKMIDIPitchBendChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 900BB119EB3B1A5260854113BB8B039F /* MIKMIDIPitchBendChangeEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4940D15E5A69A4145CE01ABF508A781 /* MIKMIDINoteOffCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BC187B3C34571706D0F5C0D90316ACF /* MIKMIDINoteOffCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4F14051B569C972387C2E5BF738447D /* DecodeArbitraryData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53597F7AC2AEF3EF5D07C8035E5FBA9A /* DecodeArbitraryData.swift */; }; + D4FF4B43431BBA0C6D474A76CEEB4D68 /* SentryTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = AABF144E4FECC804C88660851E7404BD /* SentryTransport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D51B4C3B26C59C01127FF546D58072FA /* SentryCrashString.c in Sources */ = {isa = PBXBuildFile; fileRef = FB469720391151A2908B891E2D0EB27B /* SentryCrashString.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D549C6440663FDEB2D98A0AF81FBB37C /* SentryMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E001A62F25B7B7A9B650A3091AE334C /* SentryMessage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D55B22CCA981119E53D4ADDA0F6AE71C /* SRURLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E0A3FCDC71A8763FDE07CCDD7D997F9 /* SRURLUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5733480ADE4F0D7072E8B67BFA93D48 /* SentryMaskRendererV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F896A2723E86A8500CA7B550BB64E1E /* SentryMaskRendererV2.swift */; }; + D59815B78595D3F76F0B229BF84BC66C /* SentryMeasurementUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 70B7135B7DF46A00145AAFE936274ACC /* SentryMeasurementUnit.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5C86884CCF9A94E636BEACA70766DD0 /* SentryProfiler+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 68E8C41B49F81031BD965867BD9FEA99 /* SentryProfiler+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5C9A9ACFB43D2A210FFFED85A4F2FB3 /* Locks.swift in Sources */ = {isa = PBXBuildFile; fileRef = D11D7A8CB26839CE3D0D488A84519F5C /* Locks.swift */; }; + D5E401251B54F1B883108A7E0FA4E1EA /* MultipartMessageHeaderField.h in Headers */ = {isa = PBXBuildFile; fileRef = CB10335A8CD8F95AB09C700E2790029E /* MultipartMessageHeaderField.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5EE12FF92A57DA41C2B756ED99E8C25 /* SentryCrashReportVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = F9F5EC2C5482AA58B1289D5A60A77530 /* SentryCrashReportVersion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D64ACA1172A92742BB5F818398679D4B /* SentryCrashDoctor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B16013CA9FBDBE5FD667A0613F0AE6B /* SentryCrashDoctor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6D524E93EBFF8099C40F23CE205AF9A /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AEC4A7F86D4B04ED290F84C4F3F1A8 /* StringExtensions.swift */; }; + D6EBBDE25E3A431AC59798CB39FFEE19 /* SentrySdkInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D9078F0D390FA276D09B7FBD1E1C37B /* SentrySdkInfo.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D714736AB346EDA89B6D4A682DAECA86 /* SentryEventCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C192767F2A4AB5D9C5EE41EBA673F032 /* SentryEventCodable.swift */; }; + D7389946104CE3C4360787C4A78182E1 /* MIKMIDIErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = C89629A69B3CC56BE474C28C8FBFBE8F /* MIKMIDIErrors.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D7F5A45FAADC2DF534FAE70C1B33666A /* DDLoggerNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 51FC85588605EB1B92C336B2BDE67BD7 /* DDLoggerNames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D812C9496306BC7AE193028D25D1785C /* CLIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BBC3A6510E964F9EFA08E197FA7AEF6 /* CLIColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D818A9EB32ED56D4D5244704C782C8E6 /* SentryANRTrackerV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B6215BF2862BE54E30D103E810503CF /* SentryANRTrackerV1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D848BC28D902E8D4D63DDCDEF4A97637 /* SentryAutoSessionTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = EC3925F70F53982E830A02382C273600 /* SentryAutoSessionTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D861908C7B2FFBFC6F0C2F9DF20AE3B8 /* SRHash.m in Sources */ = {isa = PBXBuildFile; fileRef = F4CE8575A6E0A2042AFB4F7402F4B92C /* SRHash.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D95B82A8765B5CD2C3305A4D7A2E67C5 /* SentryAutoSessionTrackingIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 58E6C8B30EB4F8596E89D4FB0FA66901 /* SentryAutoSessionTrackingIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D9C31F2630E7244EDC0F072A3F374268 /* SentryAppStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 335A3440400FC1A549AEA4C1BFF24F37 /* SentryAppStateManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DA31C8E72EC400E13E27B55981EDBDF1 /* SentrySpanProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E79D678484A20FBE09F8E74060B9AF /* SentrySpanProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA34335A10BA7DC8E9339CBFFC30B87C /* SentryUIEventTrackerTransactionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EDC34955C504DDBCF8A1AD1297F174 /* SentryUIEventTrackerTransactionMode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DAB9C8F959A12F0A4C5197D190B86435 /* SentrySerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = E7D040C37DFB42A6B0E036B875FF1959 /* SentrySerialization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DAEC0C29215563B912CA60C598932B83 /* SentryCrashMonitor_NSException.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F87D6C0D33933FE6DCFFD0A7105E4A /* SentryCrashMonitor_NSException.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DAF34FE37DC20E707478A6251666BE37 /* PUTResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EA0D791FD848CAEF9ED7FE5687CFAB5 /* PUTResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB76DAD2C09EBA53BE700326FB3C2C5C /* WebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = E1BD483179BB6B080A80DF000573F098 /* WebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB8AE50745EFAE2BB4CAE068EB2E4E30 /* SentrySubClassFinder.m in Sources */ = {isa = PBXBuildFile; fileRef = F15132121431EF0247B64069F0CA9722 /* SentrySubClassFinder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DB8CF0039C18E999CB56221A45FCAEB0 /* SentryLevelMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 60C2F6EAD8D037871381A8650AEADA79 /* SentryLevelMapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DBCAAC79F5BA298DFD938E1E14DDF810 /* SentryClientReport.h in Headers */ = {isa = PBXBuildFile; fileRef = D5D0C26AFCD97907D6F50B415AC6FB63 /* SentryClientReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DBCF49D8BEBE3A542277B62CEF331C3E /* SentryUserFeedbackIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = BA57C65239884442883C333375A3C57C /* SentryUserFeedbackIntegration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DBF2D9A520E92FC33481FF4E6AC2703C /* MIKMIDIObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 171F1991405DD0D7AC2B4215D68562DA /* MIKMIDIObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC24967AE97FE8E2DAE963375226ADDC /* UrlSanitized.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E3767A4C7B40C1BC79A72F0D5A95EC /* UrlSanitized.swift */; }; + DC36A9C4E4A4DDBD7E38E1222193995B /* SentryCrashJSONCodec.h in Headers */ = {isa = PBXBuildFile; fileRef = 822F0A7C7BF1AE03A84912103DD54E72 /* SentryCrashJSONCodec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC7A968C3A580D3C67DF9C4DF20CC073 /* SentryTouchTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B4A0BA061D8447BF292ECB5B6EE7AFF /* SentryTouchTracker.swift */; }; + DD387F129BFDBC8C2330F2244147854C /* SentryContinuousProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 816878C82AAB045C22EB363A94907871 /* SentryContinuousProfiler.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD7EBB938DEA250F9ECFF379C1D71064 /* MIKMIDIChannelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BA81D88AE03EA2FF4486A784C195958 /* MIKMIDIChannelEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DDBB20A63F4B1015E8E50D42E667157C /* SentryViewHierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0309089EC7FB1181A7DD80466907B8C6 /* SentryViewHierarchy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DDC04F1F40194B6F99A665ED8851CA35 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 90AD304C8E409EE16CB4625F8EC72805 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DDF30C320E253A0DDA3EEA69B29BD614 /* SentryCrashMonitor_AppState.c in Sources */ = {isa = PBXBuildFile; fileRef = F73937115036161B539916F5B1B13E50 /* SentryCrashMonitor_AppState.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE139F0119F4CCB6F9B1747189B34B03 /* MIKMIDIControlChangeCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AA26B7092A6E27412E421C1E0D8914D3 /* MIKMIDIControlChangeCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE4BE65FD4B44A0AFEBF162095F3E62A /* SRDelegateController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0186A196AF5F90E4C6D0D7FB7705742B /* SRDelegateController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE787446F1BAD1C6D7BF51D6AE5C2596 /* SentryNSDataSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 37C9372E625140AF98A56AC71B1DC432 /* SentryNSDataSwizzling.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DEC5BF4CBF40609D05DA476FA14A5895 /* SentryUserFeedbackFormViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2D59258969035EB099022748EA11377 /* SentryUserFeedbackFormViewModel.swift */; }; + DF0F2D2241D440957D74856E84D81575 /* SentryMaskRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2F3271F4566C0BDFB4196FF1C9919D /* SentryMaskRenderer.swift */; }; + E0056BA55FE1377B22B94F7674864D44 /* PSWebSocketUTF8Decoder.m in Sources */ = {isa = PBXBuildFile; fileRef = E08F1F04EC8D67D7C213DDB5602F10ED /* PSWebSocketUTF8Decoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E01A4E9066B4887F2778051C0DE1E6CE /* SentrySamplingContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E0C5CEB1BBD25DA922B268963AEC14 /* SentrySamplingContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0426162C513CEA38690857C81960BB3 /* SentryDelayedFramesTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = A5007C5E09BF8160EC9C14A0FD651801 /* SentryDelayedFramesTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E06099C5AFD057E98FB3609C31206043 /* SentryCrashInstallation+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 23EA7DC598BF1CD7109055D7FC36CAAE /* SentryCrashInstallation+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E08D77FEF51EAC8B129845D0E39FF58E /* MIKMIDIPrivateUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = F8DDC460A7A6A031DC330E73B2D07AEA /* MIKMIDIPrivateUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0BBDA0127F46E072AB6B7CB406C0654 /* SentryMechanismMetaCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C106F8A28B9FF9192772B0A8787F7A1 /* SentryMechanismMetaCodable.swift */; }; + E0C0028142CF6612C3EC3A907A67425E /* SentryError.mm in Sources */ = {isa = PBXBuildFile; fileRef = 689B54FBFF07967EF1A404CF0316B242 /* SentryError.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0D40F3626AA7C0BC7B2E2D4B18003E8 /* SentryReplayVideoMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 879DC3AEC1FE349460CCF05A0E44311F /* SentryReplayVideoMaker.swift */; }; + E0FFD7B85FB104FDB3D25AA36D6E8D65 /* MIKMIDIChannelVoiceCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CEA682C719C79FAFB6D025E3DE00B7D /* MIKMIDIChannelVoiceCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E10AFE986A49B894AD948B932CA7A753 /* SentrySpanStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = AD92D7F1003AD0C23D2C15B9FC128D72 /* SentrySpanStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E13227410435F5E5A80B64BB6068C594 /* SentryScope+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 391C2BF6E54F38FEEFC8ECA4CF69623D /* SentryScope+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2E5300FB3FC6E36803E7DD0BD0CB990 /* SentryTransportAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 11006FBB2800F74CE11220FD8E6F9E38 /* SentryTransportAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2ED3F41B781D5991DE217CC12701414 /* SentryFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 35C63915FADE137DBADEE5E26D32588E /* SentryFrame.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2FEA37424C24D30CF2635ED8F9B5A63 /* SentryDefaultObjCRuntimeWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = A0BE50811C81F94CA06D0BF50EAAA391 /* SentryDefaultObjCRuntimeWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E304A655B8E34FC15242023B457CE94D /* SentryClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FD01BCFEFF8D3DD043FA95A330D38FD /* SentryClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E3CA30DB8C3DD4DB675507632B34342C /* SRHTTPConnectMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 28B784B40871DF1892423829E2610DB4 /* SRHTTPConnectMessage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E40E95105A0A319631A2C908A706DFD5 /* PSWebSocketNetworkThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 508261EBE24B47C5F9D0AC95B22E953E /* PSWebSocketNetworkThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E429C02C828D0B5121D9E432FAE4FF7C /* SentrySpotlightTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 00700DAFDF27E96BF9E57ED2F340FA09 /* SentrySpotlightTransport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E495C7D82A675710E943171E5C5A792A /* SentryANRTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C45863BCD0D25D16453728AE2F4064 /* SentryANRTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4B6D2C77E87FF90AD8A34A7A4901D6F /* DDASLLogCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D3CB77B497E3A08D81AED29EA3E0A29 /* DDASLLogCapture.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E557AB60AFFDB0B3C0A691778736B548 /* SentryDispatchFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 50040FF2187CE4DE3EA62225BEFF4234 /* SentryDispatchFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5699D45C639C931538FB25584061865 /* SentryNoOpSpan.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A9C1914CC63892717E2CB8478F876A1 /* SentryNoOpSpan.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E59C0B1F1BF28B5985D55EEB656F02B3 /* SentryProfilerTestHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 524E182F82AEB8CD9194A07F1BB027E8 /* SentryProfilerTestHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5A986011016FACE384BA210D3C26A92 /* SentryCoreDataSwizzling.h in Headers */ = {isa = PBXBuildFile; fileRef = CF0D45FE32476F1A1BC9CB244CF750D2 /* SentryCoreDataSwizzling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5DA66AD5AAEF8EBBC71174149537DB5 /* MIKMIDIMetronome.m in Sources */ = {isa = PBXBuildFile; fileRef = D1CB0D70200ACA8090748F69D49324EF /* MIKMIDIMetronome.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5DE6C77166FB542286655EA3FE5A0F6 /* MIKMIDIMetaLyricEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2D1326B0C7076D97E0DBD731E46EB4 /* MIKMIDIMetaLyricEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5E06E6C9B84E85646A06525A26F56A3 /* SRRunLoopThread.m in Sources */ = {isa = PBXBuildFile; fileRef = AC0A367A791AC08CDA9C2A8610A45D36 /* SRRunLoopThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6020011AEFCB2595B82F3CC7B2DC604 /* SRIOConsumerPool.m in Sources */ = {isa = PBXBuildFile; fileRef = A11C17EE437FC5AB0BDA0325363E437A /* SRIOConsumerPool.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E609725CB1F666950291D812ACAE6709 /* SentryTransportFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = EFC1CB0E264A9C5A2B66D9D149C7016E /* SentryTransportFactory.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E658A13FC9116F3F87550437EA0730CE /* CLIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 415E9C97D6ECDBD29EDC9F238F4F55D9 /* CLIColor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6B00DF85A36AD08676F1D8C6D2F53BD /* SentryCrashBinaryImageProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B93D92D41E4FC4CE881A8F256A2B8C0 /* SentryCrashBinaryImageProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E6DF6A85EB8117DDBB18A008479BF66E /* MIKMIDIEventIterator.m in Sources */ = {isa = PBXBuildFile; fileRef = 360DCC1ECB42ED92A9FC9B41228892B8 /* MIKMIDIEventIterator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6E5F8FA1541D7BBBC3514CBEA05A2C8 /* SentryDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 77725C1A8C7C9731D6A9DFD472EE792F /* SentryDevice.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E70A122B925EF88DE4868945EDAA9F45 /* SRMutex.m in Sources */ = {isa = PBXBuildFile; fileRef = B64EC76C48BA328809DAD17AB9C9724D /* SRMutex.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E70EAA952C9460755F73D757DAEC074A /* SentryCrashMonitor_System.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B08C2CC0B3396AEE5254F033FF77095 /* SentryCrashMonitor_System.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E765C0A5FE53ED64D51CB1413CBC356C /* SentryInAppLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = 942CB785F10EF5D302CBEE0B17B22874 /* SentryInAppLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E79F21238BEDB440EE8E8D4EB62F8027 /* SRSIMDHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = BB70962A26769963C9814D1B38668169 /* SRSIMDHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E8267EB1D4C1432F5AED57091147C2EF /* SentryDataCategoryMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 36FCFEE797CF5B39D2CA3BEEB8344416 /* SentryDataCategoryMapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E8665F2845812B5606B9D65CF29DA6C2 /* SentryRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D796B4EABFA42393A5836CAA14AD6FA6 /* SentryRequestOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E8EB79E68B63681060CA8EB7B25F6286 /* SentryGlobalEventProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1938DED383B67FD8F637FEEBAE7F430F /* SentryGlobalEventProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E90473F773FC825A28741985C81E759A /* SentryProfilingConditionals.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DBC18A079049AE86C045E2A6F3913B8 /* SentryProfilingConditionals.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9313FF456B9718327CB8466AD4C59CD /* SentryFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 948029A4730DA2DAAB70595E08A0DE26 /* SentryFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E94F136D3364ED3D97027A94EC76457D /* SentrySDK.h in Headers */ = {isa = PBXBuildFile; fileRef = F407A101E944888391EA94B0FB530C8F /* SentrySDK.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E96C274175846879B4D78DED63C88840 /* ORSSerialPortManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D6B9550261A744095833786371052979 /* ORSSerialPortManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA0AB6FFE52BABDBE184D1328AC789A4 /* SentryBuildAppStartSpans.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B1828181C49FA6C359B80A417C8A6B /* SentryBuildAppStartSpans.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA7DA1B2AD0F3828FD53F7B9AFA7687D /* SentryExtraContextProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ABA2E4A6693FE9390380ED94ADB6F3F /* SentryExtraContextProvider.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EAEBC09AD4008AC0742E8A9115ACE29C /* SentryRenderVideoResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DADCFF9AD9131B6560FF74219F2EFC /* SentryRenderVideoResult.swift */; }; + EB0DF7D125A3AD67629663F719CE0656 /* SentryWatchdogTerminationTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 93823E72A4537D395A60EDB02FBB61A3 /* SentryWatchdogTerminationTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB18ACE09F8AE8796C786A3DE67E7BD9 /* SentryAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = F53B771770FB3F228A246488E0BEB0AA /* SentryAttachment.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB44AD370A50DE5FB423D07C11B4CF9E /* SentryReplayRecording.swift in Sources */ = {isa = PBXBuildFile; fileRef = F49B408433BFA6CB28661256C630D5CC /* SentryReplayRecording.swift */; }; + EB5227D0202A5468DDA74A7D21BAA5F2 /* SentryCrashStackCursor_Backtrace.c in Sources */ = {isa = PBXBuildFile; fileRef = 8C2AF0ED5678F26A199D1187DF622757 /* SentryCrashStackCursor_Backtrace.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EB79600E2115A9FB3680C2E769609938 /* SentryFramesTrackingIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 552B32C071B7653D45542DD29EA3802E /* SentryFramesTrackingIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC0C24B54A1D812A54D5D8F561B73607 /* SentryTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 7338F9FF638CCA8710054E9A1F262E5F /* SentryTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC1037BACC8D9CE169B4E41BF10ECA7F /* PSWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E78D3A69861AB0219C3943C07027F62 /* PSWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC1E24531AC3032607034314AEFFC99E /* SentryFramesTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BE4BDA822AE557976822765F2B7B83D /* SentryFramesTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ECCCC855E6C4F77A1EF7F6684E2FB561 /* SentryScreenshotIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = A33CB6C1BE62CF73171734DD2FABA749 /* SentryScreenshotIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ECDDD1272A199967D7FC84780389D0FD /* SentryRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F35667B0A3D2412ECC5172862CC3F7 /* SentryRandom.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ECEE58BDFCE4FD37C45EA03707E6D546 /* SentryProfiledTracerConcurrency.mm in Sources */ = {isa = PBXBuildFile; fileRef = C4D6EFB2B1362021F1D712F86CF33CEF /* SentryProfiledTracerConcurrency.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ED984A46C6DD5DC56552F77EED77B3D1 /* SentryEnvelopeItemHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C80EAE42EB587D68B56A5C4CED3B876 /* SentryEnvelopeItemHeader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EDCF7A61FC0C565EAF0D6C4FBCDF0892 /* SentryDiscardReason.h in Headers */ = {isa = PBXBuildFile; fileRef = B84B3AF41AD3E766A8BDE34F66A1D4F3 /* SentryDiscardReason.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EDD842D874D925F0E3C4F3361C3639FE /* SentrySysctl.m in Sources */ = {isa = PBXBuildFile; fileRef = 37E037BE692A1A0CF1878CF5F94EDBB2 /* SentrySysctl.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EDF1DC16F36773081AA4592C9FA3537E /* SentryCrashReportFields.h in Headers */ = {isa = PBXBuildFile; fileRef = DC7E77EC1685B63E80F5B84300084065 /* SentryCrashReportFields.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE31346308B46463CEE33968745BAB42 /* SentryAsynchronousOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E273F3CEAB5477293E0BE3F3A2C3288 /* SentryAsynchronousOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE319256F04F4DAD9EB868F5B618CC8D /* SentryWatchdogTerminationContextProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9915491130B686F27F2481A44F5A4A06 /* SentryWatchdogTerminationContextProcessor.swift */; }; + EE7057E480A09AF98C398C7363190660 /* MIKMIDIOutputPort.m in Sources */ = {isa = PBXBuildFile; fileRef = F45A0A3556574DF777A76D51981FEC1E /* MIKMIDIOutputPort.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE7E80FAD619A1F9A8F1633011739C27 /* SentryNSDataSwizzling.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D573D5060C8E9CC37160B21F5E892EA /* SentryNSDataSwizzling.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE92E2B235DA275C2AC2C1C54CD65234 /* SentryByteCountFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 48C45256924956809E4091ADDF1A3A9E /* SentryByteCountFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EEAB563619E929B82433FE5E12FFCF17 /* SentryUser+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 21F2D2480974F5A56CC0FAF78D6BB097 /* SentryUser+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEAECE6CB1438F93B151FC25E932505C /* SentrySessionReplayIntegration-Hybrid.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D9B4E23D028CC45D6ED68BA88D78D5 /* SentrySessionReplayIntegration-Hybrid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEEB92CF6F67BE8DB04ED29870C0F67D /* HTTPFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = DCF66FA92D4BDA2A865D6042771BEEA6 /* HTTPFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EEF8E787445D62BE1F36C46BEFDB32EE /* HTTPHeaderSanitizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9039BCB072659E5080CF899BF027D8C /* HTTPHeaderSanitizer.swift */; }; + EF0E6DE02E0506AF08501928D4832270 /* SentrySpanOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BB65EB30E6B3A338389AB76D4C7C21E /* SentrySpanOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFB462181F085EDC8DEFBA6A59499073 /* SentryExtraPackages.m in Sources */ = {isa = PBXBuildFile; fileRef = C58494212C3114ECFC538790B00F3137 /* SentryExtraPackages.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFB743732D9B8BF02F9FE21E7811971A /* SentryUserFeedbackWidgetConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB25D52BDCCA8BADA23CDDB732970728 /* SentryUserFeedbackWidgetConfiguration.swift */; }; + EFCA1082930DB9AA0BB80B358DF3D6D6 /* SentryUserFeedbackIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 057AD729AE1188D62A26375A83AC4116 /* SentryUserFeedbackIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFD9F2D997941D14CF5A624AA05C34AB /* SentryANRTrackerV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F0C1CCE4B558F1279E802EE852EC994 /* SentryANRTrackerV2.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFDBD0DE51B151B8D601FC50303E1616 /* SentryAsyncSafeLog.h in Headers */ = {isa = PBXBuildFile; fileRef = E29C5F3E023FA7648ECD69C2AF03B8A2 /* SentryAsyncSafeLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFE04C2E7659A1360BE49A5E307F6CFC /* SentryThreadCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E191F7C692908966320448D84B64D5FA /* SentryThreadCodable.swift */; }; + F07F508EA586669E6D2BE7DCB52AD741 /* SentryDispatchSourceWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C38EFCEBA8BE2A8CDC50438F91FF27D /* SentryDispatchSourceWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F086D0BBE38EF80124FF54B94A3707C7 /* SentryViewControllerBreadcrumbTracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA5942D9455C32587D025AFF9656C9A8 /* SentryViewControllerBreadcrumbTracking.swift */; }; + F08BA07479246AAB41A4DB10472C9DC6 /* SentryError.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE839CBA122178697484BEF9BECF4FA /* SentryError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F0F6B80C2DC1DD2B361BA09B1D9F9C2F /* SentryCoreDataTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C1954C2CCE80895772DCDBD072BCCF /* SentryCoreDataTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0F7909D7F93D5DB0032507681D0AA82 /* SentryThreadWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BC59CF996A489057C315856409524E7 /* SentryThreadWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0FE1D343F3DE57FC5187C07551C88C5 /* MIKMIDISequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A5594B2E9CD8D747E4E87031ADA247 /* MIKMIDISequence.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F129D57832413170772D8DFD97A76E39 /* SentrySRDefaultBreadcrumbConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D326D07867B7B21C8779DB2B151C283 /* SentrySRDefaultBreadcrumbConverter.swift */; }; + F1751F588BABEC15F2BBB9136C058813 /* SentrySessionReplayIntegration+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE2FF0132BDD1ECAA2EDBDDBD62CBEF /* SentrySessionReplayIntegration+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F1BFD0889EF0A495816E5EAE3D6DA604 /* HTTPAsyncFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A9F9D7E7B24382E9790537A20F8D351 /* HTTPAsyncFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F1E28CF44410D38E2CA51A402AA3FA84 /* SentryUIDeviceWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F7E686FD62F8C27530845E92C210C0B /* SentryUIDeviceWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F1E7118A30249E1B62AA898801267246 /* MIKMIDIMetaCopyrightEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = ECEDD82BF9BE05D89E821494F455F638 /* MIKMIDIMetaCopyrightEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F29BC6F92214FDB07233AF727CB788CA /* MIKMIDIObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 99FCD39FFFC8129127C5CA19016B47A0 /* MIKMIDIObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F32408F5609C8E954C92827E36DC1E47 /* SentryCrashSymbolicator.c in Sources */ = {isa = PBXBuildFile; fileRef = 49641AC5B3D706F8CF1FE35CB2399AAF /* SentryCrashSymbolicator.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F3C57AD95903021184F19C0CC219C108 /* SentryMachLogging.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8882043BE2E81AC642F94108FEB6E661 /* SentryMachLogging.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F3C95C3B0A2CF9F5E7C7A8E45E65D1C2 /* SentryWatchdogTerminationLogic.h in Headers */ = {isa = PBXBuildFile; fileRef = D58D07EE1B2F64368291080C9CE7638B /* SentryWatchdogTerminationLogic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3CE206EC6F7C6791D7CE9A69A435C46 /* SentryStackBounds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EFC9CCCBA99E17CCBF2B9C9DDAEB2455 /* SentryStackBounds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F3CF9FA694E1EA0D6033E6289FD461FA /* SentrySpanDataKey.m in Sources */ = {isa = PBXBuildFile; fileRef = C428B8116EAAA28CD94300AFED41D724 /* SentrySpanDataKey.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F3DA6A54D9521C8B6DB1D47AA6843085 /* SwiftDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16611112816943270A01EE37757D4D25 /* SwiftDescriptor.swift */; }; + F3E433F785FB7E6157693B3103312E3C /* SentryRetryAfterHeaderParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 152C2563896D6BC7DE77128922674517 /* SentryRetryAfterHeaderParser.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F4876372024448E43D28CA900A40BE4C /* MIKMIDITrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D1FE6F5DA923F3BB0D4D339BEFDD50D /* MIKMIDITrack.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F4E35CF3914355CACC85CAFC0837CD85 /* MIKMIDINoteEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 104BF97B96109AFCAE80915D3820EA10 /* MIKMIDINoteEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F4FD7A04ED977D591FA0827FDC46959C /* SentryUserAccess.m in Sources */ = {isa = PBXBuildFile; fileRef = 38A7C69557DDF773EC87A366583F8B45 /* SentryUserAccess.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F50990C80CD5E44F8D9DCA3D7B7597F9 /* SentryCrashReportSink.m in Sources */ = {isa = PBXBuildFile; fileRef = E22A100EE9161E47FFDECB474D0DDF5A /* SentryCrashReportSink.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F5183E5536CEF22BEFBD2EDC52AA394B /* MIKMIDIMacDebugQuickLookSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B8567ED3FCD2D3D4C083513CDF18F09 /* MIKMIDIMacDebugQuickLookSupport.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F5BE08F494AA57BEAD1EE82F0AC8B625 /* SentrySpanId.h in Headers */ = {isa = PBXBuildFile; fileRef = 165973CD36A0311D8D356B3626E22174 /* SentrySpanId.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5BEB5DED1679872FE9EF415A78EB9A2 /* SentryHub.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C239FE55905A818D4817477466EF2DC /* SentryHub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5C37541A81E6815C97F0E0D3E1CC95D /* MIKMIDICommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 23113F0E22ACDD7ED2A1318AEB850B13 /* MIKMIDICommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F605E61A3ED4FF48F558601ACED519B3 /* MIKMIDIPitchBendChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D183F03D10C175042D263972039FCF /* MIKMIDIPitchBendChangeEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F61752584F3FCD856C7597C48409047E /* PSWebSocketNetworkThread.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A2A8B7EADD76FB00CA167067EFFC83 /* PSWebSocketNetworkThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F633EF09172038406D097682DD9A6E71 /* MIKMIDISynthesizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61984F4DE6B94D0888C23ECD72BABB90 /* MIKMIDISynthesizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F6AB6FE29F3EC48D6B2BE71E79EA5D60 /* SentryTimeToDisplayTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B52AD8B3567709904C6FE56F48D3453 /* SentryTimeToDisplayTracker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F71638B16840A151EB4C6AE5F807D72F /* SentryUserFeedbackFormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF32B9A7EE205072661EFE7A2480EFE2 /* SentryUserFeedbackFormController.swift */; }; + F783007C24B605813454F158579A35F6 /* MIKMIDINoteCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B7819928A362B7331919F4DDEF0E2C4 /* MIKMIDINoteCommand.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F78F5759E119E455E1885104D61ED92C /* SentryFileContents.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABE9A4F7047B5CA0F0E9DFAFB201D181 /* SentryFileContents.swift */; }; + F7D0FD819BED2413298ECF29108A2CB7 /* MIKMIDIClock.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A3EA46C044E8B9D084D7B00DEF7A39 /* MIKMIDIClock.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F833F543456648495294A136397C3DF0 /* MIKMIDINoteCommand_SubclassMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C8FFEDE08675BE4F3ED412F605A9BFB /* MIKMIDINoteCommand_SubclassMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F87529327D6B9425FC7518DCF0A7C082 /* SentryCrashStackCursor_SelfThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 69A366A6EF1278B84BF0FC8317B22279 /* SentryCrashStackCursor_SelfThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F8D5FC6D1CB6AAE8CC3F141392F8D6B4 /* SentryUserAccess.h in Headers */ = {isa = PBXBuildFile; fileRef = C78FBA240F2965B3B4E28D3EDDE8995A /* SentryUserAccess.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F8DC05BCB5F18CF8811B891235D7D6C1 /* SentryScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 66E753CD0477257070A087BD81802C7B /* SentryScreenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F91B70BE23BC18F1D4A5AE08F4B701B7 /* SentryThreadMetadataCache.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A3BBA64625A152A56BECC443B01EC490 /* SentryThreadMetadataCache.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F9528D561E5651F5BC3F3EB8B95F8412 /* SentrySwizzle.m in Sources */ = {isa = PBXBuildFile; fileRef = FFAEA1F05A0658B4A0B5CEEDDA89D765 /* SentrySwizzle.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F9FE5FA06E1ACAC8FE84805BFE1F77B4 /* SentryFeedbackAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = EBE1B49B10F91FE9F03486DAA142F4B7 /* SentryFeedbackAPI.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FA3ECA7D451964FE16DF61714EACE759 /* SentryScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 603FFDB6420C6830994B52F4E6633EC5 /* SentryScreenshot.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FA486F2D3B4F6D1213F5D8007AF487C8 /* SentryEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 52A19E71F98BD2CAA84B502AB5867449 /* SentryEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA504540F1E25D6E171185DEF02A2845 /* SentryScope.m in Sources */ = {isa = PBXBuildFile; fileRef = F866153E81C58FF17A1278AA81319568 /* SentryScope.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FAA387BA41C5E3F3B87E505AE59E954A /* SwizzleClassNameExclude.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3D6FEAF72DB40ACDB634885253F02CE /* SwizzleClassNameExclude.swift */; }; + FAB1B5CBD3666FBF748E275ADB084FD0 /* SentrySpanStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = A0BF15DF33FD6B2353C4BFF2ABBC0D07 /* SentrySpanStatus.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FAD756A8AC5E7447C6DDC351D12666AF /* UIViewController+Sentry.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A8A3DAC173E05B2F0BB40A237D3A21 /* UIViewController+Sentry.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FAEBA0E80A2F4AA37F9DB225C3926455 /* SentryDelayedFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = D290C44BD1A044F8C5EFBE02E3B262CB /* SentryDelayedFrame.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB163D1E698FB965E4266B4F79D64817 /* SentryNSURLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B398234C45BBBDEEF37448D697DF91A9 /* SentryNSURLRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB6B8149F73790F928ED5A3C3BBD142D /* SentryViewHierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A614C469B3A69DBEC8E243609F766B8 /* SentryViewHierarchy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB75B47ED4D49DC7874552A940D06ED0 /* SentryWeakMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 23F4CF1FE6BE7A0530D0A1896F8B769F /* SentryWeakMap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB8ECC4837620B2D695C96C8C9986C7C /* SentryFeedbackAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = A6AB562B89B46DFF4A53F7436A71C1EF /* SentryFeedbackAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBA5671EC48012906928BF59BB0F2C14 /* DDMultiFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 76FF09B5E0DF61D1A9A6AB15FAF0AD06 /* DDMultiFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FBAE79450222FEE904DE7807A5D71877 /* SentryNSURLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 71A8569DECA10EFBD288BB23D7146FFC /* SentryNSURLRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FBDCDD0297AD54010DFB5E995985A483 /* SentryHttpStatusCodeRange.h in Headers */ = {isa = PBXBuildFile; fileRef = A52ECA8F50A2C63943F1ADC8FBB3E32D /* SentryHttpStatusCodeRange.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC12B41476F15DF1816E5C5D10FA1D36 /* SentryNSProcessInfoWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0B4C97CBB8B50F85E6A7E9EB1DE1D182 /* SentryNSProcessInfoWrapper.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC1570E0439F86EAF0FF19951E711598 /* SentryStacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = CB5B404568287168B94D32C501CF7758 /* SentryStacktrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCCF886A7583085A1D259A284A73D887 /* SentryMechanismMeta.h in Headers */ = {isa = PBXBuildFile; fileRef = A3BCD36EF9F7213689C999CEFEEB289D /* SentryMechanismMeta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCDE9A93B4E90375C997AC072398093E /* MIKMIDIPolyphonicKeyPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C92DD161BB2424E19D2BD9FE1E5BB706 /* MIKMIDIPolyphonicKeyPressureEvent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FD40E59736143D96A7E5F609616293B5 /* SentryDispatchSourceWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F7BC1BF1CAFE7DDAB2B8CE66385058B /* SentryDispatchSourceWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FD4F923A96336EDF4E9DA6A8304FB7C4 /* SentryPredicateDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 630A4D35030DB487DB342C88474FB58A /* SentryPredicateDescriptor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDE0B4F2C979CB8C32820B66E51DD20E /* MIKMIDIMappingItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D56D49745490A9D00598A677A94F507 /* MIKMIDIMappingItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE002852C11531402A736DA0149E1FA4 /* DDLoggerNames.m in Sources */ = {isa = PBXBuildFile; fileRef = 07EB3E0573661149F7B7224FA29B04EE /* DDLoggerNames.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FE5A6C9CDF46902BAD6B839AF544D874 /* SentrySwiftAsyncIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = C0DA99FF20D6602D9E3BE42E87CD38E0 /* SentrySwiftAsyncIntegration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE6B5F1DB62B560D7965D2F66D64DB80 /* SRPinningSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = C04E40D0463E2181F17F8207D3FD36CF /* SRPinningSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FF9BDAB8DA67173B744A9A503D7699FC /* SentryReplayFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790E56B0AC092A74B4E24B29B36EFA61 /* SentryReplayFrame.swift */; }; + FFC15F8C694ECCFAC50BC6D899EAFBCB /* SentryEnvelopeRateLimit.m in Sources */ = {isa = PBXBuildFile; fileRef = 9802EE34E6F9FFD1811AF78199EBDCBF /* SentryEnvelopeRateLimit.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0C33701A2EF5965F295B7FB6B5E81424 /* PBXContainerItemProxy */ = { + 1326597EF8ACAE918E763F110246C0E7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 83EFF9537A7F38964851032EF617DE38; - remoteInfo = PocketSocket; + remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; + remoteInfo = CocoaAsyncSocket; }; - 153B011777FD92C53882013EF118F4E2 /* PBXContainerItemProxy */ = { + 1BC3579B9752E49C76B967DA8F79DE65 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 94BDCD90B52278D1FB244A66E8B95A4A; - remoteInfo = Sentry; + remoteGlobalIDString = BB446757690D70C17D8A0A56E3FE1C37; + remoteInfo = ASCIImage; }; - 18F9CFACC79073DEBF05739447958F5D /* PBXContainerItemProxy */ = { + 25EDC0409EB03E174D9171F0411D27B1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = E95654B155D25890BE8E26081FCA8265; remoteInfo = CocoaLumberjack; }; - 336D80FADEE195A6C01BDBC0E224FD23 /* PBXContainerItemProxy */ = { + 395C18F33C0F0ABF92A965EEFAF2C22D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 9310B3A9161D4A357995A672BC027CBF; - remoteInfo = MIKMIDI; + remoteGlobalIDString = E95654B155D25890BE8E26081FCA8265; + remoteInfo = CocoaLumberjack; }; - 5164237F76A6DEDB999ABCAD4743E1E9 /* PBXContainerItemProxy */ = { + 4801A47976E0EA1F57613B11F4E383EE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; - remoteInfo = CocoaAsyncSocket; + remoteGlobalIDString = 276021C4482165D46E0CBBEFB822FE95; + remoteInfo = "CocoaLumberjack-CocoaLumberjackPrivacy"; }; - 6163E4293E3820766CDB11A8807C63A0 /* PBXContainerItemProxy */ = { + 5D2DB1C7C9D8C3B1678EDD86D19D016C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = ADF9F3B1BBEC7F642AA07171CF4B2509; - remoteInfo = CocoaHTTPServer; + remoteGlobalIDString = 18ABAA2950D5B4418A5DBF7F07F33088; + remoteInfo = ORSSerialPort; }; - A27E3C39A61E64FE888F18C5815B0618 /* PBXContainerItemProxy */ = { + 87F8F8F4BA2482EF09D4CA59133DA842 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 276021C4482165D46E0CBBEFB822FE95; - remoteInfo = "CocoaLumberjack-CocoaLumberjackPrivacy"; + remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; + remoteInfo = CocoaAsyncSocket; }; - A59C8166B1670B6C0EBA0496F50ACE80 /* PBXContainerItemProxy */ = { + 92DDEAF53C106B56478C2972F29623C3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = BB446757690D70C17D8A0A56E3FE1C37; - remoteInfo = ASCIImage; + remoteGlobalIDString = ED77B4B88587C894E85C361023D67C53; + remoteInfo = Sparkle; }; - C63313907FBE0765C8410FBE552FB99E /* PBXContainerItemProxy */ = { + 9DDB3A9AECFE8B00D45937BD9CA84082 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = E95654B155D25890BE8E26081FCA8265; - remoteInfo = CocoaLumberjack; + remoteGlobalIDString = 97C36B3C576D3765DAAE4EA7AC1E9ADC; + remoteInfo = "Sentry-Sentry"; }; - C875ED04A734CA02BD07A6BB143667A8 /* PBXContainerItemProxy */ = { + BCED0731327EA89A35B5C313CE08069D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091; - remoteInfo = SocketRocket; + remoteGlobalIDString = ADF9F3B1BBEC7F642AA07171CF4B2509; + remoteInfo = CocoaHTTPServer; }; - D5DA9ADF79485913B4BA2C2FFF8AD895 /* PBXContainerItemProxy */ = { + C8126301BEF4FCBB6FDB98684CD66FFE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 18ABAA2950D5B4418A5DBF7F07F33088; - remoteInfo = ORSSerialPort; + remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091; + remoteInfo = SocketRocket; }; - F1EEC7A79844ED15519CFB1F0012C3FD /* PBXContainerItemProxy */ = { + D3842F6D63B14BAAEF05E47F1C488FD5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = ED77B4B88587C894E85C361023D67C53; - remoteInfo = Sparkle; + remoteGlobalIDString = 9310B3A9161D4A357995A672BC027CBF; + remoteInfo = MIKMIDI; }; - F9169E41DEA0C5E6DF22FF430C3E5CD6 /* PBXContainerItemProxy */ = { + D4DBAB5C30C3200CE86C4820D6F9B86C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 97C36B3C576D3765DAAE4EA7AC1E9ADC; - remoteInfo = "Sentry-Sentry"; + remoteGlobalIDString = 83EFF9537A7F38964851032EF617DE38; + remoteInfo = PocketSocket; }; - FFD7A0DEE8C0AFDF2992C67336AFBA8F /* PBXContainerItemProxy */ = { + FF3EC4BE31EED64024155978FAADC316 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 6083682834ABE0AE7BD1CBF06CADD036; - remoteInfo = CocoaAsyncSocket; + remoteGlobalIDString = 94BDCD90B52278D1FB244A66E8B95A4A; + remoteInfo = Sentry; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 000FD6662207B7B9FE7ADD0446A98A8A /* SentrySystemEventBreadcrumbs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySystemEventBreadcrumbs.m; path = Sources/Sentry/SentrySystemEventBreadcrumbs.m; sourceTree = ""; }; - 002E8EAB517053DB5B6AB6B346CEB89F /* SentryMetricKitIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMetricKitIntegration.m; path = Sources/Sentry/SentryMetricKitIntegration.m; sourceTree = ""; }; - 00319DDC9C74F375944A8E25FE81903E /* SentryTime.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryTime.mm; path = Sources/Sentry/SentryTime.mm; sourceTree = ""; }; - 0034B207B770B243B1D14A71C2DEDE38 /* SentryCrashInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashInstallation.m; path = Sources/SentryCrash/Installations/SentryCrashInstallation.m; sourceTree = ""; }; - 00C5F4359E73A5445CB4E22E374C49EC /* SentryNetworkTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNetworkTracker.h; path = Sources/Sentry/include/SentryNetworkTracker.h; sourceTree = ""; }; - 00CDAD423E0615A5F1B73567AAE45AEC /* SentryWatchdogTerminationLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationLogic.m; path = Sources/Sentry/SentryWatchdogTerminationLogic.m; sourceTree = ""; }; - 00E7A0FD17A79CB0D4D3D8BBFF451534 /* SentryStacktrace.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryStacktrace.m; path = Sources/Sentry/SentryStacktrace.m; sourceTree = ""; }; + 0013D56BADDF79F078E56D7D1608765C /* SentryCrashReportStore.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashReportStore.c; path = Sources/SentryCrash/Recording/SentryCrashReportStore.c; sourceTree = ""; }; + 001F7086DC38609BA43D840DA7572E9B /* SentryEnvelopeAttachmentHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeAttachmentHeader.h; path = Sources/Sentry/include/SentryEnvelopeAttachmentHeader.h; sourceTree = ""; }; + 004E9D8F0572D852FBD4217E5F36B340 /* SentrySpan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpan.h; path = Sources/Sentry/include/SentrySpan.h; sourceTree = ""; }; + 0056FAD39DB21391884A09035A6D2260 /* SentryUIEventTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIEventTrackingIntegration.m; path = Sources/Sentry/SentryUIEventTrackingIntegration.m; sourceTree = ""; }; + 00700DAFDF27E96BF9E57ED2F340FA09 /* SentrySpotlightTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpotlightTransport.h; path = Sources/Sentry/include/SentrySpotlightTransport.h; sourceTree = ""; }; + 009C928869658FEE95DB027504142E72 /* SentryVideoInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryVideoInfo.swift; path = Sources/Swift/Integrations/SessionReplay/SentryVideoInfo.swift; sourceTree = ""; }; + 00F335B1294D313270A41CD72CEF2145 /* SentryLevelMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLevelMapper.h; path = Sources/Sentry/include/SentryLevelMapper.h; sourceTree = ""; }; + 00F35667B0A3D2412ECC5172862CC3F7 /* SentryRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRandom.m; path = Sources/Sentry/SentryRandom.m; sourceTree = ""; }; 00F62D80A09A80EF0A76119764A3EDF1 /* MIKMIDIDestinationEndpoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIDestinationEndpoint.h; path = Source/MIKMIDIDestinationEndpoint.h; sourceTree = ""; }; 0115C3C00C175D77422084DD0542CE6F /* Sentry */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = Sentry; path = libSentry.a; sourceTree = BUILT_PRODUCTS_DIR; }; 01201FEC0DDE5E8DFA7FCC97D0B81255 /* DDLegacyMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLegacyMacros.h; path = "Sources/CocoaLumberjack/Supporting Files/DDLegacyMacros.h"; sourceTree = ""; }; 012E02FAB1EB2D6407156DB6FDBBBEFD /* MIKMIDIProgramChangeCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIProgramChangeCommand.m; path = Source/MIKMIDIProgramChangeCommand.m; sourceTree = ""; }; + 013372DE237CA0C2353B5BCBA2415F09 /* SentryBacktrace.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryBacktrace.cpp; path = Sources/Sentry/SentryBacktrace.cpp; sourceTree = ""; }; 0186A196AF5F90E4C6D0D7FB7705742B /* SRDelegateController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRDelegateController.h; path = SocketRocket/Internal/Delegate/SRDelegateController.h; sourceTree = ""; }; - 01F93A081B338C43E430DB9A88B0CEB6 /* SentryMetricsAPI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMetricsAPI.swift; path = Sources/Swift/Metrics/SentryMetricsAPI.swift; sourceTree = ""; }; - 024A6D1401173777DC06FFE15264E3EE /* SentryCurrentDateProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryCurrentDateProvider.swift; path = Sources/Swift/Helper/SentryCurrentDateProvider.swift; sourceTree = ""; }; - 02B1EFABBB5C13B065CF5B4EC2FC9225 /* SentryScope.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScope.h; path = Sources/Sentry/Public/SentryScope.h; sourceTree = ""; }; - 02EFB13CF25F49237182708DE2CA401B /* SentryMetricProfiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMetricProfiler.h; path = Sources/Sentry/include/SentryMetricProfiler.h; sourceTree = ""; }; - 03FC114E9FB08EAC5A4C35179F007AB2 /* SentryNSURLRequestBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSURLRequestBuilder.m; path = Sources/Sentry/SentryNSURLRequestBuilder.m; sourceTree = ""; }; + 01B63CA809BEF8900F931C9747D4F055 /* SentrySystemEventBreadcrumbs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySystemEventBreadcrumbs.m; path = Sources/Sentry/SentrySystemEventBreadcrumbs.m; sourceTree = ""; }; + 021859CFC2B32F8EC80EDFFF4FF61E5C /* SentryUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUser.h; path = Sources/Sentry/Public/SentryUser.h; sourceTree = ""; }; + 0275EEFB092C3971B7C75A9A34DB7296 /* SentryDelayedFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDelayedFrame.h; path = Sources/Sentry/include/SentryDelayedFrame.h; sourceTree = ""; }; + 028D527FCC2C66E74D481F5EC3F77793 /* SentryANRTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryANRTracker.swift; path = Sources/Swift/Core/Integrations/ANR/SentryANRTracker.swift; sourceTree = ""; }; + 0309089EC7FB1181A7DD80466907B8C6 /* SentryViewHierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryViewHierarchy.h; path = Sources/Sentry/include/SentryViewHierarchy.h; sourceTree = ""; }; + 033950F001665A8484A9EB48A1B52F12 /* SentryThreadMetadataCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryThreadMetadataCache.cpp; path = Sources/Sentry/SentryThreadMetadataCache.cpp; sourceTree = ""; }; 041DAB1542071DF652503FE967D18864 /* MultipartFormDataParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartFormDataParser.m; path = Core/Mime/MultipartFormDataParser.m; sourceTree = ""; }; 04333C84BCA1758BB03B92E4BD1ADE37 /* SPUUpdateCheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdateCheck.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdateCheck.h; sourceTree = ""; }; - 0438035740F3520A5F4840E1B0EB6914 /* SentryTraceOrigins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceOrigins.h; path = Sources/Sentry/include/SentryTraceOrigins.h; sourceTree = ""; }; + 043E6A45053C7F61725ACA8110E89FFE /* SentryHttpTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHttpTransport.m; path = Sources/Sentry/SentryHttpTransport.m; sourceTree = ""; }; + 04582A5798B98EB4AF71CA40FF4EAE81 /* SentryTransportFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransportFactory.h; path = Sources/Sentry/include/SentryTransportFactory.h; sourceTree = ""; }; 04606597449A2FD011C00FE115D87D56 /* HTTPAuthenticationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPAuthenticationRequest.m; path = Core/HTTPAuthenticationRequest.m; sourceTree = ""; }; - 04BB2B1F108331EA9E29355D76CD4A0C /* SentryAppStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStateManager.h; path = Sources/Sentry/include/SentryAppStateManager.h; sourceTree = ""; }; - 05562FBE8AD2925D389EDC231B440475 /* SentryCrashInstallationReporter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashInstallationReporter.h; path = Sources/Sentry/include/SentryCrashInstallationReporter.h; sourceTree = ""; }; - 05644E521E2472BCC80DF06EF85DC847 /* SentryCrashScopeObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashScopeObserver.h; path = Sources/Sentry/include/SentryCrashScopeObserver.h; sourceTree = ""; }; + 049E23F5B81F0F22B9FA86B657E1BBC2 /* SentryPerformanceTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPerformanceTrackingIntegration.h; path = Sources/Sentry/include/SentryPerformanceTrackingIntegration.h; sourceTree = ""; }; + 052C710A729B965AECEC546BF9942B0E /* SentryCrashCPU_Apple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashCPU_Apple.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_Apple.h; sourceTree = ""; }; + 057AD729AE1188D62A26375A83AC4116 /* SentryUserFeedbackIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUserFeedbackIntegration.h; path = Sources/Sentry/include/SentryUserFeedbackIntegration.h; sourceTree = ""; }; + 058190E677CEDCFB61A886E056E82508 /* SentryTracerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTracerConfiguration.m; path = Sources/Sentry/SentryTracerConfiguration.m; sourceTree = ""; }; 05C880AC7263CEEADB94A62AC4C24EF8 /* MIKMIDIControlChangeCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIControlChangeCommand.m; path = Source/MIKMIDIControlChangeCommand.m; sourceTree = ""; }; - 05EF9B0A21C9A4534E6368A0EFFBBD8E /* SentrySessionReplaySyncC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentrySessionReplaySyncC.c; path = Sources/Sentry/SentrySessionReplaySyncC.c; sourceTree = ""; }; 0645AFA5C4861E9A81F7D6E33B5F3B58 /* SPUStandardUserDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUStandardUserDriver.h; path = Sparkle.framework/Versions/B/Headers/SPUStandardUserDriver.h; sourceTree = ""; }; - 078810D0AADB156D6BEA27E4F0E1DBFD /* SentryDispatchFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDispatchFactory.m; path = Sources/Sentry/SentryDispatchFactory.m; sourceTree = ""; }; + 06B99B03C274E9A595B31BFBFD7D0E1C /* SentryCrashDate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDate.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashDate.h; sourceTree = ""; }; + 06F3584AC84A12B554C65FA97E890322 /* SentryCrashMonitor_MachException.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor_MachException.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_MachException.c; sourceTree = ""; }; + 07610E46341931ABB56277836339F2E0 /* SentryCurrentDateProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryCurrentDateProvider.swift; path = Sources/Swift/Core/Helper/SentryCurrentDateProvider.swift; sourceTree = ""; }; + 077CDD946DE2806683A1D4BE19AE5018 /* SentrySwiftAsyncIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySwiftAsyncIntegration.m; path = Sources/Sentry/SentrySwiftAsyncIntegration.m; sourceTree = ""; }; + 07A1CB7ABC4CB0A39DF6B67D3E17ED3E /* SentrySpanDataKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanDataKey.h; path = Sources/Sentry/include/SentrySpanDataKey.h; sourceTree = ""; }; 07B25F60857D113A5E5D5599CC7AFF7C /* MIKMIDIPitchBendChangeCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIPitchBendChangeCommand.m; path = Source/MIKMIDIPitchBendChangeCommand.m; sourceTree = ""; }; - 07E6C4356625256612499FEED3B91C44 /* SentryOptions+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryOptions+Private.h"; path = "Sources/Sentry/include/SentryOptions+Private.h"; sourceTree = ""; }; 07EB3E0573661149F7B7224FA29B04EE /* DDLoggerNames.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLoggerNames.m; path = Sources/CocoaLumberjack/DDLoggerNames.m; sourceTree = ""; }; - 08C2325851FE0BA93E7AF658B64A6053 /* SentryFileContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryFileContents.swift; path = Sources/Swift/Helper/SentryFileContents.swift; sourceTree = ""; }; - 08CC2C52612145A3377EC4CD53360C5B /* SentryNSURLSessionTaskSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSURLSessionTaskSearch.h; path = Sources/Sentry/include/SentryNSURLSessionTaskSearch.h; sourceTree = ""; }; - 08DB5108D5E258D377397DE8CEF27F0E /* SentryAppStartTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStartTracker.m; path = Sources/Sentry/SentryAppStartTracker.m; sourceTree = ""; }; - 097C8DCA2F473555A3E49BE387BE19C8 /* SentryCrashMachineContext_Apple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMachineContext_Apple.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext_Apple.h; sourceTree = ""; }; - 09D9693761E0BDC8504B183B45C07926 /* SentryCrashInstallationReporter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashInstallationReporter.m; path = Sources/Sentry/SentryCrashInstallationReporter.m; sourceTree = ""; }; - 0A40443DAD3018E0D9D575E69AFB45A2 /* SentryFramesTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFramesTrackingIntegration.h; path = Sources/Sentry/include/SentryFramesTrackingIntegration.h; sourceTree = ""; }; - 0A8F19CB050A06635F1498140F167DB8 /* SentryCrashReportWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportWriter.h; path = Sources/SentryCrash/Recording/SentryCrashReportWriter.h; sourceTree = ""; }; - 0A9023D2AEFD8E126A51F1404D7F1412 /* SentryTransactionNameSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryTransactionNameSource.swift; path = Sources/Swift/Integrations/Performance/SentryTransactionNameSource.swift; sourceTree = ""; }; + 0825C4A23F176C3FC423A6783054EB9E /* SentryFrameRemover.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFrameRemover.m; path = Sources/Sentry/SentryFrameRemover.m; sourceTree = ""; }; + 09F479A31F0BD78425CDCB47E749CF74 /* SentryExperimentalOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryExperimentalOptions.swift; path = Sources/Swift/Core/SentryExperimentalOptions.swift; sourceTree = ""; }; + 0A46F01EC6E740E242847DD04D6C3A07 /* Sentry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Sentry-prefix.pch"; sourceTree = ""; }; + 0A75E814B2BB31AEBA39926C9406663F /* SentryPredicateDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPredicateDescriptor.h; path = Sources/Sentry/include/SentryPredicateDescriptor.h; sourceTree = ""; }; + 0A9C1914CC63892717E2CB8478F876A1 /* SentryNoOpSpan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNoOpSpan.m; path = Sources/Sentry/SentryNoOpSpan.m; sourceTree = ""; }; 0AAB46C336F618F523ED7D422285CFEC /* CocoaHTTPServer */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = CocoaHTTPServer; path = libCocoaHTTPServer.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 0AB4B65671912DD7FB38F6DF7AA21962 /* SentryDefaultRateLimits.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDefaultRateLimits.m; path = Sources/Sentry/SentryDefaultRateLimits.m; sourceTree = ""; }; - 0AC7EA8325DF01716D0C3E62EF49D932 /* SentryScope.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScope.m; path = Sources/Sentry/SentryScope.m; sourceTree = ""; }; - 0AD492D3A7847D0F7B7A5507EFB0AD00 /* SentryRRWebCustomEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebCustomEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebCustomEvent.swift; sourceTree = ""; }; - 0B804911071F4F15412FA71EBDF64CD8 /* SentryByteCountFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryByteCountFormatter.m; path = Sources/Sentry/SentryByteCountFormatter.m; sourceTree = ""; }; - 0B9B3AF3736B960A7AE46824B3F15447 /* SentryCrashVarArgs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashVarArgs.h; path = Sources/SentryCrash/Reporting/Filters/Tools/SentryCrashVarArgs.h; sourceTree = ""; }; - 0BACE33FF8E5CD9FB1552DE0B25FB514 /* SentryTransportAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTransportAdapter.m; path = Sources/Sentry/SentryTransportAdapter.m; sourceTree = ""; }; - 0BB0FCB255485DB0F4EBB6ACA9E71123 /* SentryCrashCPU_x86_64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_x86_64.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_x86_64.c; sourceTree = ""; }; + 0AB407DBDE81E8C64B22BA37E69216E8 /* SentryCrash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrash.m; path = Sources/SentryCrash/Recording/SentryCrash.m; sourceTree = ""; }; + 0B36053CFFD2CC74E756799F68DD1E21 /* SentryAppStartTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStartTracker.m; path = Sources/Sentry/SentryAppStartTracker.m; sourceTree = ""; }; + 0B4C97CBB8B50F85E6A7E9EB1DE1D182 /* SentryNSProcessInfoWrapper.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryNSProcessInfoWrapper.mm; path = Sources/Sentry/SentryNSProcessInfoWrapper.mm; sourceTree = ""; }; + 0B52F4F51D3A10B2D5148EB70139AD24 /* SentryTimeToDisplayTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTimeToDisplayTracker.h; path = Sources/Sentry/include/SentryTimeToDisplayTracker.h; sourceTree = ""; }; 0BFD0976454B209FBB8282EB93D35336 /* PocketSocket.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PocketSocket.debug.xcconfig; sourceTree = ""; }; - 0C3675E74D83886A4BF11E7B90F60322 /* SentryBaggage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBaggage.h; path = Sources/Sentry/Public/SentryBaggage.h; sourceTree = ""; }; + 0C106F8A28B9FF9192772B0A8787F7A1 /* SentryMechanismMetaCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMechanismMetaCodable.swift; path = Sources/Swift/Protocol/Codable/SentryMechanismMetaCodable.swift; sourceTree = ""; }; + 0C38EFCEBA8BE2A8CDC50438F91FF27D /* SentryDispatchSourceWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchSourceWrapper.h; path = Sources/Sentry/include/SentryDispatchSourceWrapper.h; sourceTree = ""; }; + 0C6769C935F89ECA02D9BD5593B5893F /* SentryTracerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTracerConfiguration.h; path = Sources/Sentry/include/SentryTracerConfiguration.h; sourceTree = ""; }; 0C8FFEDE08675BE4F3ED412F605A9BFB /* MIKMIDINoteCommand_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDINoteCommand_SubclassMethods.h; path = Source/MIKMIDINoteCommand_SubclassMethods.h; sourceTree = ""; }; 0C9D1316302E6BBBCEA5935D4680620C /* MIKMIDICommandThrottler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDICommandThrottler.m; path = Source/MIKMIDICommandThrottler.m; sourceTree = ""; }; - 0D4A8B60F7AD8946C1560D2FC9B1E5EA /* SentryTracerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTracerConfiguration.m; path = Sources/Sentry/SentryTracerConfiguration.m; sourceTree = ""; }; - 0D96288E857160E31C20E7AE2C1FC09C /* SentrySwiftAsyncIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwiftAsyncIntegration.h; path = Sources/Sentry/include/SentrySwiftAsyncIntegration.h; sourceTree = ""; }; + 0D05DF185968A60037D48FD1D96378BC /* SentryCrashReportFilterBasic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFilterBasic.h; path = Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.h; sourceTree = ""; }; + 0D479123FFF32CFAE54A474073412A73 /* SentrySampleDecision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySampleDecision.h; path = Sources/Sentry/Public/SentrySampleDecision.h; sourceTree = ""; }; + 0D573D5060C8E9CC37160B21F5E892EA /* SentryNSDataSwizzling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSDataSwizzling.h; path = Sources/Sentry/include/SentryNSDataSwizzling.h; sourceTree = ""; }; 0DA2CA87B777B7B3C88D6A8AB74B31EA /* MIKMIDISystemMessageCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISystemMessageCommand.h; path = Source/MIKMIDISystemMessageCommand.h; sourceTree = ""; }; 0DD846D611BF2B613C5F9750B9D84F66 /* HTTPErrorResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPErrorResponse.m; path = Core/Responses/HTTPErrorResponse.m; sourceTree = ""; }; - 0DDE50D95A92454E5D369FF2EADFDDBE /* NumberExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NumberExtensions.swift; path = Sources/Swift/Extensions/NumberExtensions.swift; sourceTree = ""; }; - 0EA8152475FEE15B6FE5EC1AC42BFBF3 /* SentryANRTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryANRTrackingIntegration.h; path = Sources/Sentry/include/SentryANRTrackingIntegration.h; sourceTree = ""; }; - 0EB6B9CCF596CF764C4142E1A6360B5E /* SentryANRTrackerV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryANRTrackerV2.m; path = Sources/Sentry/SentryANRTrackerV2.m; sourceTree = ""; }; - 0EF263FD48C8F7F05317ABE1FCDD7975 /* SentryAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAttachment.m; path = Sources/Sentry/SentryAttachment.m; sourceTree = ""; }; - 0FAE83AB057D97E3311CFDD8CCE13E9C /* SentryBacktrace.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryBacktrace.hpp; path = Sources/Sentry/include/SentryBacktrace.hpp; sourceTree = ""; }; + 0E451E243AAA1FC8E8A6366EBFB0916D /* SentryCrashReportFilterBasic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashReportFilterBasic.m; path = Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.m; sourceTree = ""; }; + 0F149CC719361878E22B89970F9BDE9F /* SentryLevelHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLevelHelper.m; path = Sources/Sentry/SentryLevelHelper.m; sourceTree = ""; }; + 0F2C22B83D91632FEE29FC7C9BCE0D19 /* SentryNSURLSessionTaskSearch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSURLSessionTaskSearch.m; path = Sources/Sentry/SentryNSURLSessionTaskSearch.m; sourceTree = ""; }; 0FBEA235F7AEFE3EA2731A3825ED6AA5 /* MIKMIDISequence.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISequence.m; path = Source/MIKMIDISequence.m; sourceTree = ""; }; - 0FE65B5511B56E70F945BAD4655164D7 /* SentryOptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryOptions.m; path = Sources/Sentry/SentryOptions.m; sourceTree = ""; }; + 0FDB48DACB41173A07478A764B92A88A /* SentryMetricKitIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMetricKitIntegration.m; path = Sources/Sentry/SentryMetricKitIntegration.m; sourceTree = ""; }; + 0FF5016A53C87B7327B6FAD067C8D889 /* SentryUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUser.m; path = Sources/Sentry/SentryUser.m; sourceTree = ""; }; 0FF648B80187B6006ABE714309DA810A /* MIKMIDIEvent_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIEvent_SubclassMethods.h; path = Source/MIKMIDIEvent_SubclassMethods.h; sourceTree = ""; }; + 1023631B2DDAFDC722D8F521E02CC448 /* SentrySdkPackage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySdkPackage.m; path = Sources/Sentry/SentrySdkPackage.m; sourceTree = ""; }; + 102D810320BAED7D73F0F729F69F8E6B /* SentryUIDeviceWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIDeviceWrapper.h; path = Sources/Sentry/include/SentryUIDeviceWrapper.h; sourceTree = ""; }; 104BF97B96109AFCAE80915D3820EA10 /* MIKMIDINoteEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDINoteEvent.m; path = Source/MIKMIDINoteEvent.m; sourceTree = ""; }; - 1083B2215EEC660EC3CD6117056A0CF8 /* SentrySession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySession.h; path = Sources/Sentry/include/SentrySession.h; sourceTree = ""; }; 1085C147BBBC7A7D064C8ABF3C624BB8 /* DDDispatchQueueLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDDispatchQueueLogFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDDispatchQueueLogFormatter.m; sourceTree = ""; }; 1087416496E799B6528187BE45604779 /* MIKMIDIChannelPressureCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIChannelPressureCommand.h; path = Source/MIKMIDIChannelPressureCommand.h; sourceTree = ""; }; - 10FA5F34FCB3EFB59CB5DE4C37E5A733 /* SentryRateLimitParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRateLimitParser.h; path = Sources/Sentry/include/SentryRateLimitParser.h; sourceTree = ""; }; - 11A520C1D2AC3E07DE1662A0E8FFCEEF /* SentryExtraContextProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryExtraContextProvider.m; path = Sources/Sentry/SentryExtraContextProvider.m; sourceTree = ""; }; - 1252BACA64EB5080BCB73AF65E445532 /* PrivatesHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PrivatesHeader.h; path = Sources/Sentry/include/HybridPublic/PrivatesHeader.h; sourceTree = ""; }; + 10B7B1F0F9E63C5395855656C702BB9B /* SentryHttpStatusCodeRange+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryHttpStatusCodeRange+Private.h"; path = "Sources/Sentry/include/SentryHttpStatusCodeRange+Private.h"; sourceTree = ""; }; + 11006FBB2800F74CE11220FD8E6F9E38 /* SentryTransportAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransportAdapter.h; path = Sources/Sentry/include/SentryTransportAdapter.h; sourceTree = ""; }; + 11617A193A6E07D8C0F5EDD6B18C9EAE /* SentryRRWebEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebEvent.swift; sourceTree = ""; }; 1252F3C09544319DC7D7C7BEBB6BA6C3 /* SRMutex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRMutex.h; path = SocketRocket/Internal/Utilities/SRMutex.h; sourceTree = ""; }; - 1277E8E4CE73DDF6CAB9635A02F4DCD8 /* SentryBuildAppStartSpans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBuildAppStartSpans.h; path = Sources/Sentry/include/SentryBuildAppStartSpans.h; sourceTree = ""; }; 13C059366E835989D34DEE142C564130 /* CocoaLumberjack.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.release.xcconfig; sourceTree = ""; }; 13D198ED86F2FE058B09CD420BC7D3DB /* SRDelegateController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRDelegateController.m; path = SocketRocket/Internal/Delegate/SRDelegateController.m; sourceTree = ""; }; - 1414E843B7F3A392F17CDE6B1B1545E4 /* SentrySerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySerialization.h; path = Sources/Sentry/include/SentrySerialization.h; sourceTree = ""; }; - 14228DE9772125B484F08529B4BF3D8A /* SentrySpanContext+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySpanContext+Private.h"; path = "Sources/Sentry/include/SentrySpanContext+Private.h"; sourceTree = ""; }; - 14251523FF255A27A7D140F491A77E37 /* SentryCrashCPU_x86_32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_x86_32.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_x86_32.c; sourceTree = ""; }; - 142FE559BC21B1CDE3FD83CFAE6F7D58 /* SentryException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryException.m; path = Sources/Sentry/SentryException.m; sourceTree = ""; }; - 147B7F5CC85430E54956EB11E8C17492 /* SentryAppStartMeasurement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStartMeasurement.h; path = Sources/Sentry/include/HybridPublic/SentryAppStartMeasurement.h; sourceTree = ""; }; - 149CD8DD36BC0C306C6BB9BDDFBEB1B2 /* SentryCrash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrash.h; path = Sources/SentryCrash/Recording/SentryCrash.h; sourceTree = ""; }; - 150CE280A40A2ED8A311981DB72D7A76 /* SentrySamplingProfiler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentrySamplingProfiler.cpp; path = Sources/Sentry/SentrySamplingProfiler.cpp; sourceTree = ""; }; - 15512899988C364C168E70B72C604302 /* DistributionMetric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DistributionMetric.swift; path = Sources/Swift/Metrics/DistributionMetric.swift; sourceTree = ""; }; - 1585C0E7D2609A5BF0DEE8A53A3125AF /* SentryRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRandom.m; path = Sources/Sentry/SentryRandom.m; sourceTree = ""; }; + 13E746206C311B3619755484CD786ABA /* SentryStacktraceCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryStacktraceCodable.swift; path = Sources/Swift/Protocol/Codable/SentryStacktraceCodable.swift; sourceTree = ""; }; + 1431BA8DEB4E4CA7127C1CFC41D57E98 /* SentryCoreDataTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCoreDataTracker.h; path = Sources/Sentry/include/SentryCoreDataTracker.h; sourceTree = ""; }; + 14B7AACFF2F231309B1CC3F0E79F9220 /* SentryInternalDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalDefines.h; path = Sources/Sentry/include/SentryInternalDefines.h; sourceTree = ""; }; + 14CF687B759F72FE41D6E71F3A497585 /* SentryCompiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCompiler.h; path = Sources/Sentry/include/SentryCompiler.h; sourceTree = ""; }; + 151525B4A0622A06FC999E601AC07B74 /* SentryOnDemandReplay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryOnDemandReplay.swift; path = Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift; sourceTree = ""; }; + 152C2563896D6BC7DE77128922674517 /* SentryRetryAfterHeaderParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRetryAfterHeaderParser.m; path = Sources/Sentry/SentryRetryAfterHeaderParser.m; sourceTree = ""; }; 15B2A2E5E70BC78A8C2E2288B97FD55B /* MIKMIDIMetaMarkerTextEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaMarkerTextEvent.m; path = Source/MIKMIDIMetaMarkerTextEvent.m; sourceTree = ""; }; 15BD9E7FC207DD702FB5F81ED78A7971 /* DDLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLog.m; path = Sources/CocoaLumberjack/DDLog.m; sourceTree = ""; }; - 15BF85CE4CCCEA91DF4C59A8BEA880C6 /* SentryCrashMemory.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMemory.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashMemory.c; sourceTree = ""; }; 161F0A5D1CE5D5F7EAB1724DCCE11BB4 /* DDDispatchQueueLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDDispatchQueueLogFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDDispatchQueueLogFormatter.h; sourceTree = ""; }; + 16493FC5B7C0AC5D3788D851B54CDFDD /* SentryNSFileManagerSwizzling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSFileManagerSwizzling.h; path = Sources/Sentry/include/SentryNSFileManagerSwizzling.h; sourceTree = ""; }; 164E8D00BE22F96278C02265B90D7B1E /* HTTPRedirectResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPRedirectResponse.m; path = Core/Responses/HTTPRedirectResponse.m; sourceTree = ""; }; + 165973CD36A0311D8D356B3626E22174 /* SentrySpanId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanId.h; path = Sources/Sentry/Public/SentrySpanId.h; sourceTree = ""; }; + 16611112816943270A01EE37757D4D25 /* SwiftDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftDescriptor.swift; path = Sources/Swift/Core/SwiftDescriptor.swift; sourceTree = ""; }; 1683DFE880F3A8097F1B9B0DA5E27876 /* MIKMIDITransmittable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDITransmittable.h; path = Source/MIKMIDITransmittable.h; sourceTree = ""; }; - 16A6A10301EC58EDE0CC9CE0D9DC20D4 /* Sentry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sentry.debug.xcconfig; sourceTree = ""; }; - 16A8E83987C6DFD3128CAD4B0B44D928 /* SentryGlobalEventProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryGlobalEventProcessor.m; path = Sources/Sentry/SentryGlobalEventProcessor.m; sourceTree = ""; }; 16AE75DAA9C3A79DA01D5BB93F854C68 /* MIKMIDIPolyphonicKeyPressureCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPolyphonicKeyPressureCommand.h; path = Source/MIKMIDIPolyphonicKeyPressureCommand.h; sourceTree = ""; }; 16C8EC493F874B8809BCD9BC2DA9BBEF /* MIKMIDISynthesizerInstrument.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISynthesizerInstrument.h; path = Source/MIKMIDISynthesizerInstrument.h; sourceTree = ""; }; - 16D7FD3C5ACD54B0A93837D009A0EAC6 /* SentryExtraContextProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryExtraContextProvider.h; path = Sources/Sentry/SentryExtraContextProvider.h; sourceTree = ""; }; - 1713B557EA810ADD424919743E429AC2 /* SentryEnvelopeItemHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelopeItemHeader.m; path = Sources/Sentry/SentryEnvelopeItemHeader.m; sourceTree = ""; }; + 1714F00193A1476C02AD85B8AD41F18E /* SentryDefaultRateLimits.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDefaultRateLimits.m; path = Sources/Sentry/SentryDefaultRateLimits.m; sourceTree = ""; }; 171F1991405DD0D7AC2B4215D68562DA /* MIKMIDIObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIObject.h; path = Source/MIKMIDIObject.h; sourceTree = ""; }; 17268AC0F413736F6F8B9F5131871622 /* MIKMIDIMappingXMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMappingXMLParser.m; path = Source/MIKMIDIMappingXMLParser.m; sourceTree = ""; }; - 1749A707387498C3AC9334CF2D7769EF /* SentryInternalNotificationNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalNotificationNames.h; path = Sources/Sentry/include/SentryInternalNotificationNames.h; sourceTree = ""; }; - 1758F7998742EB6637EDAA0F0298CF33 /* SentryViewHierarchyIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryViewHierarchyIntegration.m; path = Sources/Sentry/SentryViewHierarchyIntegration.m; sourceTree = ""; }; - 1767E9FBEE9E9138E9C58E611DF847A8 /* SentryEnvelopeItemType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeItemType.h; path = Sources/Sentry/include/HybridPublic/SentryEnvelopeItemType.h; sourceTree = ""; }; - 179FE19E81AC0ACC9C0623869C08A9D5 /* SentryCrashIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashIntegration.h; path = Sources/Sentry/include/SentryCrashIntegration.h; sourceTree = ""; }; - 17D1F4CADD1526956E9C3D0EC9F185CA /* SentrySessionCrashedHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySessionCrashedHandler.h; path = Sources/Sentry/include/SentrySessionCrashedHandler.h; sourceTree = ""; }; - 17D320EBDEAF874E4AC66A7087B8B355 /* SentryMechanism.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMechanism.m; path = Sources/Sentry/SentryMechanism.m; sourceTree = ""; }; - 1852941F36151E5DE5DEA90D4F931711 /* SentryDispatchQueueWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDispatchQueueWrapper.m; path = Sources/Sentry/SentryDispatchQueueWrapper.m; sourceTree = ""; }; + 17706ABCFF2B9D6491443187EFE9D6A4 /* SentryCrashStackCursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor.h; sourceTree = ""; }; + 1786C01754EC8C5B78CB5EE6F0768E26 /* SentryUIEventTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTrackingIntegration.h; path = Sources/Sentry/include/SentryUIEventTrackingIntegration.h; sourceTree = ""; }; 185CFDCD1462B098FBB7AC0E6EDC8320 /* MIKMIDIMetaSequenceEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaSequenceEvent.m; path = Source/MIKMIDIMetaSequenceEvent.m; sourceTree = ""; }; - 1862C4ED07B24352D1DD1A069782D87A /* SentryWatchdogTerminationLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationLogic.h; path = Sources/Sentry/include/SentryWatchdogTerminationLogic.h; sourceTree = ""; }; - 18E514F51D260A11D56F40DDCD336A63 /* SentryUserFeedback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUserFeedback.m; path = Sources/Sentry/SentryUserFeedback.m; sourceTree = ""; }; - 1946C8D2CDA5A2FD24B4A8E7CA7A4248 /* SentryCrashDynamicLinker.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashDynamicLinker.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.c; sourceTree = ""; }; - 19528B16C8468503A93F4A4AE567FAA7 /* SentryEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryEvent+Private.h"; path = "Sources/Sentry/include/SentryEvent+Private.h"; sourceTree = ""; }; - 1954C60F88408AE1E27D411C67A64C3B /* SentryCrashDoctor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashDoctor.m; path = Sources/SentryCrash/Recording/SentryCrashDoctor.m; sourceTree = ""; }; - 19A8504D81B069DF346AF1EA572D3164 /* SentryThreadWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryThreadWrapper.m; path = Sources/Sentry/SentryThreadWrapper.m; sourceTree = ""; }; - 19AFAFE4C0EDE77CD00B2F3B4B3E6C60 /* SentryThreadHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryThreadHandle.hpp; path = Sources/Sentry/include/SentryThreadHandle.hpp; sourceTree = ""; }; - 19DC19184CBAA26ACD42DE9A4197B3D3 /* SentryReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryReachability.h; path = Sources/Sentry/include/SentryReachability.h; sourceTree = ""; }; - 19F69D29E945CBDE24E2DFE354BAE198 /* SentryLaunchProfiling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLaunchProfiling.m; path = Sources/Sentry/Profiling/SentryLaunchProfiling.m; sourceTree = ""; }; - 1A0B613C59D1494EC7CB6148A3CB19D6 /* SentrySessionReplay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentrySessionReplay.swift; path = Sources/Swift/Integrations/SessionReplay/SentrySessionReplay.swift; sourceTree = ""; }; + 18DF647FE820E68B8D1BF9BCB8EE36AB /* SentryAppState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppState.m; path = Sources/Sentry/SentryAppState.m; sourceTree = ""; }; + 1938DED383B67FD8F637FEEBAE7F430F /* SentryGlobalEventProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryGlobalEventProcessor.h; path = Sources/Sentry/include/SentryGlobalEventProcessor.h; sourceTree = ""; }; + 19E2621A1FA98E207D7A07A698FD91B4 /* SentryGeo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryGeo.h; path = Sources/Sentry/Public/SentryGeo.h; sourceTree = ""; }; 1A0C2102DF60E0D9C23EBF54BF520521 /* PSWebSocketTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketTypes.h; path = PocketSocket/PSWebSocketTypes.h; sourceTree = ""; }; - 1AF0287951066D2F2EFB23D2493059CB /* SentryCrashJSONCodec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashJSONCodec.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.c; sourceTree = ""; }; + 1A1EF8C4703A132FD63BF29BC9036624 /* SentryTraceOrigin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceOrigin.h; path = Sources/Sentry/include/SentryTraceOrigin.h; sourceTree = ""; }; + 1AA62902933987086690BA9DDEBDC798 /* SentryThreadHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryThreadHandle.hpp; path = Sources/Sentry/include/SentryThreadHandle.hpp; sourceTree = ""; }; + 1AC3A001C7140AC553441ED14700B82E /* Sentry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sentry.debug.xcconfig; sourceTree = ""; }; + 1B52AD8B3567709904C6FE56F48D3453 /* SentryTimeToDisplayTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTimeToDisplayTracker.m; path = Sources/Sentry/SentryTimeToDisplayTracker.m; sourceTree = ""; }; + 1BA37EA8EBDF8452273DABA4B7A44C40 /* SentryWatchdogTerminationLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationLogic.m; path = Sources/Sentry/SentryWatchdogTerminationLogic.m; sourceTree = ""; }; 1BA81D88AE03EA2FF4486A784C195958 /* MIKMIDIChannelEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIChannelEvent.h; path = Source/MIKMIDIChannelEvent.h; sourceTree = ""; }; - 1C05F86890CCB7B682705B4DC318DC76 /* SentryWithoutUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWithoutUIKit.h; path = Sources/Sentry/Public/SentryWithoutUIKit.h; sourceTree = ""; }; - 1C22C468A1B8C61CE66E850C1E336E62 /* SentryProfilerTestHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerTestHelpers.h; path = Sources/Sentry/include/SentryProfilerTestHelpers.h; sourceTree = ""; }; - 1C99035927A765B80123B45F9170A53E /* SentrySessionReplayIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySessionReplayIntegration.m; path = Sources/Sentry/SentrySessionReplayIntegration.m; sourceTree = ""; }; + 1BB4F7FD2FF745EF831C1D3DDB30782E /* SentryCrashMachineContext_Apple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMachineContext_Apple.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext_Apple.h; sourceTree = ""; }; + 1BB65EB30E6B3A338389AB76D4C7C21E /* SentrySpanOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanOperation.m; path = Sources/Sentry/SentrySpanOperation.m; sourceTree = ""; }; + 1C239FE55905A818D4817477466EF2DC /* SentryHub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHub.h; path = Sources/Sentry/Public/SentryHub.h; sourceTree = ""; }; 1CEF80D3FB1440C59CF57335963525E4 /* MIKMIDIEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIEvent.h; path = Source/MIKMIDIEvent.h; sourceTree = ""; }; - 1CF4989A7F6983CF4E3BC2E9331D3C61 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 1D1574FE7064E811BA1B58710A68881D /* SentryCrashStackCursor_Backtrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor_Backtrace.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_Backtrace.h; sourceTree = ""; }; 1D2057D41E069790D9842CBE47D622C1 /* ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; sourceTree = ""; }; - 1D82218FCAE57B7717C49FFA4F270EB2 /* SentryVideoInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryVideoInfo.swift; path = Sources/Swift/Integrations/SessionReplay/SentryVideoInfo.swift; sourceTree = ""; }; + 1D9078F0D390FA276D09B7FBD1E1C37B /* SentrySdkInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySdkInfo.m; path = Sources/Sentry/SentrySdkInfo.m; sourceTree = ""; }; + 1D997B67763BC563D2DD7967BE28BAEA /* SentryExceptionCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryExceptionCodable.swift; path = Sources/Swift/Protocol/Codable/SentryExceptionCodable.swift; sourceTree = ""; }; + 1D9AD3508FB5D236DC14882B18CEF9FB /* SentryCrashCPU.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU.c; sourceTree = ""; }; 1D9DD0F1F73F404D1F497B759EB460E3 /* SRPinningSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRPinningSecurityPolicy.h; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.h; sourceTree = ""; }; - 1DDC0A87FE1C27050FEA4510A865E954 /* SentryException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryException.h; path = Sources/Sentry/Public/SentryException.h; sourceTree = ""; }; - 1DEAB65D147E8FC5F02ACBFC8A31789B /* SentryHub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHub.h; path = Sources/Sentry/Public/SentryHub.h; sourceTree = ""; }; - 1E9516F87499EBD9F56E18FA69933F3A /* SentryCrashMonitor_NSException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashMonitor_NSException.m; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_NSException.m; sourceTree = ""; }; - 1EC9ECEC29A57ADCCBB3879ED5D2BADD /* SentryCompiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCompiler.h; path = Sources/Sentry/include/SentryCompiler.h; sourceTree = ""; }; + 1DB22B97642F1FD219E44FBE2BE4C5A5 /* SentryReplayApi.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryReplayApi.m; path = Sources/Sentry/SentryReplayApi.m; sourceTree = ""; }; + 1DDE95EC68375C1B66CB9573441844D9 /* SentryProfilerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerDefines.h; path = Sources/Sentry/include/SentryProfilerDefines.h; sourceTree = ""; }; + 1E273F3CEAB5477293E0BE3F3A2C3288 /* SentryAsynchronousOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAsynchronousOperation.h; path = Sources/Sentry/include/SentryAsynchronousOperation.h; sourceTree = ""; }; 1ECA7EE8F3613DD9FB96F4C7B50C1D74 /* MIKMIDI.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MIKMIDI.release.xcconfig; sourceTree = ""; }; + 1ECF7428D7D48B6B324E1A1B692CEF6E /* SentrySessionReplayIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySessionReplayIntegration.h; path = Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration.h; sourceTree = ""; }; 1EEA6082BF4F36CDA50F064854D137E4 /* MIKMIDIMetaInstrumentNameEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaInstrumentNameEvent.h; path = Source/MIKMIDIMetaInstrumentNameEvent.h; sourceTree = ""; }; - 1F2105B47F9F8C88AB59F95F1C674154 /* SentryAutoBreadcrumbTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAutoBreadcrumbTrackingIntegration.h; path = Sources/Sentry/include/SentryAutoBreadcrumbTrackingIntegration.h; sourceTree = ""; }; 1F513DB823C57D997E428B66E72000AE /* SPUUpdaterDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdaterDelegate.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdaterDelegate.h; sourceTree = ""; }; - 1F75AE9C76D7E728BE37B8DAAA9B8A41 /* SentryProfilerSerialization+Test.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryProfilerSerialization+Test.h"; path = "Sources/Sentry/Profiling/SentryProfilerSerialization+Test.h"; sourceTree = ""; }; - 201C53EE3DC316F4610491C045F88D2C /* SentryDispatchFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchFactory.h; path = Sources/Sentry/include/SentryDispatchFactory.h; sourceTree = ""; }; - 205269A9ED2EB2F68381619F1B95743F /* SentryAppStartTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStartTrackingIntegration.m; path = Sources/Sentry/SentryAppStartTrackingIntegration.m; sourceTree = ""; }; + 1F7E686FD62F8C27530845E92C210C0B /* SentryUIDeviceWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIDeviceWrapper.m; path = Sources/Sentry/SentryUIDeviceWrapper.m; sourceTree = ""; }; 20A481F35AC032E9BF617D70B5F41907 /* SUStandardVersionComparator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUStandardVersionComparator.h; path = Sparkle.framework/Versions/B/Headers/SUStandardVersionComparator.h; sourceTree = ""; }; + 20B81C9973FFA15370060C4E472BA317 /* SentryRequestManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRequestManager.h; path = Sources/Sentry/include/SentryRequestManager.h; sourceTree = ""; }; 20D041180E7BB7625A1791279021F5EA /* MIKMIDIPrivateUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIPrivateUtilities.m; path = Source/MIKMIDIPrivateUtilities.m; sourceTree = ""; }; - 21532A82DA33D97522525266DA6FD77D /* SentryThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryThread.h; path = Sources/Sentry/Public/SentryThread.h; sourceTree = ""; }; + 2188E143DDE107B1C5301D66F167D9EB /* SentryTraceProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryTraceProfiler.mm; path = Sources/Sentry/Profiling/SentryTraceProfiler.mm; sourceTree = ""; }; 219D73DAA3E1EA0AC149B413906E2817 /* SRURLUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRURLUtilities.h; path = SocketRocket/Internal/Utilities/SRURLUtilities.h; sourceTree = ""; }; - 21E6E68C83A2B02B7DF22F64227FEBF2 /* SentryCrashBinaryImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashBinaryImageCache.h; path = Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.h; sourceTree = ""; }; - 220E531991C8D6E2A53D46DF2863C861 /* SentryCrashDate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDate.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashDate.h; sourceTree = ""; }; - 2222A734DA950BD5F2A1BC4798B6DEE7 /* SentryFrameRemover.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFrameRemover.h; path = Sources/Sentry/include/SentryFrameRemover.h; sourceTree = ""; }; + 21B8F0B5D1D07D21B6B362F88AADDD0F /* SentryCrashStackCursor.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashStackCursor.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor.c; sourceTree = ""; }; + 21F2D2480974F5A56CC0FAF78D6BB097 /* SentryUser+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryUser+Private.h"; path = "Sources/Sentry/include/HybridPublic/SentryUser+Private.h"; sourceTree = ""; }; + 21F3C8C2EB62EFEBD3CAE9816B2EC59B /* SentryNSError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSError.m; path = Sources/Sentry/SentryNSError.m; sourceTree = ""; }; 2227371D94F8B8A65DAA28091BE24548 /* NSRunLoop+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRunLoop+SRWebSocket.m"; path = "SocketRocket/NSRunLoop+SRWebSocket.m"; sourceTree = ""; }; - 2294F5AFC0F79C4BE69D51501D022ECF /* SentryReplayEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayEvent.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayEvent.swift; sourceTree = ""; }; + 22AB0FEDA7EAD5C85C1FDE15ED1A9120 /* SentryRRWebBreadcrumbEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebBreadcrumbEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebBreadcrumbEvent.swift; sourceTree = ""; }; 22AE211865707E46D0BA556617C54287 /* SRRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRandom.m; path = SocketRocket/Internal/Utilities/SRRandom.m; sourceTree = ""; }; 22CEF8541F327D9FCB098295FD7C1AD3 /* MIKMIDISystemExclusiveCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISystemExclusiveCommand.h; path = Source/MIKMIDISystemExclusiveCommand.h; sourceTree = ""; }; 23113F0E22ACDD7ED2A1318AEB850B13 /* MIKMIDICommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDICommand.m; path = Source/MIKMIDICommand.m; sourceTree = ""; }; - 234C11EDAB9EE2BDDB59E5AD7FE6F012 /* SentryCrash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrash.m; path = Sources/SentryCrash/Recording/SentryCrash.m; sourceTree = ""; }; + 231DDA31B0FD020205630FDF53855B3B /* SentryCrashScopeObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashScopeObserver.h; path = Sources/Sentry/include/SentryCrashScopeObserver.h; sourceTree = ""; }; + 23698092F85C73C0B4783BA0CD4865BA /* SentrySampleDecision+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySampleDecision+Private.h"; path = "Sources/Sentry/include/SentrySampleDecision+Private.h"; sourceTree = ""; }; 2369824A15DEC10A697AB353D94F7003 /* ORSSerialPort */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = ORSSerialPort; path = libORSSerialPort.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 236D88238CEC740378901ACAA352EB71 /* SentryCrashJSONCodec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashJSONCodec.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.h; sourceTree = ""; }; - 248BEF94FE4A65DB0AEF15CEFB59037F /* SentryBinaryImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBinaryImageCache.h; path = Sources/Sentry/include/HybridPublic/SentryBinaryImageCache.h; sourceTree = ""; }; - 24BA5427931D705341FE19C9993470B5 /* SentryLogOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryLogOutput.swift; path = Sources/Swift/Tools/SentryLogOutput.swift; sourceTree = ""; }; - 24E4B7595A7DF47CBF1034A282AEE6EC /* SentryCrashDynamicLinker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDynamicLinker.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.h; sourceTree = ""; }; - 2503880FB867E3E343795BC7316BBCFF /* SentryFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFrame.m; path = Sources/Sentry/SentryFrame.m; sourceTree = ""; }; + 237B85ED6F21DC95418B8CC837360902 /* SentrySdkInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySdkInfo.h; path = Sources/Sentry/include/SentrySdkInfo.h; sourceTree = ""; }; + 23E2D18CC0B28AAB2C4650DD4E7EBF71 /* SentryMetricKitIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMetricKitIntegration.h; path = Sources/Sentry/include/SentryMetricKitIntegration.h; sourceTree = ""; }; + 23EA7DC598BF1CD7109055D7FC36CAAE /* SentryCrashInstallation+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryCrashInstallation+Private.h"; path = "Sources/SentryCrash/Installations/SentryCrashInstallation+Private.h"; sourceTree = ""; }; + 23F4CF1FE6BE7A0530D0A1896F8B769F /* SentryWeakMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWeakMap.h; path = Sources/Sentry/include/SentryWeakMap.h; sourceTree = ""; }; + 253295F694E7890A00F07B7CE7B2D381 /* SentryScopeSyncC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryScopeSyncC.c; path = Sources/Sentry/SentryScopeSyncC.c; sourceTree = ""; }; + 25800E26608878D462E3E6D61075B16F /* SentryRRWebCustomEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebCustomEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebCustomEvent.swift; sourceTree = ""; }; 25876F8CF4AEE118E00C5841DCD5AAB8 /* MIKMIDINoteOnCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDINoteOnCommand.h; path = Source/MIKMIDINoteOnCommand.h; sourceTree = ""; }; + 25C1954C2CCE80895772DCDBD072BCCF /* SentryCoreDataTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCoreDataTracker.m; path = Sources/Sentry/SentryCoreDataTracker.m; sourceTree = ""; }; 25EC2FF8F3A2BFF1EA380AAD477C9303 /* DDContextFilterLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDContextFilterLogFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDContextFilterLogFormatter.h; sourceTree = ""; }; - 263B61AF5ECBD38D798965F9F036CA7B /* SentryPropagationContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPropagationContext.m; path = Sources/Sentry/SentryPropagationContext.m; sourceTree = ""; }; + 2641BD78E03439DE79614893EF6BE10F /* SentryProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfiler.mm; path = Sources/Sentry/SentryProfiler.mm; sourceTree = ""; }; 2678663DBF6EFB33E4F37305843EEE38 /* MIKMIDIEndpointSynthesizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIEndpointSynthesizer.h; path = Source/MIKMIDIEndpointSynthesizer.h; sourceTree = ""; }; - 269AF878DFC82DC2FAEE0B531439BDB7 /* SentryDependencyContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDependencyContainer.h; path = Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h; sourceTree = ""; }; - 2711E9293E290259FFD7654E696290AD /* SentryCrashMonitor_CPPException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_CPPException.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.h; sourceTree = ""; }; - 2737A1251BECEA0E11B80744EBB8B7B2 /* LocalMetricsAggregator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocalMetricsAggregator.swift; path = Sources/Swift/Metrics/LocalMetricsAggregator.swift; sourceTree = ""; }; + 26CF693CEF73453AA3CCAF5340A0A14D /* SentryFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFileManager.h; path = Sources/Sentry/include/SentryFileManager.h; sourceTree = ""; }; + 26E98CFCB2D54038D5E16D80413A5E59 /* SentrySpan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpan.m; path = Sources/Sentry/SentrySpan.m; sourceTree = ""; }; + 270072B02CEC084041BDFF3F0A1E34D1 /* SentryDiscardedEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDiscardedEvent.h; path = Sources/Sentry/include/SentryDiscardedEvent.h; sourceTree = ""; }; + 2723DF245A3E8BD4D7727FD8CAC6C354 /* SentryRedactOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRedactOptions.swift; path = Sources/Swift/Core/Protocol/SentryRedactOptions.swift; sourceTree = ""; }; + 274B1CED1B8D4CD6287750407D5E4D63 /* SentryMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMessage.h; path = Sources/Sentry/Public/SentryMessage.h; sourceTree = ""; }; + 276C4BE1B5F22F7CB6FC184CB06622CC /* SentryCrashMonitor_CPPException.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryCrashMonitor_CPPException.cpp; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.cpp; sourceTree = ""; }; + 2776C41D22848733563DFB32582D1201 /* SentryCrashMonitor_AppState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_AppState.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_AppState.h; sourceTree = ""; }; + 284B6CD9B01AB8911497ABA822DBAA46 /* SentryBreadcrumbTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBreadcrumbTracker.h; path = Sources/Sentry/include/SentryBreadcrumbTracker.h; sourceTree = ""; }; + 28A397C7EC43828883494A2BC44A7C2B /* SentryDependencyContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDependencyContainer.m; path = Sources/Sentry/SentryDependencyContainer.m; sourceTree = ""; }; 28A5594B2E9CD8D747E4E87031ADA247 /* MIKMIDISequence.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISequence.h; path = Source/MIKMIDISequence.h; sourceTree = ""; }; - 28B04C61DFD85D943F2939F6C2B83DF1 /* SentrySessionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySessionTracker.m; path = Sources/Sentry/SentrySessionTracker.m; sourceTree = ""; }; 28B784B40871DF1892423829E2610DB4 /* SRHTTPConnectMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHTTPConnectMessage.m; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m; sourceTree = ""; }; 29043E8DD87496520FAA80F10793C3CF /* HTTPAsyncFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPAsyncFileResponse.h; path = Core/Responses/HTTPAsyncFileResponse.h; sourceTree = ""; }; - 2931A045971125F75C762F489D173152 /* SentryProfilerTestHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryProfilerTestHelpers.m; path = Sources/Sentry/Profiling/SentryProfilerTestHelpers.m; sourceTree = ""; }; - 296BB14511DF73B7F8CAF2AAF001225F /* SentryThreadMetadataCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryThreadMetadataCache.cpp; path = Sources/Sentry/SentryThreadMetadataCache.cpp; sourceTree = ""; }; - 29EC4AA8259DE1DCAEBC10450888D132 /* SentryStatsdClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryStatsdClient.m; path = Sources/Sentry/SentryStatsdClient.m; sourceTree = ""; }; - 2A8244CB203653C9A3DC1B5B2EBF9AB7 /* SentryBuildAppStartSpans.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBuildAppStartSpans.m; path = Sources/Sentry/SentryBuildAppStartSpans.m; sourceTree = ""; }; - 2A8D9DCCE19363B242DEE9AF8941359C /* SentryClient+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryClient+Private.h"; path = "Sources/Sentry/include/SentryClient+Private.h"; sourceTree = ""; }; - 2ACE0EDB752A847C495ECC70D33F8F10 /* SentryAppStartTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStartTracker.h; path = Sources/Sentry/include/SentryAppStartTracker.h; sourceTree = ""; }; - 2AE7CC1AE6D8DE973B5DB086C36C459F /* SentryNSURLRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSURLRequest.h; path = Sources/Sentry/include/SentryNSURLRequest.h; sourceTree = ""; }; - 2B0EDEBD51E8273444486EC30BC21871 /* SentryTransportAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransportAdapter.h; path = Sources/Sentry/include/SentryTransportAdapter.h; sourceTree = ""; }; - 2B11242E13E96FC3D96938A5BBBF91D4 /* SentryNSURLRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSURLRequest.m; path = Sources/Sentry/SentryNSURLRequest.m; sourceTree = ""; }; - 2B227D03F34D001264F4931343C3CFDF /* SentryProfiler+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryProfiler+Private.h"; path = "Sources/Sentry/include/SentryProfiler+Private.h"; sourceTree = ""; }; + 29A677004F9648AD355A23D448EE6FD5 /* SentryDateUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDateUtil.m; path = Sources/Sentry/SentryDateUtil.m; sourceTree = ""; }; + 2A5502C1BB41C9CB48FC04B0AA902541 /* SentryReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryReachability.h; path = Sources/Sentry/include/SentryReachability.h; sourceTree = ""; }; + 2A79989E04584B70FDCF4FB0E6FFC504 /* SentryViewPhotographer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryViewPhotographer.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryViewPhotographer.swift; sourceTree = ""; }; + 2A80A7A13984B16A5017326FC28E37A4 /* SentryMigrateSessionInit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMigrateSessionInit.m; path = Sources/Sentry/SentryMigrateSessionInit.m; sourceTree = ""; }; + 2A810B627FDA462FCDFBFB1A545F216F /* SentryCrashStackCursor_MachineContext.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashStackCursor_MachineContext.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_MachineContext.c; sourceTree = ""; }; + 2B197A91F7D0C4150426ACD0206DC628 /* SentryDispatchSourceProviderProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchSourceProviderProtocol.h; path = Sources/Sentry/include/SentryDispatchSourceProviderProtocol.h; sourceTree = ""; }; 2B31AFAB139B55E0B8A0137989929E2F /* NSURLRequest+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocket.h"; path = "SocketRocket/NSURLRequest+SRWebSocket.h"; sourceTree = ""; }; 2B77F6A4C4D6FD48E264BB250616E327 /* MIKMIDISystemKeepAliveCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISystemKeepAliveCommand.m; path = Source/MIKMIDISystemKeepAliveCommand.m; sourceTree = ""; }; 2B7819928A362B7331919F4DDEF0E2C4 /* MIKMIDINoteCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDINoteCommand.m; path = Source/MIKMIDINoteCommand.m; sourceTree = ""; }; + 2B8E5A0AF65B2B2E00649D8467C40419 /* SentryLevelHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLevelHelper.h; path = Sources/Sentry/include/SentryLevelHelper.h; sourceTree = ""; }; 2BCE9430692A02EDC8F1F3BC1C817CFC /* DDFileLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDFileLogger.m; path = Sources/CocoaLumberjack/DDFileLogger.m; sourceTree = ""; }; 2BF22700F7D912858F36BFD47695EF22 /* MIKMIDIMappableResponder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMappableResponder.h; path = Source/MIKMIDIMappableResponder.h; sourceTree = ""; }; - 2C8285DF218C57961D66C58B70E3D3D2 /* NSArray+SentrySanitize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+SentrySanitize.h"; path = "Sources/Sentry/include/NSArray+SentrySanitize.h"; sourceTree = ""; }; + 2C4A091BDDB40BA378161CF539D14D11 /* SentryWatchdogTerminationBreadcrumbProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationBreadcrumbProcessor.h; path = Sources/Sentry/include/SentryWatchdogTerminationBreadcrumbProcessor.h; sourceTree = ""; }; 2C9000C70F5BE4EC4A7A9436C81032EE /* MIKMIDIMappingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMappingManager.m; path = Source/MIKMIDIMappingManager.m; sourceTree = ""; }; - 2D50C68EFFF553446A7C787BEE9E1273 /* SentryThreadHandle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryThreadHandle.cpp; path = Sources/Sentry/SentryThreadHandle.cpp; sourceTree = ""; }; - 2D52FB8E23C078DD53DAE19331258A22 /* SentryRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRequestOperation.m; path = Sources/Sentry/SentryRequestOperation.m; sourceTree = ""; }; + 2D49E26FDEA0EDE4F3D63B6F1E3B3793 /* SentryClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryClient.m; path = Sources/Sentry/SentryClient.m; sourceTree = ""; }; + 2DA940F1554158B255A21A9E225411EB /* SentryWatchdogTerminationScopeObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationScopeObserver.h; path = Sources/Sentry/include/SentryWatchdogTerminationScopeObserver.h; sourceTree = ""; }; 2DFCF710C9D6BDCE5850D34283ABC015 /* Sparkle.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sparkle.release.xcconfig; sourceTree = ""; }; 2E093B03E5DA6356CAA2541D24724400 /* PSWebSocketInflater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketInflater.h; path = PocketSocket/PSWebSocketInflater.h; sourceTree = ""; }; - 2E33FD9E0B047A63DFBACC460099C7A8 /* SentryHttpDateParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHttpDateParser.h; path = Sources/Sentry/include/SentryHttpDateParser.h; sourceTree = ""; }; - 2ECB70880E77E3CA7EACB5B2067A3ECD /* SentryCrashMonitorContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitorContext.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitorContext.h; sourceTree = ""; }; + 2E700A685FD8EBECBCF26E1AFD0B2EED /* SentryExtraContextProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryExtraContextProvider.h; path = Sources/Sentry/SentryExtraContextProvider.h; sourceTree = ""; }; + 2EBD7244F2BC8F0C99E45AF1D5057468 /* SentryCrashC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashC.h; path = Sources/SentryCrash/Recording/SentryCrashC.h; sourceTree = ""; }; 2F194FCABAEDAB823F9B72AF05D34561 /* Sentry-Sentry */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "Sentry-Sentry"; path = Sentry.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 2F6338A2D362B2FD9BA68A63ADCE1D35 /* SentryCrashReportFixer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashReportFixer.c; path = Sources/SentryCrash/Recording/SentryCrashReportFixer.c; sourceTree = ""; }; - 2F9D6B8960C5E4C52013192512A8E2FA /* SentryScreenFrames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScreenFrames.h; path = Sources/Sentry/include/HybridPublic/SentryScreenFrames.h; sourceTree = ""; }; - 2FE92B3044EA5408E8C91A67FA4EDAC6 /* SentryTouchTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryTouchTracker.swift; path = Sources/Swift/Integrations/SessionReplay/SentryTouchTracker.swift; sourceTree = ""; }; + 2F25F3CE7B1A0BBC43D6EC09C657694D /* SentryQueueableRequestManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryQueueableRequestManager.h; path = Sources/Sentry/include/SentryQueueableRequestManager.h; sourceTree = ""; }; + 2F330A5304CD73E2EB40FB043576762E /* SentryCrash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrash.h; path = Sources/SentryCrash/Recording/SentryCrash.h; sourceTree = ""; }; + 2F896A2723E86A8500CA7B550BB64E1E /* SentryMaskRendererV2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMaskRendererV2.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryMaskRendererV2.swift; sourceTree = ""; }; + 3046CF312C54D83F1BF1B011E53368EA /* SentryDictionaryDeepSearch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDictionaryDeepSearch.m; path = Sources/SentryCrash/Reporting/Filters/Tools/SentryDictionaryDeepSearch.m; sourceTree = ""; }; 308889CAB3F4EF7E155B8902D89C91BA /* DDRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDRange.h; path = Core/Categories/DDRange.h; sourceTree = ""; }; - 30BCDDA889B1220E6908312CF1762A6F /* SentryIntegrationProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryIntegrationProtocol.swift; path = Sources/Swift/Protocol/SentryIntegrationProtocol.swift; sourceTree = ""; }; + 30A8A3DAC173E05B2F0BB40A237D3A21 /* UIViewController+Sentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Sentry.m"; path = "Sources/Sentry/UIViewController+Sentry.m"; sourceTree = ""; }; 31078F47E86FF15C7DDD14551671A52F /* HTTPDynamicFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPDynamicFileResponse.m; path = Core/Responses/HTTPDynamicFileResponse.m; sourceTree = ""; }; - 31BA31BAA87A658873EED3B63158688E /* SentryCrashCPU_arm64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_arm64.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm64.c; sourceTree = ""; }; - 3204071E149956EE4EDFDA68CEFA1EF0 /* SentryDelayedFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDelayedFrame.h; path = Sources/Sentry/include/SentryDelayedFrame.h; sourceTree = ""; }; - 321C61AC56386B600A495E1B2162C865 /* SentrySwizzle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySwizzle.m; path = Sources/Sentry/SentrySwizzle.m; sourceTree = ""; }; - 322924C6AE953800AA28C13FDF607F10 /* SentryMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMessage.m; path = Sources/Sentry/SentryMessage.m; sourceTree = ""; }; + 316236D9C173411539F7E7F4A637842F /* SentryPixelBuffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryPixelBuffer.swift; path = Sources/Swift/Integrations/SessionReplay/SentryPixelBuffer.swift; sourceTree = ""; }; + 31662AC140EAB71ADE4F22051918EF76 /* FileManager+SentryTracing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+SentryTracing.swift"; path = "Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift"; sourceTree = ""; }; + 3176F06FFFF10AF7105AD2AA38B09181 /* Data+SentryTracing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+SentryTracing.swift"; path = "Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift"; sourceTree = ""; }; + 31B0FEAEE80615E6DB6CC8F99175C4D3 /* SentryDiscardReasonMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDiscardReasonMapper.h; path = Sources/Sentry/include/SentryDiscardReasonMapper.h; sourceTree = ""; }; + 31B995DE34CCFCF5DE8B1F6AB7D05486 /* SentryCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryCodable.swift; path = Sources/Swift/Protocol/Codable/SentryCodable.swift; sourceTree = ""; }; + 31C5457FF8ADE708DFF7EFB02311DB60 /* SentryCrashStackCursor_SelfThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor_SelfThread.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.h; sourceTree = ""; }; 327361A487C2579906EEC29BEE955F87 /* MIKMIDIPort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPort.h; path = Source/MIKMIDIPort.h; sourceTree = ""; }; - 3297F891BE6D98D84E5D1AB5F382AC09 /* SentryDependencyContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDependencyContainer.m; path = Sources/Sentry/SentryDependencyContainer.m; sourceTree = ""; }; - 32DF25CCCF77CF0E1C1D910FE39CAF8B /* SentryProfilingConditionals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilingConditionals.h; path = Sources/Sentry/Public/SentryProfilingConditionals.h; sourceTree = ""; }; + 329823FCF83AECFFBADBD6558C83247C /* SentryDsn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDsn.h; path = Sources/Sentry/Public/SentryDsn.h; sourceTree = ""; }; 32E6A74A3156E5EE30317B4653A10CB0 /* MIKMIDI.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MIKMIDI.debug.xcconfig; sourceTree = ""; }; - 32F181CC70B00BA24D837331622C011A /* SentryProfilerSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerSerialization.h; path = Sources/Sentry/include/SentryProfilerSerialization.h; sourceTree = ""; }; - 3302139AC3FF756332BA39058CAA2092 /* SentryQueueableRequestManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryQueueableRequestManager.h; path = Sources/Sentry/include/SentryQueueableRequestManager.h; sourceTree = ""; }; - 338019F931CAC4146FEBD9A37C310EA0 /* SentryCrashString.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashString.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashString.c; sourceTree = ""; }; - 33B6867B0A50035AB7916B156D4CC953 /* SentryCrashReportStore.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashReportStore.c; path = Sources/SentryCrash/Recording/SentryCrashReportStore.c; sourceTree = ""; }; - 33E62911AE1376A5100B834A3F2514EA /* SentrySessionListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentrySessionListener.swift; path = Sources/Swift/Protocol/SentrySessionListener.swift; sourceTree = ""; }; - 33FCBB7E384DD90E7D270977DDEB7D1D /* SentryNSTimerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSTimerFactory.h; path = Sources/Sentry/include/SentryNSTimerFactory.h; sourceTree = ""; }; + 335A3440400FC1A549AEA4C1BFF24F37 /* SentryAppStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStateManager.m; path = Sources/Sentry/SentryAppStateManager.m; sourceTree = ""; }; + 3397846B7AA2F27310F47D9DADD93BDD /* SentryInternalSerializable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalSerializable.h; path = Sources/Sentry/include/SentryInternalSerializable.h; sourceTree = ""; }; 342C4BFA3B1528D963A808CA031866E1 /* MIKMIDICommand_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDICommand_SubclassMethods.h; path = Source/MIKMIDICommand_SubclassMethods.h; sourceTree = ""; }; + 3434547D607D12E91702F4301342CB10 /* SentryCrashDefaultMachineContextWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDefaultMachineContextWrapper.h; path = Sources/Sentry/include/SentryCrashDefaultMachineContextWrapper.h; sourceTree = ""; }; 34464D38DB64C467279A7B55DA1F31D5 /* ORSSerialBuffer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ORSSerialBuffer.m; path = Source/ORSSerialBuffer.m; sourceTree = ""; }; - 344B186FD0AC9E600E9A074894687420 /* SentryThreadInspector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryThreadInspector.m; path = Sources/Sentry/SentryThreadInspector.m; sourceTree = ""; }; - 3473B11BCEC727EDC9EE47EA72638864 /* SentryDisplayLinkWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDisplayLinkWrapper.h; path = Sources/Sentry/include/SentryDisplayLinkWrapper.h; sourceTree = ""; }; - 3495B8C94EDB6B1179F5143DB18AC308 /* SentryCoreDataSwizzling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCoreDataSwizzling.m; path = Sources/Sentry/SentryCoreDataSwizzling.m; sourceTree = ""; }; - 34A3BB5BA8E9818AEACCB1BD6DD07585 /* SentryStacktrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryStacktrace.h; path = Sources/Sentry/Public/SentryStacktrace.h; sourceTree = ""; }; - 34C34F80F098AB0FE5966769EB95AFB2 /* SentrySession+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySession+Private.h"; path = "Sources/Sentry/include/SentrySession+Private.h"; sourceTree = ""; }; - 351EBB12EB2B6E30EAC0B29EC263DA93 /* SentryCrashStackCursor_Backtrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor_Backtrace.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_Backtrace.h; sourceTree = ""; }; - 35A4FCE928F67C274EDA444289DEBAD1 /* SentryGlobalEventProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryGlobalEventProcessor.h; path = Sources/Sentry/include/SentryGlobalEventProcessor.h; sourceTree = ""; }; + 349D0679DE687C71E44AF38C213E94BA /* SentrySystemWrapper.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentrySystemWrapper.mm; path = Sources/Sentry/SentrySystemWrapper.mm; sourceTree = ""; }; + 34F40A24EF070935EAB8080FEC19E264 /* SentrySampling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySampling.m; path = Sources/Sentry/SentrySampling.m; sourceTree = ""; }; + 35C63915FADE137DBADEE5E26D32588E /* SentryFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFrame.m; path = Sources/Sentry/SentryFrame.m; sourceTree = ""; }; + 35E8F22E89E5AE0BF8B33125B9E34560 /* SentryCrashUUIDConversion.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashUUIDConversion.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashUUIDConversion.c; sourceTree = ""; }; 360DCC1ECB42ED92A9FC9B41228892B8 /* MIKMIDIEventIterator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIEventIterator.m; path = Source/MIKMIDIEventIterator.m; sourceTree = ""; }; - 361A8A768FB0B073B6872EDEB5E96CFD /* SentryCrashSignalInfo.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashSignalInfo.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashSignalInfo.c; sourceTree = ""; }; 3632911B297BDF8F22B432287E6B7D20 /* MIKMIDIDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIDevice.h; path = Source/MIKMIDIDevice.h; sourceTree = ""; }; - 36A34F53638D44A63BCCCAD23B2DA812 /* SentryTransactionContext+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryTransactionContext+Private.h"; path = "Sources/Sentry/include/SentryTransactionContext+Private.h"; sourceTree = ""; }; + 36B2B3792103264900DFCB8E8272902A /* SentryUIApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIApplication.h; path = Sources/Sentry/include/SentryUIApplication.h; sourceTree = ""; }; 36D6B5D4D68F48D96C4BF35A6758112C /* ORSSerialRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ORSSerialRequest.h; path = Source/ORSSerialRequest.h; sourceTree = ""; }; - 36DB3F3CE4F488C2E33D99FCCEA4A1A2 /* SentryAppState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppState.m; path = Sources/Sentry/SentryAppState.m; sourceTree = ""; }; + 36FCFEE797CF5B39D2CA3BEEB8344416 /* SentryDataCategoryMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDataCategoryMapper.h; path = Sources/Sentry/include/SentryDataCategoryMapper.h; sourceTree = ""; }; 36FD7BE852BC2FF341138C7171380B46 /* PSWebSocketBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketBuffer.h; path = PocketSocket/PSWebSocketBuffer.h; sourceTree = ""; }; - 388AE3DF38CAF85A745A190B1499A0F3 /* SentrySpanStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanStatus.m; path = Sources/Sentry/SentrySpanStatus.m; sourceTree = ""; }; - 38B96878D2F4FD366FEF8BC6E86C35DA /* SentryPropagationContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPropagationContext.h; path = Sources/Sentry/SentryPropagationContext.h; sourceTree = ""; }; + 379BCAC282AF45EF53C5AB10EFF1381D /* SentryThreadWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryThreadWrapper.h; path = Sources/Sentry/include/SentryThreadWrapper.h; sourceTree = ""; }; + 37C9372E625140AF98A56AC71B1DC432 /* SentryNSDataSwizzling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSDataSwizzling.m; path = Sources/Sentry/SentryNSDataSwizzling.m; sourceTree = ""; }; + 37E037BE692A1A0CF1878CF5F94EDBB2 /* SentrySysctl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySysctl.m; path = Sources/Sentry/SentrySysctl.m; sourceTree = ""; }; + 380720F289D32D2C48334147581D9570 /* UIRedactBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIRedactBuilder.swift; path = Sources/Swift/Core/Tools/ViewCapture/UIRedactBuilder.swift; sourceTree = ""; }; + 3811493C5079B9277374661C1B287BE6 /* SentryRRWebVideoEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebVideoEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebVideoEvent.swift; sourceTree = ""; }; + 3814EB66727ED77A2067142A97224796 /* SentryDefaultObjCRuntimeWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDefaultObjCRuntimeWrapper.m; path = Sources/Sentry/SentryDefaultObjCRuntimeWrapper.m; sourceTree = ""; }; + 38A7C69557DDF773EC87A366583F8B45 /* SentryUserAccess.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUserAccess.m; path = Sources/Sentry/SentryUserAccess.m; sourceTree = ""; }; + 391C2BF6E54F38FEEFC8ECA4CF69623D /* SentryScope+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryScope+Private.h"; path = "Sources/Sentry/include/SentryScope+Private.h"; sourceTree = ""; }; + 394A9C321CBC68C8D29496EC6670DFAF /* SentryCrashCPU_x86_64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_x86_64.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_x86_64.c; sourceTree = ""; }; 3980919F72C2514EA9B7B839CD47DC06 /* HTTPDynamicFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPDynamicFileResponse.h; path = Core/Responses/HTTPDynamicFileResponse.h; sourceTree = ""; }; - 3A9B7CDE009191229E1CE9C10BBD252B /* SentryStacktraceBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryStacktraceBuilder.m; path = Sources/Sentry/SentryStacktraceBuilder.m; sourceTree = ""; }; - 3AA0B27EDB7D51C38B986804EC5216C3 /* SentryTraceProfiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceProfiler.h; path = Sources/Sentry/include/SentryTraceProfiler.h; sourceTree = ""; }; + 39923169280D94DC64CB6FD71BBCD5FE /* PrivatesHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PrivatesHeader.h; path = Sources/Sentry/include/HybridPublic/PrivatesHeader.h; sourceTree = ""; }; + 39B0FA1FE890CA999B3D2831011107B2 /* SentrySerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySerialization.h; path = Sources/Sentry/include/SentrySerialization.h; sourceTree = ""; }; + 39EFEC74A4F6F18F91E7272FB3627AD5 /* SentryNSURLSessionTaskSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSURLSessionTaskSearch.h; path = Sources/Sentry/include/SentryNSURLSessionTaskSearch.h; sourceTree = ""; }; + 3A4DB2B88278CCC63A35AFF04CD01C39 /* SentryOnDemandReplayError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryOnDemandReplayError.swift; path = Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplayError.swift; sourceTree = ""; }; + 3ABA2E4A6693FE9390380ED94ADB6F3F /* SentryExtraContextProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryExtraContextProvider.m; path = Sources/Sentry/SentryExtraContextProvider.m; sourceTree = ""; }; + 3B16013CA9FBDBE5FD667A0613F0AE6B /* SentryCrashDoctor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashDoctor.m; path = Sources/SentryCrash/Recording/SentryCrashDoctor.m; sourceTree = ""; }; + 3B4A0BA061D8447BF292ECB5B6EE7AFF /* SentryTouchTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryTouchTracker.swift; path = Sources/Swift/Integrations/SessionReplay/SentryTouchTracker.swift; sourceTree = ""; }; 3B4DD6C47B43DBC164DC611E6F13AC05 /* MIKMIDIMetaMarkerTextEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaMarkerTextEvent.h; path = Source/MIKMIDIMetaMarkerTextEvent.h; sourceTree = ""; }; - 3BAB7C40BFD9AC1502BCCC1B1D0E607F /* SentryLevelHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLevelHelper.h; path = Sources/Sentry/include/SentryLevelHelper.h; sourceTree = ""; }; - 3BB002B4E1D9B65F4E897CA0FB7A4B36 /* SentryAsyncSafeLog.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryAsyncSafeLog.c; path = Sources/Sentry/SentryAsyncSafeLog.c; sourceTree = ""; }; 3BC187B3C34571706D0F5C0D90316ACF /* MIKMIDINoteOffCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDINoteOffCommand.h; path = Source/MIKMIDINoteOffCommand.h; sourceTree = ""; }; - 3BC79C707030930C0BEB9E2493247685 /* SentryDiscardedEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDiscardedEvent.h; path = Sources/Sentry/include/SentryDiscardedEvent.h; sourceTree = ""; }; + 3BFA2A57FE74C0109751D246FA015350 /* SentryUIViewControllerSwizzling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIViewControllerSwizzling.h; path = Sources/Sentry/include/SentryUIViewControllerSwizzling.h; sourceTree = ""; }; + 3BFA36DAFE25C26848B65D5B9546792C /* SentryProfileOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryProfileOptions.swift; path = Sources/Swift/Core/Integrations/Performance/SentryProfileOptions.swift; sourceTree = ""; }; + 3C57C827E9D9379B1CB7C8A6BF78F51A /* SentryCoreDataTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCoreDataTrackingIntegration.m; path = Sources/Sentry/SentryCoreDataTrackingIntegration.m; sourceTree = ""; }; 3C728140650FD24C44034CB0E47BE08A /* NSURLRequest+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+SRWebSocket.m"; path = "SocketRocket/NSURLRequest+SRWebSocket.m"; sourceTree = ""; }; - 3C74B24FB5704C924583B5804B9DA3E7 /* SentryGeo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryGeo.m; path = Sources/Sentry/SentryGeo.m; sourceTree = ""; }; - 3CAD40E9A685469EA227DFEE4E12C4D3 /* SentryLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLog.h; path = Sources/Sentry/include/SentryLog.h; sourceTree = ""; }; + 3C80EAE42EB587D68B56A5C4CED3B876 /* SentryEnvelopeItemHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelopeItemHeader.m; path = Sources/Sentry/SentryEnvelopeItemHeader.m; sourceTree = ""; }; + 3CAE2FCC3E4271135530031AB7E5D8D8 /* SentryPerformanceTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPerformanceTracker.m; path = Sources/Sentry/SentryPerformanceTracker.m; sourceTree = ""; }; 3D0121B52C65597E49D8BFAF7AD24D59 /* HTTPDataResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPDataResponse.m; path = Core/Responses/HTTPDataResponse.m; sourceTree = ""; }; - 3D185E9BE30A18B4159AEE5B24E6FF2F /* SentryMigrateSessionInit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMigrateSessionInit.m; path = Sources/Sentry/SentryMigrateSessionInit.m; sourceTree = ""; }; - 3D2F693048237AC1DAFF856384FD18E3 /* SentryViewHierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryViewHierarchy.h; path = Sources/Sentry/include/SentryViewHierarchy.h; sourceTree = ""; }; - 3D680C891D3BD3CF2030A2B756AB4E23 /* SentryRandom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRandom.h; path = Sources/Sentry/include/SentryRandom.h; sourceTree = ""; }; + 3D31F565F26C3E8DE6E116F9CB27D589 /* SentryCrashThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashThread.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashThread.h; sourceTree = ""; }; 3D9600B68ADF8A7BC8A41FD9147307F1 /* PocketSocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PocketSocket-prefix.pch"; sourceTree = ""; }; 3D9E5C74871E9B3FCA8CFBCF49BE558A /* MIKMIDIUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIUtilities.m; path = Source/MIKMIDIUtilities.m; sourceTree = ""; }; + 3DA0945F044E57FC4CE6EEC35A93D13A /* SentryCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReport.h; path = Sources/SentryCrash/Recording/SentryCrashReport.h; sourceTree = ""; }; + 3DAFF5FDBEAD7BA25D4D7B2500CA8B22 /* SentrySwizzleWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwizzleWrapper.h; path = Sources/Sentry/include/SentrySwizzleWrapper.h; sourceTree = ""; }; 3DBF4C768EAE37EDA9A497C404AD5067 /* NSRunLoop+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocket.h"; path = "SocketRocket/NSRunLoop+SRWebSocket.h"; sourceTree = ""; }; 3E0FBD9FA6F80068C5760D31CFE8E782 /* DDFileLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDFileLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDFileLogger.h; sourceTree = ""; }; - 3E1D97E60FA4B5A68B55DA70032AB648 /* SentryDelayedFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDelayedFrame.m; path = Sources/Sentry/SentryDelayedFrame.m; sourceTree = ""; }; 3E3C61AEB35AC606BBE4F31AB6EFD3D3 /* Pods-Hammerspoon-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Hammerspoon-frameworks.sh"; sourceTree = ""; }; 3E78CC11F2A5054C67E14DF1D11AAB22 /* DDLogMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLogMacros.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLogMacros.h; sourceTree = ""; }; - 3EEFAB7EA8C025BF5E3F6214A5F6C577 /* ResourceBundle-Sentry-Sentry-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Sentry-Sentry-Info.plist"; sourceTree = ""; }; + 3EABE42A9BDBE5DA7D9FD19EBEB1552B /* SentryCrashMonitor.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor.c; sourceTree = ""; }; + 3F04E49972C94BB40E3470AEA96076A2 /* SentryCrashReport.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashReport.c; path = Sources/SentryCrash/Recording/SentryCrashReport.c; sourceTree = ""; }; + 3F0C1CCE4B558F1279E802EE852EC994 /* SentryANRTrackerV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryANRTrackerV2.m; path = Sources/Sentry/SentryANRTrackerV2.m; sourceTree = ""; }; 3F20AD937CC715C9437083ECE3CC1149 /* MIKMIDIEntity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIEntity.m; path = Source/MIKMIDIEntity.m; sourceTree = ""; }; - 3F281F38CB8BF28E0D23E111E741B8E5 /* SentryError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryError.h; path = Sources/Sentry/Public/SentryError.h; sourceTree = ""; }; 3F306D8F588C5375C8448E524B5E1C53 /* CocoaAsyncSocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaAsyncSocket-prefix.pch"; sourceTree = ""; }; - 3F40417670FFF525FEAADD3B4DC01127 /* SentryOnDemandReplay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryOnDemandReplay.swift; path = Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift; sourceTree = ""; }; - 3F40593B21CD780B6EE4C019D318CE67 /* SentryCrashIsAppImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashIsAppImage.h; path = Sources/Sentry/include/SentryCrashIsAppImage.h; sourceTree = ""; }; + 3F50E054F032942659168740045E84AE /* SentrySdkPackage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySdkPackage.h; path = Sources/Sentry/include/SentrySdkPackage.h; sourceTree = ""; }; 3F8A5831B0B2E3DCE91FD58EB8328027 /* DAVResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DAVResponse.m; path = Extensions/WebDAV/DAVResponse.m; sourceTree = ""; }; - 3FA1F0852BBD17965FB67AE24D3A296C /* SentryCrashStackCursor.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashStackCursor.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor.c; sourceTree = ""; }; - 3FC67A2A48886BFBE95D156012F5F116 /* SentryCrashReportFilterBasic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFilterBasic.h; path = Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.h; sourceTree = ""; }; 3FEF703340493D0D19727935AE04F688 /* HTTPAuthenticationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPAuthenticationRequest.h; path = Core/HTTPAuthenticationRequest.h; sourceTree = ""; }; 40093623D3B618F467F3F28EEB258916 /* MIKMIDIPort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIPort.m; path = Source/MIKMIDIPort.m; sourceTree = ""; }; 40123422A0F14609043890ED9DE59B5D /* DDLog+LOGV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDLog+LOGV.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDLog+LOGV.h"; sourceTree = ""; }; + 40D9B4E23D028CC45D6ED68BA88D78D5 /* SentrySessionReplayIntegration-Hybrid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySessionReplayIntegration-Hybrid.h"; path = "Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration-Hybrid.h"; sourceTree = ""; }; 40F296E90DD98690B8386DD6DE256ADD /* DDAbstractDatabaseLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDAbstractDatabaseLogger.m; path = Sources/CocoaLumberjack/DDAbstractDatabaseLogger.m; sourceTree = ""; }; 415E9C97D6ECDBD29EDC9F238F4F55D9 /* CLIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLIColor.m; path = Sources/CocoaLumberjack/CLI/CLIColor.m; sourceTree = ""; }; - 418B8FBB65E29272B3461A075B60B027 /* SentryUIViewControllerPerformanceTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIViewControllerPerformanceTracker.m; path = Sources/Sentry/SentryUIViewControllerPerformanceTracker.m; sourceTree = ""; }; + 418EADF1958EC0B72736CF1ACE9AC785 /* SentrySDK+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySDK+Private.h"; path = "Sources/Sentry/include/SentrySDK+Private.h"; sourceTree = ""; }; + 41BBB46D1FC26E9A9EEE21EAD0AF902A /* SentryRRWebSpanEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebSpanEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebSpanEvent.swift; sourceTree = ""; }; 41E0EE5B81F67811FF6BBAB9FCEC3D9D /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = ""; }; 4211FF8B675AD99552F7A26CE7CDD7ED /* MIKMIDI-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MIKMIDI-prefix.pch"; sourceTree = ""; }; - 42406CE116E1F217BD239B34DE3CC9C2 /* SentryCoreDataTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCoreDataTrackingIntegration.h; path = Sources/Sentry/include/SentryCoreDataTrackingIntegration.h; sourceTree = ""; }; + 429105E10E5496746F1E3568999BBFD7 /* SentrySystemEventBreadcrumbs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySystemEventBreadcrumbs.h; path = Sources/Sentry/include/SentrySystemEventBreadcrumbs.h; sourceTree = ""; }; 42AC81B40B97DF56D08CB62B5AF871C6 /* Pods-Hammerspoon.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Hammerspoon.debug.xcconfig"; sourceTree = ""; }; - 430F021FD0317357DB30A3675FDD0E38 /* SentryTracer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTracer.m; path = Sources/Sentry/SentryTracer.m; sourceTree = ""; }; + 430652E45105CAFD41539D0566D1445C /* SentryCrashReportConverter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportConverter.h; path = Sources/Sentry/include/SentryCrashReportConverter.h; sourceTree = ""; }; 431907C6B101D87A5D1F3C262A594167 /* CocoaHTTPServer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaHTTPServer.release.xcconfig; sourceTree = ""; }; - 43668C08A60CD18FE2AB42F0078E97C9 /* SentryStacktraceBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryStacktraceBuilder.h; path = Sources/Sentry/include/SentryStacktraceBuilder.h; sourceTree = ""; }; + 4368713B1FE88AF5DA10E9243D722F26 /* SentryRRWebOptionsEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebOptionsEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebOptionsEvent.swift; sourceTree = ""; }; + 436F2922BFBB9EBD25814927623FBB7E /* ResourceBundle-Sentry-Sentry-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Sentry-Sentry-Info.plist"; sourceTree = ""; }; 439E12F2F5FF227C1EEBA4139698416F /* MIKMIDINoteEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDINoteEvent.h; path = Source/MIKMIDINoteEvent.h; sourceTree = ""; }; - 43E7360C1E797D7734623EABE3825A14 /* UIViewController+Sentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Sentry.m"; path = "Sources/Sentry/UIViewController+Sentry.m"; sourceTree = ""; }; 43EE2D0D8212F6A8B92C1170D5D4BAAC /* MIKMIDIMetaEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaEvent.h; path = Source/MIKMIDIMetaEvent.h; sourceTree = ""; }; - 440BFF887B8FEBEA78D7FE02916A1E97 /* SentryLevelMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLevelMapper.m; path = Sources/Sentry/SentryLevelMapper.m; sourceTree = ""; }; - 44213F5DA0BF41B164907076C128BB7C /* SentrySysctl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySysctl.h; path = Sources/Sentry/include/SentrySysctl.h; sourceTree = ""; }; - 4434E2058D7BB29344E8826699301693 /* SentryCrashReportConverter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashReportConverter.m; path = Sources/Sentry/SentryCrashReportConverter.m; sourceTree = ""; }; 446B4CF957F3C0C801C5F70DBA29E7D1 /* CocoaAsyncSocket.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaAsyncSocket.debug.xcconfig; sourceTree = ""; }; + 44E6965C31564C8CC1589C2C4ED6F9CD /* SentryFileIOTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFileIOTracker.h; path = Sources/Sentry/include/SentryFileIOTracker.h; sourceTree = ""; }; 44ECBF08299A8C2BA8F896328A99E113 /* SPUUserUpdateState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUserUpdateState.h; path = Sparkle.framework/Versions/B/Headers/SPUUserUpdateState.h; sourceTree = ""; }; + 450C9712F3582C5F6928D190E5A22E0D /* SentryFileIOTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFileIOTrackingIntegration.h; path = Sources/Sentry/include/SentryFileIOTrackingIntegration.h; sourceTree = ""; }; + 4560AB5859635E3ACE377AD42C07D96C /* SentryTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTracer.h; path = Sources/Sentry/include/SentryTracer.h; sourceTree = ""; }; 45E02FBB38C1B1059795527F815E7FEF /* MIKMIDIPolyphonicKeyPressureEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPolyphonicKeyPressureEvent.h; path = Source/MIKMIDIPolyphonicKeyPressureEvent.h; sourceTree = ""; }; 45EB4297994223B1DA728605183EB558 /* MIKMIDIMetaEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaEvent.m; path = Source/MIKMIDIMetaEvent.m; sourceTree = ""; }; - 45F39E50DC59A483ED314FAE0E0D0656 /* SentryAppStartTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStartTrackingIntegration.h; path = Sources/Sentry/include/SentryAppStartTrackingIntegration.h; sourceTree = ""; }; - 461B669F0C36F11FE6B3BABD5BA67277 /* SentryCoreDataSwizzling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCoreDataSwizzling.h; path = Sources/Sentry/include/SentryCoreDataSwizzling.h; sourceTree = ""; }; 462B92525B0663237A3A78E871ED4F38 /* MIKMIDISynthesizerInstrument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISynthesizerInstrument.m; path = Source/MIKMIDISynthesizerInstrument.m; sourceTree = ""; }; - 46381AD6F5BDC8515672C8B29828B1D4 /* SentryNetworkTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNetworkTracker.m; path = Sources/Sentry/SentryNetworkTracker.m; sourceTree = ""; }; 46476A7B8A6CD10A627F9418D169CCF9 /* MIKMIDIClientDestinationEndpoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIClientDestinationEndpoint.h; path = Source/MIKMIDIClientDestinationEndpoint.h; sourceTree = ""; }; 467A45C14018529DF04D635A1F3E01BB /* PocketSocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PocketSocket.release.xcconfig; sourceTree = ""; }; 469D7081C4DC34D2858E99DDFF2D0366 /* DDNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDNumber.m; path = Core/Categories/DDNumber.m; sourceTree = ""; }; + 470BF913F7D53019E3A526D3E9B05899 /* SentryFileIOTracker+SwiftHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SentryFileIOTracker+SwiftHelpers.swift"; path = "Sources/Swift/Integrations/Performance/IO/SentryFileIOTracker+SwiftHelpers.swift"; sourceTree = ""; }; 473E75BDFDA04AA427FA70CF259925D1 /* SRRunLoopThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRunLoopThread.h; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.h; sourceTree = ""; }; - 476C98F025039310163818F921A55D38 /* SentryNSError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSError.m; path = Sources/Sentry/SentryNSError.m; sourceTree = ""; }; 47E66E12C75AEA902457053C1BFE6B7D /* Pods-Hammerspoon-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Hammerspoon-acknowledgements.markdown"; sourceTree = ""; }; 4842B2B6A4A94FD84499266608D0798D /* SUUpdaterDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUUpdaterDelegate.h; path = Sparkle.framework/Versions/B/Headers/SUUpdaterDelegate.h; sourceTree = ""; }; - 484625B3B8EEE502C5E32EDCFBFCCB80 /* SentryReplayVideoMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayVideoMaker.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayVideoMaker.swift; sourceTree = ""; }; 4849D2E9F89F9438BE85A9EEB1BE5D96 /* MIKMIDIChannelEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIChannelEvent.m; path = Source/MIKMIDIChannelEvent.m; sourceTree = ""; }; - 487C769E7266A3462A910FF846140E41 /* NSLocale+Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLocale+Sentry.h"; path = "Sources/Sentry/include/NSLocale+Sentry.h"; sourceTree = ""; }; + 485C496F42583F102554E3C3FF0DE554 /* SentrySampling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySampling.h; path = Sources/Sentry/include/SentrySampling.h; sourceTree = ""; }; + 4867757319AC6662D5CB9107F231ECA4 /* SentryBreadcrumbCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryBreadcrumbCodable.swift; path = Sources/Swift/Protocol/Codable/SentryBreadcrumbCodable.swift; sourceTree = ""; }; + 48991D9FBE861B5B206864421C37BFF9 /* SentryMetricProfiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMetricProfiler.h; path = Sources/Sentry/include/SentryMetricProfiler.h; sourceTree = ""; }; 48C1F65A6C505A7160B6C24F20026139 /* MIKMIDINoteOffCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDINoteOffCommand.m; path = Source/MIKMIDINoteOffCommand.m; sourceTree = ""; }; - 48D9322EA020FBDDC47783CE1485F9AC /* SentrySerializable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySerializable.h; path = Sources/Sentry/Public/SentrySerializable.h; sourceTree = ""; }; + 48C45256924956809E4091ADDF1A3A9E /* SentryByteCountFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryByteCountFormatter.m; path = Sources/Sentry/SentryByteCountFormatter.m; sourceTree = ""; }; + 48CA33A799DE7529D5F98E4C436AB560 /* SentryUserFeedbackWidget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackWidget.swift; path = Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackWidget.swift; sourceTree = ""; }; + 48E014C597F8503F3B805C5BEB3188CD /* SentryAsynchronousOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAsynchronousOperation.m; path = Sources/Sentry/SentryAsynchronousOperation.m; sourceTree = ""; }; + 49641AC5B3D706F8CF1FE35CB2399AAF /* SentryCrashSymbolicator.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashSymbolicator.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashSymbolicator.c; sourceTree = ""; }; 49657FA527D4E8591335FF1E1AFAAE5B /* MIKMIDIChannelPressureEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIChannelPressureEvent.h; path = Source/MIKMIDIChannelPressureEvent.h; sourceTree = ""; }; - 497FC5C9B7998A38B8F0F623E9B11A30 /* SentryDateUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDateUtils.h; path = Sources/Sentry/include/SentryDateUtils.h; sourceTree = ""; }; - 49A96E1C940808696DE22F968540B651 /* SentryNSProcessInfoWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSProcessInfoWrapper.h; path = Sources/Sentry/include/SentryNSProcessInfoWrapper.h; sourceTree = ""; }; + 49A1639BD3DC7A32C3CA6A797E1E1FB7 /* SentryMsgPackSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMsgPackSerializer.m; path = Sources/Sentry/SentryMsgPackSerializer.m; sourceTree = ""; }; + 49A605666CA85583E29E08A36EB170A8 /* SentryDebugImageProvider+HybridSDKs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryDebugImageProvider+HybridSDKs.h"; path = "Sources/Sentry/include/HybridPublic/SentryDebugImageProvider+HybridSDKs.h"; sourceTree = ""; }; + 49B29681374060812EA7A9A552877F72 /* SentrySamplerDecision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySamplerDecision.h; path = Sources/Sentry/include/SentrySamplerDecision.h; sourceTree = ""; }; 49B3F4666DB87FE6C1B2D8FF038DC8E9 /* MIKMIDIMetaKeySignatureEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaKeySignatureEvent.h; path = Source/MIKMIDIMetaKeySignatureEvent.h; sourceTree = ""; }; + 4A614C469B3A69DBEC8E243609F766B8 /* SentryViewHierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryViewHierarchy.m; path = Sources/Sentry/SentryViewHierarchy.m; sourceTree = ""; }; + 4A9B972E4B599D01FE20772DD4F8BA84 /* SentryThreadHandle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryThreadHandle.cpp; path = Sources/Sentry/SentryThreadHandle.cpp; sourceTree = ""; }; 4AB3F04F0E8D8DBC552EAD1DACCCE390 /* MIKMIDI-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MIKMIDI-dummy.m"; sourceTree = ""; }; - 4BFE958E69086FB4D75DDD48346E5AEA /* SentryNSDataTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSDataTracker.m; path = Sources/Sentry/SentryNSDataTracker.m; sourceTree = ""; }; + 4AF7CE801491B786152F529FE0DD007B /* SentryBaggageSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryBaggageSerialization.swift; path = Sources/Swift/Core/Helper/SentryBaggageSerialization.swift; sourceTree = ""; }; + 4B0272FEEA151065EC6D0602290A4ECC /* SentryCrashJSONCodecObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashJSONCodecObjC.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.h; sourceTree = ""; }; + 4B133E75C9F7EBC7E643723106C3732B /* SentryStackFrame.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryStackFrame.hpp; path = Sources/Sentry/include/SentryStackFrame.hpp; sourceTree = ""; }; + 4B3CE00499D0DC4D8CD0444C39AAE976 /* SentryOptions+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryOptions+Private.h"; path = "Sources/Sentry/include/SentryOptions+Private.h"; sourceTree = ""; }; + 4B93D92D41E4FC4CE881A8F256A2B8C0 /* SentryCrashBinaryImageProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashBinaryImageProvider.h; path = Sources/Sentry/include/SentryCrashBinaryImageProvider.h; sourceTree = ""; }; + 4BC59CF996A489057C315856409524E7 /* SentryThreadWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryThreadWrapper.m; path = Sources/Sentry/SentryThreadWrapper.m; sourceTree = ""; }; + 4BDB86C5FEB06CBC40D536435F0A6253 /* SentryThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryThread.m; path = Sources/Sentry/SentryThread.m; sourceTree = ""; }; + 4BFF15B851B2A7FC1CC6A5D740D06724 /* SentryCrashInstallationReporter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashInstallationReporter.m; path = Sources/Sentry/SentryCrashInstallationReporter.m; sourceTree = ""; }; + 4C0AAD32EA78A0C2DBBB0286C2CE2A46 /* SentryContinuousProfiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryContinuousProfiler.h; path = Sources/Sentry/include/SentryContinuousProfiler.h; sourceTree = ""; }; + 4C42F0634096933ECEB25CA80F635342 /* NSArray+SentrySanitize.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+SentrySanitize.m"; path = "Sources/Sentry/NSArray+SentrySanitize.m"; sourceTree = ""; }; 4C64A38F0FE201F6A4D93D54CF4CDEF8 /* MIKMIDITempoEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDITempoEvent.h; path = Source/MIKMIDITempoEvent.h; sourceTree = ""; }; 4C7E0F1F6C625C241616E69C7138742D /* SPUDownloadData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUDownloadData.h; path = Sparkle.framework/Versions/B/Headers/SPUDownloadData.h; sourceTree = ""; }; - 4C999F593F438C1388269C15ED67DDF8 /* SentryRequestManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRequestManager.h; path = Sources/Sentry/include/SentryRequestManager.h; sourceTree = ""; }; + 4CBAB854066F69496EB0245AEFB9F8A3 /* SentryCrashObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashObjC.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashObjC.h; sourceTree = ""; }; + 4CD6F99BE0B6E03B6B649725645C0B0D /* SentryNSURLRequestBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSURLRequestBuilder.m; path = Sources/Sentry/SentryNSURLRequestBuilder.m; sourceTree = ""; }; 4CEA682C719C79FAFB6D025E3DE00B7D /* MIKMIDIChannelVoiceCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIChannelVoiceCommand.h; path = Source/MIKMIDIChannelVoiceCommand.h; sourceTree = ""; }; - 4CF8E357E7B9DEAFE50F387C635D081A /* SentryTracerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTracerConfiguration.h; path = Sources/Sentry/include/SentryTracerConfiguration.h; sourceTree = ""; }; 4D26CD688523F3C57213401EFDD1E301 /* MIKMIDIChannelPressureEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIChannelPressureEvent.m; path = Source/MIKMIDIChannelPressureEvent.m; sourceTree = ""; }; - 4DB222E7B5F9A8C6793DCB60DD6425F0 /* SentryMeasurementUnit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMeasurementUnit.m; path = Sources/Sentry/SentryMeasurementUnit.m; sourceTree = ""; }; - 4DC4DFC0E74DCAF74A19F11778365624 /* SentryCrashNSErrorUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashNSErrorUtil.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashNSErrorUtil.h; sourceTree = ""; }; + 4E05A8E2066D10DF0929835920C1746D /* SentryTime.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryTime.mm; path = Sources/Sentry/SentryTime.mm; sourceTree = ""; }; 4E1C58FE9A77E25213198A47B0BAB324 /* MIKMIDIMapping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMapping.h; path = Source/MIKMIDIMapping.h; sourceTree = ""; }; - 4E37DE56638D8C8CA4EC981C5B6135CE /* SentrySessionCrashedHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySessionCrashedHandler.m; path = Sources/Sentry/SentrySessionCrashedHandler.m; sourceTree = ""; }; 4E3855502235F54F86C56D7203DE2C7A /* SRHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHash.h; path = SocketRocket/Internal/Utilities/SRHash.h; sourceTree = ""; }; + 4E633D058AB81487F408737C19DFF697 /* SentryTransactionContext+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryTransactionContext+Private.h"; path = "Sources/Sentry/include/SentryTransactionContext+Private.h"; sourceTree = ""; }; 4EA0D791FD848CAEF9ED7FE5687CFAB5 /* PUTResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PUTResponse.h; path = Extensions/WebDAV/PUTResponse.h; sourceTree = ""; }; - 4EBDADCACC51D8D607DCD7647C7F5590 /* SentryFileIOTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFileIOTrackingIntegration.h; path = Sources/Sentry/include/SentryFileIOTrackingIntegration.h; sourceTree = ""; }; - 4F24DBFD966AD61608D15CE3BB599255 /* SentrySpan+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySpan+Private.h"; path = "Sources/Sentry/include/SentrySpan+Private.h"; sourceTree = ""; }; + 4EA7FCD80FE5A77CCF48BBF5C05D6DE0 /* SentryUIEventTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTracker.h; path = Sources/Sentry/include/SentryUIEventTracker.h; sourceTree = ""; }; + 4EB507D998AA7F2F2A28634AA05F2537 /* SentryWatchdogTerminationBreadcrumbProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationBreadcrumbProcessor.m; path = Sources/Sentry/Processors/SentryWatchdogTerminationBreadcrumbProcessor.m; sourceTree = ""; }; + 4F09EB9964B5FE3C5D6F2365842E27F3 /* SentrySpanOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanOperation.h; path = Sources/Sentry/include/SentrySpanOperation.h; sourceTree = ""; }; 4F3CBC5C39968D0ABB2A9C7DEB2B01F8 /* ORSSerialPort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ORSSerialPort.m; path = Source/ORSSerialPort.m; sourceTree = ""; }; 4F819F282E99A70F002E40A2B7B0C61A /* DDMultiFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMultiFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDMultiFormatter.h; sourceTree = ""; }; - 4FACA5BBEC82074BC615BCC18C33EF74 /* SentryOptions+HybridSDKs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryOptions+HybridSDKs.h"; path = "Sources/Sentry/include/HybridPublic/SentryOptions+HybridSDKs.h"; sourceTree = ""; }; - 4FB82215239D51E779DB14364BF0D5B8 /* Sentry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Sentry-umbrella.h"; sourceTree = ""; }; + 50040FF2187CE4DE3EA62225BEFF4234 /* SentryDispatchFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDispatchFactory.m; path = Sources/Sentry/SentryDispatchFactory.m; sourceTree = ""; }; + 50320404BFF01F18A129183B0C337CCC /* SentryEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryEvent+Private.h"; path = "Sources/Sentry/include/SentryEvent+Private.h"; sourceTree = ""; }; 508261EBE24B47C5F9D0AC95B22E953E /* PSWebSocketNetworkThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketNetworkThread.h; path = PocketSocket/PSWebSocketNetworkThread.h; sourceTree = ""; }; - 50B19D46059777D27D66F8A8DE37C02E /* SentryScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScreenshot.h; path = Sources/Sentry/include/SentryScreenshot.h; sourceTree = ""; }; - 50B2B367A1A2B99E2372107ACB0077C2 /* SentryNSDictionarySanitize.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSDictionarySanitize.m; path = Sources/Sentry/SentryNSDictionarySanitize.m; sourceTree = ""; }; - 50C6FB1EF2872A99F49A9617B4A08E32 /* SentryCrashMonitorType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitorType.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitorType.h; sourceTree = ""; }; + 50A1CC7B949AD3F3057926529ED016B3 /* SentryLaunchProfiling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLaunchProfiling.h; path = Sources/Sentry/include/SentryLaunchProfiling.h; sourceTree = ""; }; 516A7342736E484F8820D33AB40C8797 /* CocoaLumberjack-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaLumberjack-prefix.pch"; sourceTree = ""; }; - 518538B382682C5B6438FBE07470E516 /* SentryDateUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDateUtil.m; path = Sources/Sentry/SentryDateUtil.m; sourceTree = ""; }; - 518AFFCFD8120E2F662E84143B688507 /* SentryBaggageSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryBaggageSerialization.swift; path = Sources/Swift/Helper/SentryBaggageSerialization.swift; sourceTree = ""; }; 519AF98C92B517DD023896CD077EBFD4 /* CocoaLumberjack-CocoaLumberjackPrivacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "CocoaLumberjack-CocoaLumberjackPrivacy"; path = CocoaLumberjackPrivacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 51C2B6DB8237282F4AB7577802DE9598 /* SentryLogC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLogC.m; path = Sources/Sentry/SentryLogC.m; sourceTree = ""; }; - 51F2ADAF8E55E7B5F2A237884DAA54A0 /* SentryEnvelopeItemHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeItemHeader.h; path = Sources/Sentry/Public/SentryEnvelopeItemHeader.h; sourceTree = ""; }; 51FC85588605EB1B92C336B2BDE67BD7 /* DDLoggerNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLoggerNames.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLoggerNames.h; sourceTree = ""; }; + 524E182F82AEB8CD9194A07F1BB027E8 /* SentryProfilerTestHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerTestHelpers.h; path = Sources/Sentry/include/SentryProfilerTestHelpers.h; sourceTree = ""; }; + 529BD936C9CA23DDB0ADE2706EE53592 /* SentryCrashDynamicLinker.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashDynamicLinker.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.c; sourceTree = ""; }; + 52A19E71F98BD2CAA84B502AB5867449 /* SentryEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEvent.h; path = Sources/Sentry/Public/SentryEvent.h; sourceTree = ""; }; + 53145BFCB99835D4A526D1BE4F34E7F1 /* NSMutableDictionary+Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableDictionary+Sentry.h"; path = "Sources/Sentry/include/NSMutableDictionary+Sentry.h"; sourceTree = ""; }; 532096B023519D4776147A8050DC57FD /* SRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRError.m; path = SocketRocket/Internal/Utilities/SRError.m; sourceTree = ""; }; - 53336B94ECDDAEE4BECE906CE1B32E0C /* SentryDiscardReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDiscardReason.h; path = Sources/Sentry/include/SentryDiscardReason.h; sourceTree = ""; }; - 5353873D8213E327E58BB3DE44224D07 /* SentryRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRequest.m; path = Sources/Sentry/SentryRequest.m; sourceTree = ""; }; + 53597F7AC2AEF3EF5D07C8035E5FBA9A /* DecodeArbitraryData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecodeArbitraryData.swift; path = Sources/Swift/Protocol/Codable/DecodeArbitraryData.swift; sourceTree = ""; }; 536908CAEFEA94317FD61C71ED227435 /* SRIOConsumer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumer.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.h; sourceTree = ""; }; + 536AE9255874B3EE4CF493D8694B55F5 /* SentryBuildAppStartSpans.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBuildAppStartSpans.m; path = Sources/Sentry/SentryBuildAppStartSpans.m; sourceTree = ""; }; 53726DEF56A26EA94E15AB13A39F4EF4 /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-prefix.pch"; sourceTree = ""; }; 537D22B9A6D972452FDB7D1E218623B9 /* SUUpdatePermissionResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUUpdatePermissionResponse.h; path = Sparkle.framework/Versions/B/Headers/SUUpdatePermissionResponse.h; sourceTree = ""; }; 53BD21DB8B784C65C60DC1CE6061B8FA /* SRProxyConnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRProxyConnect.m; path = SocketRocket/Internal/Proxy/SRProxyConnect.m; sourceTree = ""; }; 53CFC3C21346FB7D2700F4E1A85AB557 /* ORSSerialPortManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ORSSerialPortManager.h; path = Source/ORSSerialPortManager.h; sourceTree = ""; }; - 53E9399903D1343C659402FF1604DB9A /* SentryMetricProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryMetricProfiler.mm; path = Sources/Sentry/SentryMetricProfiler.mm; sourceTree = ""; }; - 53EBFB214FF0139C28586E10C83144DC /* SentryFramesTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFramesTracker.h; path = Sources/Sentry/include/HybridPublic/SentryFramesTracker.h; sourceTree = ""; }; - 540CFA7719FDD2443BB971E4788581B5 /* Sentry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Sentry-dummy.m"; sourceTree = ""; }; - 545E170C74561D2E68A33C354A2A7E0B /* SentrySwizzleWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySwizzleWrapper.m; path = Sources/Sentry/SentrySwizzleWrapper.m; sourceTree = ""; }; - 549C94F5C50CDCE888151B266C22FA7B /* SentryCrashC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashC.h; path = Sources/SentryCrash/Recording/SentryCrashC.h; sourceTree = ""; }; - 54B118A0EA78DC2A4F7845485D3C7F59 /* SentryFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFrame.h; path = Sources/Sentry/Public/SentryFrame.h; sourceTree = ""; }; + 5474B4DCA2758234891C7C33F4150D85 /* SentryObjCRuntimeWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryObjCRuntimeWrapper.h; path = Sources/Sentry/include/SentryObjCRuntimeWrapper.h; sourceTree = ""; }; + 54988B1CBC287D434B40E55EB0F67563 /* SentryEnvelope.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelope.h; path = Sources/Sentry/include/HybridPublic/SentryEnvelope.h; sourceTree = ""; }; 54BAB3ADC8A9F3AC4D2770B544D2CF86 /* MIKMIDIMetaLyricEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaLyricEvent.h; path = Source/MIKMIDIMetaLyricEvent.h; sourceTree = ""; }; - 54D13411BEFB6D1F745DA9A7EA459A40 /* SentryPerformanceTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPerformanceTracker.h; path = Sources/Sentry/include/SentryPerformanceTracker.h; sourceTree = ""; }; + 54E33F6BE33F82C2674E878286B290EC /* SentryUserFeedbackConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackConfiguration.swift; path = Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackConfiguration.swift; sourceTree = ""; }; + 54FF28980D7924C6E4835108FD3E219B /* SentryNSError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSError.h; path = Sources/Sentry/Public/SentryNSError.h; sourceTree = ""; }; 5512BE654B5A8D0635EAEC3986B81467 /* PocketSocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PocketSocket-dummy.m"; sourceTree = ""; }; + 551BB35E3C712DDA178DACCABFA43A21 /* SentryEnvelopeRateLimit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeRateLimit.h; path = Sources/Sentry/include/SentryEnvelopeRateLimit.h; sourceTree = ""; }; + 552B32C071B7653D45542DD29EA3802E /* SentryFramesTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFramesTrackingIntegration.h; path = Sources/Sentry/include/SentryFramesTrackingIntegration.h; sourceTree = ""; }; 553BF87CD5AD99E7E5554E1C079DEBAB /* MIKMIDISourceEndpoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISourceEndpoint.m; path = Source/MIKMIDISourceEndpoint.m; sourceTree = ""; }; - 55B1DE5664ECF76C263A541380A52324 /* SentryClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryClient.m; path = Sources/Sentry/SentryClient.m; sourceTree = ""; }; - 560D47C2A849C53E2AF646879CA2260E /* SentryANRTrackingIntegrationV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryANRTrackingIntegrationV2.h; path = Sources/Sentry/include/SentryANRTrackingIntegrationV2.h; sourceTree = ""; }; + 55B226C7054BEAECF5C271CABC1131B4 /* SentryCrashMemory.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMemory.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashMemory.c; sourceTree = ""; }; + 5620272E87C0CAC0C9AC2E6B49ABD96A /* UIImageHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImageHelper.swift; path = Sources/Swift/Core/Tools/UIImageHelper.swift; sourceTree = ""; }; + 56B0382EE064056D6F3A2E9B182CB2AC /* SentryRetryAfterHeaderParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRetryAfterHeaderParser.h; path = Sources/Sentry/include/SentryRetryAfterHeaderParser.h; sourceTree = ""; }; 56E4030B5363D8465250A7D6A7E485C5 /* SPUStandardUpdaterController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUStandardUpdaterController.h; path = Sparkle.framework/Versions/B/Headers/SPUStandardUpdaterController.h; sourceTree = ""; }; + 579C1987961701C3DC34E4669A1ACAFB /* SentryCrashStackCursor_MachineContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor_MachineContext.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_MachineContext.h; sourceTree = ""; }; + 57C7410D5636DE4AF21AC08BFEB8627B /* SentryDataCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDataCategory.h; path = Sources/Sentry/include/SentryDataCategory.h; sourceTree = ""; }; 58898C2C80AF3049268C2B9E34A65D89 /* ASCIImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ASCIImage-dummy.m"; sourceTree = ""; }; - 58A09D3F0B008C9C53C0AD3BB1459AB9 /* SentryTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTime.h; path = Sources/Sentry/include/SentryTime.h; sourceTree = ""; }; - 58CED6652409D2EE4AA8580A35BF3FD8 /* SentryCrashReportFixer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFixer.h; path = Sources/SentryCrash/Recording/SentryCrashReportFixer.h; sourceTree = ""; }; - 58EA2E9934DEBA053B68AB628755B6FE /* SentryInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryInstallation.m; path = Sources/Sentry/SentryInstallation.m; sourceTree = ""; }; + 58E6C8B30EB4F8596E89D4FB0FA66901 /* SentryAutoSessionTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAutoSessionTrackingIntegration.m; path = Sources/Sentry/SentryAutoSessionTrackingIntegration.m; sourceTree = ""; }; 58FE9CD444F12E26D56766FA813434B9 /* MIKMIDIUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIUtilities.h; path = Source/MIKMIDIUtilities.h; sourceTree = ""; }; + 5910F46B3D41DBDA7CB13B4C14C3CF92 /* SentryPropagationContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPropagationContext.m; path = Sources/Sentry/SentryPropagationContext.m; sourceTree = ""; }; + 593751EA69F36F6172EA650E840CF54F /* SentryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPrivate.h; path = Sources/Sentry/include/SentryPrivate.h; sourceTree = ""; }; 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.debug.xcconfig; sourceTree = ""; }; - 5AC24B8BE5EC6E0E2A51E0126426344D /* SentryStackFrame.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryStackFrame.hpp; path = Sources/Sentry/include/SentryStackFrame.hpp; sourceTree = ""; }; - 5AC81250F6F7558BC4D0408D8607A788 /* SentryDefaultObjCRuntimeWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDefaultObjCRuntimeWrapper.m; path = Sources/Sentry/SentryDefaultObjCRuntimeWrapper.m; sourceTree = ""; }; + 59824770943737B3409AC9C6DFB353AF /* SentryCrashReportFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFilter.h; path = Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilter.h; sourceTree = ""; }; + 59EDC34955C504DDBCF8A1AD1297F174 /* SentryUIEventTrackerTransactionMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTrackerTransactionMode.h; path = Sources/Sentry/include/SentryUIEventTrackerTransactionMode.h; sourceTree = ""; }; + 5AA652C709B56A0B405A3467A2B83D3D /* SentryUIEventTrackerMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTrackerMode.h; path = Sources/Sentry/include/SentryUIEventTrackerMode.h; sourceTree = ""; }; 5AD4F54569A30FB3099349AA2FD35979 /* MIKMIDIClientSourceEndpoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIClientSourceEndpoint.m; path = Source/MIKMIDIClientSourceEndpoint.m; sourceTree = ""; }; - 5B6233CB25C90BD806A74EC8A0CDC6FE /* SentryCrashReport.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashReport.c; path = Sources/SentryCrash/Recording/SentryCrashReport.c; sourceTree = ""; }; - 5B716D891F8A7A134A4C30F6D1EB6697 /* SentryProfilerDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerDefines.h; path = Sources/Sentry/Profiling/SentryProfilerDefines.h; sourceTree = ""; }; - 5BBF982D611A40D45949D5887F6A49BF /* SentryWatchdogTerminationTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationTracker.m; path = Sources/Sentry/SentryWatchdogTerminationTracker.m; sourceTree = ""; }; - 5BCD84DF38C9DAD868654B80C1B208A4 /* SentryNoOpSpan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNoOpSpan.h; path = Sources/Sentry/include/SentryNoOpSpan.h; sourceTree = ""; }; - 5BFED552A97F318C920527A79292C078 /* NSArray+SentrySanitize.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+SentrySanitize.m"; path = "Sources/Sentry/NSArray+SentrySanitize.m"; sourceTree = ""; }; + 5B1C36E4DF7987DAB8302D8EF1DF518A /* SentryAttachment+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryAttachment+Private.h"; path = "Sources/Sentry/include/SentryAttachment+Private.h"; sourceTree = ""; }; + 5B7308025EB333D2B55A98C7A0FC1E5F /* SentryMeta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMeta.h; path = Sources/Sentry/include/SentryMeta.h; sourceTree = ""; }; + 5BE193A78A30E6667AB07E47D03C65C4 /* SentryUIApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIApplication.m; path = Sources/Sentry/SentryUIApplication.m; sourceTree = ""; }; 5C35D434424E05C510E520BEC7FEF937 /* SUUpdater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUUpdater.h; path = Sparkle.framework/Versions/B/Headers/SUUpdater.h; sourceTree = ""; }; - 5C3F4712B197746775AA105B07E7090C /* SentryEnvelopeAttachmentHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelopeAttachmentHeader.m; path = Sources/Sentry/SentryEnvelopeAttachmentHeader.m; sourceTree = ""; }; - 5C90193720FC96FE63CF773E1F182187 /* SentryTransportFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTransportFactory.m; path = Sources/Sentry/SentryTransportFactory.m; sourceTree = ""; }; - 5CCC3B2EF658FC6D3DAE769975D61502 /* SentryMeasurementUnit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMeasurementUnit.h; path = Sources/Sentry/Public/SentryMeasurementUnit.h; sourceTree = ""; }; - 5CD172316CB9D69CED6FBB7CDE8341EB /* SentrySampleDecision.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySampleDecision.m; path = Sources/Sentry/SentrySampleDecision.m; sourceTree = ""; }; + 5C510B32A1849EFD9BE230E7831DE35E /* SentryScopeContextPersistentStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryScopeContextPersistentStore.swift; path = Sources/Swift/Persistence/SentryScopeContextPersistentStore.swift; sourceTree = ""; }; + 5CBDD576DAD0CDB871620E3828CD761F /* SentryNSTimerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSTimerFactory.h; path = Sources/Sentry/include/SentryNSTimerFactory.h; sourceTree = ""; }; 5CDDF693FAFFADE13D12175A61EF2F2C /* CocoaHTTPServer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaHTTPServer-prefix.pch"; sourceTree = ""; }; - 5CF96C2D1602C43299C75888AA2A5B96 /* SentryCrashScopeObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashScopeObserver.m; path = Sources/Sentry/SentryCrashScopeObserver.m; sourceTree = ""; }; - 5D37CE0EF3FFB199E5E799E3F969914E /* SentryMetricKitIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMetricKitIntegration.h; path = Sources/Sentry/include/SentryMetricKitIntegration.h; sourceTree = ""; }; 5D4787A4AD01E6CBF77830877837B0A9 /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SocketRocket-dummy.m"; sourceTree = ""; }; + 5D6107FADD7A4D6A02EB83A93A57348A /* SentryMeasurementValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMeasurementValue.m; path = Sources/Sentry/SentryMeasurementValue.m; sourceTree = ""; }; 5D6D6B8527C99A3626003480ADAB5D99 /* ORSSerialPort.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ORSSerialPort.debug.xcconfig; sourceTree = ""; }; 5D774FC3483E8ABA760F84985504762F /* HTTPLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPLogging.h; path = Core/HTTPLogging.h; sourceTree = ""; }; - 5D908CE206B7EE8AAB43125D9079070E /* SentryTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTransaction.m; path = Sources/Sentry/SentryTransaction.m; sourceTree = ""; }; + 5D9326E03577B623C1AC1B0387909AA4 /* SentryCrashBinaryImageCache.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashBinaryImageCache.c; path = Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.c; sourceTree = ""; }; + 5DBC18A079049AE86C045E2A6F3913B8 /* SentryProfilingConditionals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilingConditionals.h; path = Sources/Sentry/Public/SentryProfilingConditionals.h; sourceTree = ""; }; 5DDFB30E711F1C3FE578EBBEC8808212 /* NSUIApplication+MIKMIDI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSUIApplication+MIKMIDI.m"; path = "Source/NSUIApplication+MIKMIDI.m"; sourceTree = ""; }; 5DE302533817BAEF9AC01B8EE7198ACC /* GCDAsyncUdpSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDAsyncUdpSocket.h; path = Source/GCD/GCDAsyncUdpSocket.h; sourceTree = ""; }; - 5E365316AEDAD33A3CA186A6B525D811 /* SentryScope+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryScope+Private.h"; path = "Sources/Sentry/include/SentryScope+Private.h"; sourceTree = ""; }; - 5E4AA9BD98548AD9E19C1F22443523B5 /* SentryContinuousProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryContinuousProfiler.mm; path = Sources/Sentry/Profiling/SentryContinuousProfiler.mm; sourceTree = ""; }; - 5E8CC9B12E73421758F811C467391775 /* SentryProfilerState.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfilerState.mm; path = Sources/Sentry/Profiling/SentryProfilerState.mm; sourceTree = ""; }; - 5E902F0B7F1248A6F5CB16290E8E1F6E /* SentryExperimentalOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryExperimentalOptions.swift; path = Sources/Swift/SentryExperimentalOptions.swift; sourceTree = ""; }; - 5F4AF1DFD69E838813C79B42D0AFE39C /* SentrySampleDecision+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySampleDecision+Private.h"; path = "Sources/Sentry/include/SentrySampleDecision+Private.h"; sourceTree = ""; }; - 5FCD2D8780D89C918F224760D4CDD736 /* SentryNSError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSError.h; path = Sources/Sentry/Public/SentryNSError.h; sourceTree = ""; }; - 602783FB47616AA7AC2CE4219CA024B5 /* SentryReplayType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayType.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayType.swift; sourceTree = ""; }; - 6037D4B49CF5C089489CECFB8CFBBD87 /* SentryProfilerSerialization.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfilerSerialization.mm; path = Sources/Sentry/Profiling/SentryProfilerSerialization.mm; sourceTree = ""; }; + 5E3C2ADFA10F7F852AEEF7A8DE9EEA83 /* SentryCrashInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashInstallation.m; path = Sources/SentryCrash/Installations/SentryCrashInstallation.m; sourceTree = ""; }; + 5ED352D192C63D0CF0253B4AB24C6C66 /* SentryCrashStackEntryMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackEntryMapper.h; path = Sources/Sentry/include/SentryCrashStackEntryMapper.h; sourceTree = ""; }; + 5F2C1817E4A1C97BDF0BC4097291FF52 /* SentryCrashCPU_arm64.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_arm64.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm64.c; sourceTree = ""; }; + 5F4F15C25AF2BF307B81D105E417B9CB /* SentryTransactionContext.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryTransactionContext.mm; path = Sources/Sentry/SentryTransactionContext.mm; sourceTree = ""; }; + 5F7BC1BF1CAFE7DDAB2B8CE66385058B /* SentryDispatchSourceWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDispatchSourceWrapper.m; path = Sources/Sentry/SentryDispatchSourceWrapper.m; sourceTree = ""; }; + 5FA582CB637004BC96A3D1A091653C33 /* SentryMXManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMXManager.swift; path = Sources/Swift/Core/MetricKit/SentryMXManager.swift; sourceTree = ""; }; + 5FBDF0C2BA961DE92ADF6FA319B00B20 /* SentryViewHierarchyIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryViewHierarchyIntegration.h; path = Sources/Sentry/include/SentryViewHierarchyIntegration.h; sourceTree = ""; }; + 603FFDB6420C6830994B52F4E6633EC5 /* SentryScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScreenshot.m; path = Sources/Sentry/SentryScreenshot.m; sourceTree = ""; }; + 6057AFB6E368501A096D36AC5200D8CA /* SentryUserFeedback.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUserFeedback.m; path = Sources/Sentry/SentryUserFeedback.m; sourceTree = ""; }; 6070688B3B9F5CD8BA8E6F9A8ED1459F /* MIKMIDIMetronome.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetronome.h; path = Source/MIKMIDIMetronome.h; sourceTree = ""; }; - 607ADF718F5D32C95BA86105ADB2AA51 /* SentryCrashString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashString.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashString.h; sourceTree = ""; }; - 60C9088A32AB6A50F44E9155C67AE6A1 /* SentryNSNotificationCenterWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSNotificationCenterWrapper.h; path = Sources/Sentry/include/SentryNSNotificationCenterWrapper.h; sourceTree = ""; }; + 607EADC16855B1A779A3991C3A0EBFD6 /* SentryDateUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDateUtil.h; path = Sources/Sentry/include/SentryDateUtil.h; sourceTree = ""; }; + 608861AAFB8A9A37D02A662816346B36 /* SentrySession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySession.m; path = Sources/Sentry/SentrySession.m; sourceTree = ""; }; + 60C2F6EAD8D037871381A8650AEADA79 /* SentryLevelMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLevelMapper.m; path = Sources/Sentry/SentryLevelMapper.m; sourceTree = ""; }; + 610BB5A8905145D2EE889BB7223C140C /* SentryUserFeedbackWidgetButtonMegaphoneIconView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackWidgetButtonMegaphoneIconView.swift; path = Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackWidgetButtonMegaphoneIconView.swift; sourceTree = ""; }; 617841E5BB6E0B8E755A0C62DB6B25BF /* SUExport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUExport.h; path = Sparkle.framework/Versions/B/Headers/SUExport.h; sourceTree = ""; }; + 618BA3247A099BAAF9854B99AEF2D19F /* SentryAsyncSafeLog.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryAsyncSafeLog.c; path = Sources/Sentry/SentryAsyncSafeLog.c; sourceTree = ""; }; 61984F4DE6B94D0888C23ECD72BABB90 /* MIKMIDISynthesizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISynthesizer.h; path = Source/MIKMIDISynthesizer.h; sourceTree = ""; }; - 61D86C08FA0C01A65B7277011E1005FF /* SentryHttpStatusCodeRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHttpStatusCodeRange.m; path = Sources/Sentry/SentryHttpStatusCodeRange.m; sourceTree = ""; }; - 622C97E1EB283492A3DA70E0D0BA1278 /* SentrySysctl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySysctl.m; path = Sources/Sentry/SentrySysctl.m; sourceTree = ""; }; + 61A750D5ADB197562FFF3E10262A9BFB /* SentryCPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCPU.h; path = Sources/Sentry/include/SentryCPU.h; sourceTree = ""; }; + 61D0FBF0FB9B0DD0B15F5A65A023A765 /* SentryNetworkTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNetworkTracker.h; path = Sources/Sentry/include/SentryNetworkTracker.h; sourceTree = ""; }; + 626A731139D310F97A71D6B1461DA7F3 /* SentryNSDataUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSDataUtils.m; path = Sources/Sentry/SentryNSDataUtils.m; sourceTree = ""; }; + 626D2BE20859CA5A395F1C969F689591 /* SentrySamplingContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySamplingContext.m; path = Sources/Sentry/SentrySamplingContext.m; sourceTree = ""; }; 628B93E18C67B0838D7595837DD1CCCF /* MIKMIDIInputPort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIInputPort.m; path = Source/MIKMIDIInputPort.m; sourceTree = ""; }; - 62C02C2854B1E46006A0EB8867BEF867 /* SentryTimeToDisplayTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTimeToDisplayTracker.m; path = Sources/Sentry/SentryTimeToDisplayTracker.m; sourceTree = ""; }; - 62E1EDB5108C9078E4E19EAAE793CEA7 /* SentryCoreDataTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCoreDataTracker.m; path = Sources/Sentry/SentryCoreDataTracker.m; sourceTree = ""; }; 62EABEDC93B6E8D5EDEB3A5380695CFF /* GCDAsyncUdpSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDAsyncUdpSocket.m; path = Source/GCD/GCDAsyncUdpSocket.m; sourceTree = ""; }; + 630A4D35030DB487DB342C88474FB58A /* SentryPredicateDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPredicateDescriptor.m; path = Sources/Sentry/SentryPredicateDescriptor.m; sourceTree = ""; }; 63287F7C271956C517D8C46F44A34241 /* MIKMIDIMapping.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMapping.m; path = Source/MIKMIDIMapping.m; sourceTree = ""; }; - 6432131DACBE51AB900E90C31E26BD93 /* SentryLevelMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLevelMapper.h; path = Sources/Sentry/include/SentryLevelMapper.h; sourceTree = ""; }; - 6497495F631BB324F8FE709B41A518CC /* SentryCrashReportStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportStore.h; path = Sources/SentryCrash/Recording/SentryCrashReportStore.h; sourceTree = ""; }; - 64F19A6ABE0AF7A1AB7B9A1D9A77FCD0 /* SentryCrashMonitor_System.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashMonitor_System.m; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.m; sourceTree = ""; }; + 6338BB028CB4769B232401C32BAB3B35 /* SentryMeta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMeta.m; path = Sources/Sentry/SentryMeta.m; sourceTree = ""; }; + 637A79839224131C565D604C2DC3FCDD /* SentryCrashID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashID.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashID.h; sourceTree = ""; }; + 651FC660333B7E155A3F1DF14F8EFE3B /* Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sentry.h; path = Sources/Sentry/Public/Sentry.h; sourceTree = ""; }; + 653D91BC0ABA78E68D1ED49B2D755DEF /* SentryProfilerSerialization+Test.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryProfilerSerialization+Test.h"; path = "Sources/Sentry/Profiling/SentryProfilerSerialization+Test.h"; sourceTree = ""; }; + 65922E3A45166DDCA4173E5BDC28BF83 /* SentryViewHierarchyIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryViewHierarchyIntegration.m; path = Sources/Sentry/SentryViewHierarchyIntegration.m; sourceTree = ""; }; 65D00577B3CE8BA54A60FBDDFBBDC706 /* Sparkle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sparkle.h; path = Sparkle.framework/Versions/B/Headers/Sparkle.h; sourceTree = ""; }; - 66A229C0D9E692215470C3B9CB63E1A0 /* SentryCrashMonitor_AppState.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor_AppState.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_AppState.c; sourceTree = ""; }; - 66D0B7DE74CC0F6BB0D985B0D2E12499 /* PrivateSentrySDKOnly.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PrivateSentrySDKOnly.h; path = Sources/Sentry/include/HybridPublic/PrivateSentrySDKOnly.h; sourceTree = ""; }; + 66E753CD0477257070A087BD81802C7B /* SentryScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScreenshot.h; path = Sources/Sentry/include/SentryScreenshot.h; sourceTree = ""; }; 6712244FC2230421B8DB3EB777B89EF8 /* HTTPServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPServer.h; path = Core/HTTPServer.h; sourceTree = ""; }; - 6729B55F9C55EDECCD1D2BFADB8DD826 /* SentryTimeToDisplayTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTimeToDisplayTracker.h; path = Sources/Sentry/include/SentryTimeToDisplayTracker.h; sourceTree = ""; }; - 6776B2F6DC9AB3B93E362AFFD2C994BD /* SentryEnvelope.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelope.h; path = Sources/Sentry/include/HybridPublic/SentryEnvelope.h; sourceTree = ""; }; - 679A40BA073FD71482989A141AE62BC7 /* SentryCrashJSONCodecObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashJSONCodecObjC.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.h; sourceTree = ""; }; + 671F9382A4126D5A55576E24D47C5F2D /* SentryGlobalEventProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryGlobalEventProcessor.m; path = Sources/Sentry/SentryGlobalEventProcessor.m; sourceTree = ""; }; 67ACCD2DF5751002FF5D6D1109D7E6B8 /* MIKMIDIOutputPort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIOutputPort.h; path = Source/MIKMIDIOutputPort.h; sourceTree = ""; }; - 67CC0210F6E9F782324580A7B015C0A7 /* SentryNSDataUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSDataUtils.h; path = Sources/Sentry/include/SentryNSDataUtils.h; sourceTree = ""; }; + 680D25FC1D1C2516EB078E63F646D141 /* SentryFileIOTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFileIOTracker.m; path = Sources/Sentry/SentryFileIOTracker.m; sourceTree = ""; }; 682A6FCEC27897DEB0D430B5077B7C24 /* ASCIImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ASCIImage.debug.xcconfig; sourceTree = ""; }; - 682F2D5987BA5F7BFDC3215B50A6908C /* SentryPredicateDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPredicateDescriptor.m; path = Sources/Sentry/SentryPredicateDescriptor.m; sourceTree = ""; }; - 6891CDE6A252B6339E14FFD435C573A9 /* SentryFramesTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFramesTracker.m; path = Sources/Sentry/SentryFramesTracker.m; sourceTree = ""; }; - 689A48F516AF161D0C9E87999E7183FA /* SentrySdkInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySdkInfo.m; path = Sources/Sentry/SentrySdkInfo.m; sourceTree = ""; }; - 68E057D6AB46081912147BD3BE8082CC /* SentryCrashObjCApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashObjCApple.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashObjCApple.h; sourceTree = ""; }; + 6858EAD1428B271AD06FE1828D2E4924 /* SentryCrashReportSink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportSink.h; path = Sources/Sentry/include/SentryCrashReportSink.h; sourceTree = ""; }; + 689B54FBFF07967EF1A404CF0316B242 /* SentryError.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryError.mm; path = Sources/Sentry/SentryError.mm; sourceTree = ""; }; + 68C767D29AFECF17502A88634DA84F85 /* SentryMsgPackSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMsgPackSerializer.h; path = Sources/Sentry/include/SentryMsgPackSerializer.h; sourceTree = ""; }; + 68E8C41B49F81031BD965867BD9FEA99 /* SentryProfiler+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryProfiler+Private.h"; path = "Sources/Sentry/include/SentryProfiler+Private.h"; sourceTree = ""; }; + 69213797A356DF8976DD7F1F04E08C83 /* SentryCrashC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashC.c; path = Sources/SentryCrash/Recording/SentryCrashC.c; sourceTree = ""; }; + 692EE743E6B42DEF470106A9BE2480C9 /* SentrySampleDecision.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySampleDecision.m; path = Sources/Sentry/SentrySampleDecision.m; sourceTree = ""; }; 69399242B4A7FE5F37A8B1B13039D16B /* HTTPResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPResponse.h; path = Core/HTTPResponse.h; sourceTree = ""; }; 6951F73B50642A08DF568AE1C79853AD /* MIKMIDIMetaTextEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaTextEvent.m; path = Source/MIKMIDIMetaTextEvent.m; sourceTree = ""; }; + 6994371A271453DE37CF3696D10832D3 /* SentrySample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySample.h; path = Sources/Sentry/include/SentrySample.h; sourceTree = ""; }; + 69A366A6EF1278B84BF0FC8317B22279 /* SentryCrashStackCursor_SelfThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashStackCursor_SelfThread.m; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.m; sourceTree = ""; }; + 69FC9A493447CC0C47EFDB9709BF76FE /* SentrySessionReplayIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySessionReplayIntegration.m; path = Sources/Sentry/SentrySessionReplayIntegration.m; sourceTree = ""; }; 6A13A202EB5B1A6EA6A4E7F4C1273452 /* ORSSerialPacketDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ORSSerialPacketDescriptor.h; path = Source/ORSSerialPacketDescriptor.h; sourceTree = ""; }; - 6A67969A7FD464AADDA4EBA8FDE652F8 /* SwiftDescriptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftDescriptor.swift; path = Sources/Swift/SwiftDescriptor.swift; sourceTree = ""; }; + 6A1A6B9A785A451370BCE0D1A30B12A4 /* SentryWatchdogTerminationTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationTracker.m; path = Sources/Sentry/SentryWatchdogTerminationTracker.m; sourceTree = ""; }; + 6A755AB12FF42EC1906EFDC999FD041D /* SentryUserFeedbackWidgetButtonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackWidgetButtonView.swift; path = Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackWidgetButtonView.swift; sourceTree = ""; }; 6A856A9DAFBF64AF6064FF8EE12DECA1 /* MIKMIDIInputPort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIInputPort.h; path = Source/MIKMIDIInputPort.h; sourceTree = ""; }; - 6ABC81ADE3E3B166D9286FB1E51E358C /* SentryMeasurementValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMeasurementValue.m; path = Sources/Sentry/SentryMeasurementValue.m; sourceTree = ""; }; 6B18721BF2C13AE6DA208C77710F3940 /* MIKMIDIMetaInstrumentNameEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaInstrumentNameEvent.m; path = Source/MIKMIDIMetaInstrumentNameEvent.m; sourceTree = ""; }; - 6B62F0D9B84A3AE71635C731B2867731 /* SentryHttpTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHttpTransport.m; path = Sources/Sentry/SentryHttpTransport.m; sourceTree = ""; }; - 6BA39AC292CEE58F9EAC157C60849237 /* SentryMXCallStackTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMXCallStackTree.swift; path = Sources/Swift/MetricKit/SentryMXCallStackTree.swift; sourceTree = ""; }; - 6BAED9229E045CA3C902E4EAEB308724 /* StringExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringExtensions.swift; path = Sources/Swift/Extensions/StringExtensions.swift; sourceTree = ""; }; - 6BFDD53367D50C36D6597EB3B5D1F44F /* SentrySpanOperations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanOperations.h; path = Sources/Sentry/include/SentrySpanOperations.h; sourceTree = ""; }; + 6B5E158AED0B2C7CAF5B5945C4D54925 /* SentryCrashFileUtils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashFileUtils.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.c; sourceTree = ""; }; + 6BE4BDA822AE557976822765F2B7B83D /* SentryFramesTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFramesTracker.m; path = Sources/Sentry/SentryFramesTracker.m; sourceTree = ""; }; 6C3885B913C1E200018511545544082A /* SocketRocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketRocket.h; path = SocketRocket/SocketRocket.h; sourceTree = ""; }; - 6C9C3BAD2D822378BC8F20D0B7F1A297 /* SentrySpanContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanContext.h; path = Sources/Sentry/Public/SentrySpanContext.h; sourceTree = ""; }; 6CBEFE4F9E22AFDC6347A739BB35FF8C /* CocoaAsyncSocket */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = CocoaAsyncSocket; path = libCocoaAsyncSocket.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 6CEC1A2F877C5B257C8E8CE0F10E4A9F /* SentryConcurrentRateLimitsDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryConcurrentRateLimitsDictionary.h; path = Sources/Sentry/include/SentryConcurrentRateLimitsDictionary.h; sourceTree = ""; }; - 6CF7FEDFAD1744DA4BB5333CEE706396 /* SentryClientReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryClientReport.h; path = Sources/Sentry/include/SentryClientReport.h; sourceTree = ""; }; - 6D0CE7CEF84AD663BDC2CC13DBDC8D13 /* SentryCrashCachedData.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCachedData.c; path = Sources/SentryCrash/Recording/SentryCrashCachedData.c; sourceTree = ""; }; 6D3B9B268F386C4D0D0F6A2D141445F3 /* MIKMIDIPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIPlayer.m; path = Source/MIKMIDIPlayer.m; sourceTree = ""; }; - 6D5E7A7A6D41259F2D94ECD16EA3DD5B /* SentrySubClassFinder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySubClassFinder.m; path = Sources/Sentry/SentrySubClassFinder.m; sourceTree = ""; }; - 6D9857E7C8B38270B20330F5F9788C6D /* Metric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Metric.swift; path = Sources/Swift/Metrics/Metric.swift; sourceTree = ""; }; + 6D4C9354E0B789A3F43108EB67B8D3D5 /* NSLocale+Sentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLocale+Sentry.m"; path = "Sources/Sentry/NSLocale+Sentry.m"; sourceTree = ""; }; + 6D6B7CA09FB9A842CFCB7952A9C2099B /* SentryThreadInspector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryThreadInspector.m; path = Sources/Sentry/SentryThreadInspector.m; sourceTree = ""; }; + 6D826AB1169755019A7446381B83EC43 /* UIViewExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewExtensions.swift; path = Sources/Swift/Core/Extensions/UIViewExtensions.swift; sourceTree = ""; }; 6DBD06341C440F8640B2339335FB8024 /* MIKMIDI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDI.h; path = Source/MIKMIDI.h; sourceTree = ""; }; - 6DD2DEE4A55ED09898535824250A2FF5 /* SentryFramesDelayResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryFramesDelayResult.swift; path = Sources/Swift/Integrations/FramesTracking/SentryFramesDelayResult.swift; sourceTree = ""; }; - 6DD606BDA81DCB58B6267FD417D3C849 /* SentryFileIOTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFileIOTrackingIntegration.m; path = Sources/Sentry/SentryFileIOTrackingIntegration.m; sourceTree = ""; }; + 6DCB6A9CF59CB3C19BA6FD767AE6FA14 /* SentryBreadcrumbTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBreadcrumbTracker.m; path = Sources/Sentry/SentryBreadcrumbTracker.m; sourceTree = ""; }; 6DFDB72A8EE431867B04305B972EBD6F /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; - 6DFDD6EEAAD120EA44EF908DCD53B9C2 /* SentryCrashDate.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashDate.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashDate.c; sourceTree = ""; }; - 6E178E7974AB7190576419D248D2DBAC /* SentryCrashCPU.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU.c; sourceTree = ""; }; 6E23E22E62E2A7F4D4F2BEA5A464291A /* MIKMIDIMetaTimeSignatureEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaTimeSignatureEvent.h; path = Source/MIKMIDIMetaTimeSignatureEvent.h; sourceTree = ""; }; - 6E7E06865F2251D770DC5D6793CDD8A7 /* SentryEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEvent.m; path = Sources/Sentry/SentryEvent.m; sourceTree = ""; }; - 6EADD5D02E4BEE92ADD5C3EE6C804B54 /* SentryBreadcrumb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBreadcrumb.h; path = Sources/Sentry/Public/SentryBreadcrumb.h; sourceTree = ""; }; + 6ED19E4EE016DE9514B8B1AE8519B346 /* SentryByteCountFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryByteCountFormatter.h; path = Sources/Sentry/include/SentryByteCountFormatter.h; sourceTree = ""; }; + 6ED8126E44539AD06EE44B2225B50C8E /* SentryCrashID.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashID.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashID.c; sourceTree = ""; }; 6EED0E8FEBC8F02EC06C7204F93A531E /* MIKMIDIEndpoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIEndpoint.m; path = Source/MIKMIDIEndpoint.m; sourceTree = ""; }; + 6EF8FFF4E82EC52DC0981A0AE8A13E09 /* SentryCrashDoctor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDoctor.h; path = Sources/SentryCrash/Recording/SentryCrashDoctor.h; sourceTree = ""; }; 6F1B7EE9AE522713F47F20B897EEB3AA /* MIKMIDIEndpointSynthesizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIEndpointSynthesizer.m; path = Source/MIKMIDIEndpointSynthesizer.m; sourceTree = ""; }; + 6F2BBF0C74419D0A425C4C44E66854A0 /* URLSessionTaskHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLSessionTaskHelper.swift; path = Sources/Swift/Core/Tools/URLSessionTaskHelper.swift; sourceTree = ""; }; 6F2DFA25283C5C7C974020B2A3E4D741 /* DDAssertMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAssertMacros.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDAssertMacros.h; sourceTree = ""; }; + 6F3075B9EFB5A520D04DE0B8930B7FB1 /* SentryReplayType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayType.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayType.swift; sourceTree = ""; }; + 6F6606D384C7504B41F7E421FD83752E /* SentryReplayOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayOptions.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayOptions.swift; sourceTree = ""; }; 6F9C148B837B0EE0FBFF1D4FCE84A55A /* PUTResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PUTResponse.m; path = Extensions/WebDAV/PUTResponse.m; sourceTree = ""; }; - 6FDE291D1F30B92DC534744B7CFAB8ED /* SentryDateUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDateUtils.m; path = Sources/Sentry/SentryDateUtils.m; sourceTree = ""; }; - 70C8FA1A03695A7097E60136D152165A /* SentryUIEventTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIEventTrackingIntegration.m; path = Sources/Sentry/SentryUIEventTrackingIntegration.m; sourceTree = ""; }; + 70B7135B7DF46A00145AAFE936274ACC /* SentryMeasurementUnit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMeasurementUnit.m; path = Sources/Sentry/SentryMeasurementUnit.m; sourceTree = ""; }; + 70FD76A2796E90020984F5AD24587BA1 /* SentryMaskingPreviewView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMaskingPreviewView.swift; path = Sources/Swift/Integrations/SessionReplay/Preview/SentryMaskingPreviewView.swift; sourceTree = ""; }; + 712D1C0F77040989841F4CDDAFB51A39 /* SentryMechanismCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMechanismCodable.swift; path = Sources/Swift/Protocol/Codable/SentryMechanismCodable.swift; sourceTree = ""; }; + 71924EE8FD21994FEC60C7192D798591 /* SentryUIViewControllerSwizzling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIViewControllerSwizzling.m; path = Sources/Sentry/SentryUIViewControllerSwizzling.m; sourceTree = ""; }; 719908577069DAA469E32B53A1AFB190 /* MIKMIDIEventIterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIEventIterator.h; path = Source/MIKMIDIEventIterator.h; sourceTree = ""; }; - 71ADCAE3D90BD309CE2A9062CABA944B /* SentryInternalCDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalCDefines.h; path = Sources/Sentry/include/SentryInternalCDefines.h; sourceTree = ""; }; - 71DE99D8F0C29A1369EF94E43F95E420 /* SentryBacktrace.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryBacktrace.cpp; path = Sources/Sentry/SentryBacktrace.cpp; sourceTree = ""; }; - 7214EC8C4207BCF9E5B70D150AD5006E /* SentrySpanContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanContext.m; path = Sources/Sentry/SentrySpanContext.m; sourceTree = ""; }; - 7223CC1D887C2F20620C75D7B5795F27 /* SentrySamplingProfiler.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentrySamplingProfiler.hpp; path = Sources/Sentry/include/SentrySamplingProfiler.hpp; sourceTree = ""; }; + 71A8569DECA10EFBD288BB23D7146FFC /* SentryNSURLRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSURLRequest.m; path = Sources/Sentry/SentryNSURLRequest.m; sourceTree = ""; }; + 71EEF02F06471E5DF11E077D1E87A062 /* NSMutableDictionary+Sentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableDictionary+Sentry.m"; path = "Sources/Sentry/NSMutableDictionary+Sentry.m"; sourceTree = ""; }; 72410BFF01262739729F06CA6B62D25E /* SRSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSecurityPolicy.h; path = SocketRocket/SRSecurityPolicy.h; sourceTree = ""; }; + 72F0A7A9FD76E7239DF27262BBD31705 /* SentryBaggage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBaggage.h; path = Sources/Sentry/Public/SentryBaggage.h; sourceTree = ""; }; + 7338F9FF638CCA8710054E9A1F262E5F /* SentryTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTime.h; path = Sources/Sentry/include/SentryTime.h; sourceTree = ""; }; + 737DBCA538EEF16C5CE6DA6F6ED51FC7 /* SentrySwizzle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwizzle.h; path = Sources/Sentry/include/HybridPublic/SentrySwizzle.h; sourceTree = ""; }; + 73AB4DDC65DEBE301AF3FAB0EA7D01DF /* SentryCrashFileUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashFileUtils.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.h; sourceTree = ""; }; 73F447734ADC03DAB94041C24F155F64 /* MIKMIDIEntity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIEntity.h; path = Source/MIKMIDIEntity.h; sourceTree = ""; }; 74477422FD95AAFB96A9C37BB7C82E32 /* MIKMIDINoteCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDINoteCommand.h; path = Source/MIKMIDINoteCommand.h; sourceTree = ""; }; 74A74CE5079B3CEE1D1525045572CCA8 /* MIKMIDIPitchBendChangeCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPitchBendChangeCommand.h; path = Source/MIKMIDIPitchBendChangeCommand.h; sourceTree = ""; }; - 74F8739DF31C10AC2B4D347992BA8EE5 /* SentrySamplerDecision.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySamplerDecision.m; path = Sources/Sentry/SentrySamplerDecision.m; sourceTree = ""; }; - 7580006A9D51A26EBDE8EEB546A11A15 /* SentryDsn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDsn.h; path = Sources/Sentry/Public/SentryDsn.h; sourceTree = ""; }; - 75F664A425EBBD24E296D0FD68F7769D /* SentryCrashDefaultBinaryImageProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashDefaultBinaryImageProvider.m; path = Sources/Sentry/SentryCrashDefaultBinaryImageProvider.m; sourceTree = ""; }; - 7655D11D7A9567233A0450A12A09DC77 /* SentryBreadcrumb+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryBreadcrumb+Private.h"; path = "Sources/Sentry/include/HybridPublic/SentryBreadcrumb+Private.h"; sourceTree = ""; }; - 76ADCF0C7441A2A659A6E5A421F9BF42 /* SentryNetworkTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNetworkTrackingIntegration.h; path = Sources/Sentry/include/SentryNetworkTrackingIntegration.h; sourceTree = ""; }; + 7534924A5060AD1CC67934DDD8990953 /* SentryFramesDelayResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryFramesDelayResult.swift; path = Sources/Swift/Core/Integrations/FramesTracking/SentryFramesDelayResult.swift; sourceTree = ""; }; + 753F54012FFFFD42AFABF656AB79C7A5 /* SentryFrameCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryFrameCodable.swift; path = Sources/Swift/Protocol/Codable/SentryFrameCodable.swift; sourceTree = ""; }; + 760534382C7512D529F3B65DE1CAB4DF /* SentryWeakMap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWeakMap.m; path = Sources/Sentry/SentryWeakMap.m; sourceTree = ""; }; + 761BE105A5AA23C0EF4E77730748BEBE /* SentryInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInstallation.h; path = Sources/Sentry/include/SentryInstallation.h; sourceTree = ""; }; + 766EF1FD4797B6AE9B3270D760A9EDDE /* SentryCrashReportFixer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFixer.h; path = Sources/SentryCrash/Recording/SentryCrashReportFixer.h; sourceTree = ""; }; + 767046EE68FEA336E72AB909244174BD /* SentryHttpDateParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHttpDateParser.m; path = Sources/Sentry/SentryHttpDateParser.m; sourceTree = ""; }; + 769C10C5440726870C9566A393FB330B /* SentryCrashSysCtl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashSysCtl.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.h; sourceTree = ""; }; 76FF09B5E0DF61D1A9A6AB15FAF0AD06 /* DDMultiFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMultiFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDMultiFormatter.m; sourceTree = ""; }; - 7701374A0A4E09CC6B6CBFC6416A01D1 /* SentryAutoSessionTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAutoSessionTrackingIntegration.h; path = Sources/Sentry/include/SentryAutoSessionTrackingIntegration.h; sourceTree = ""; }; 7727B987F0339C867323875120AA4E95 /* SRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRError.h; path = SocketRocket/Internal/Utilities/SRError.h; sourceTree = ""; }; 775D797FB9E9557643EFF7E556A79580 /* HTTPServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPServer.m; path = Core/HTTPServer.m; sourceTree = ""; }; - 778C9EAC13121729CEB33B10C0019EBD /* SentrySwift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwift.h; path = Sources/Sentry/include/SentrySwift.h; sourceTree = ""; }; + 77725C1A8C7C9731D6A9DFD472EE792F /* SentryDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDevice.h; path = Sources/Sentry/include/SentryDevice.h; sourceTree = ""; }; + 777B437606ADECC1E4624CE8A33BC112 /* SentryCrashMemory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMemory.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMemory.h; sourceTree = ""; }; + 779346D5BB5D5727452F040B2C854FF1 /* SentryScopeSyncC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScopeSyncC.h; path = Sources/Sentry/include/SentryScopeSyncC.h; sourceTree = ""; }; + 77CEC4A4F173A75CC4169BF407C46F97 /* SentryBaseIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBaseIntegration.h; path = Sources/Sentry/include/HybridPublic/SentryBaseIntegration.h; sourceTree = ""; }; 77EA30B8425FD8954B23D6DDADDC115D /* MultipartMessageHeaderField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartMessageHeaderField.m; path = Core/Mime/MultipartMessageHeaderField.m; sourceTree = ""; }; - 78418E7AFA6B44B2AC426695B690A3E6 /* SentryCrashStackCursor_SelfThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor_SelfThread.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.h; sourceTree = ""; }; - 7849304ECC4BDB534EBA46A7E14E9E8C /* SentryRateLimits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRateLimits.h; path = Sources/Sentry/include/SentryRateLimits.h; sourceTree = ""; }; - 78BD79B176258E7FEC5FAF6A264ABCB0 /* SentryCrashMonitorType.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitorType.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitorType.c; sourceTree = ""; }; + 78205A92F2839CDC4A1C28F0B7B7F6CD /* SentryNSURLRequestBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSURLRequestBuilder.h; path = Sources/Sentry/include/SentryNSURLRequestBuilder.h; sourceTree = ""; }; + 7854A8E688C6F9AFEFB2DC1F553A3A36 /* SentryCrashScopeObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashScopeObserver.m; path = Sources/Sentry/SentryCrashScopeObserver.m; sourceTree = ""; }; + 78D92A19F8C2D52A0F66E8B6429A147E /* SentryMeasurementValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMeasurementValue.h; path = Sources/Sentry/include/SentryMeasurementValue.h; sourceTree = ""; }; + 790E56B0AC092A74B4E24B29B36EFA61 /* SentryReplayFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayFrame.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayFrame.swift; sourceTree = ""; }; 7912F98687E5F3DC6F52736B5D6E6B2E /* DDASLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogger.m; path = Sources/CocoaLumberjack/DDASLLogger.m; sourceTree = ""; }; + 791BB305952470D5437C5B53ADE67EA2 /* SentryPerformanceTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPerformanceTrackingIntegration.m; path = Sources/Sentry/SentryPerformanceTrackingIntegration.m; sourceTree = ""; }; 795939DE6FCCDEB00B91D8A650C4EA2E /* MIKMIDIPort_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPort_SubclassMethods.h; path = Source/MIKMIDIPort_SubclassMethods.h; sourceTree = ""; }; - 798F9E5E508E14C83383B975FA26C485 /* SentryInternalDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalDefines.h; path = Sources/Sentry/include/SentryInternalDefines.h; sourceTree = ""; }; + 796356051463C4A0B91272A9A74D6F35 /* SentryUncaughtNSExceptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUncaughtNSExceptions.h; path = Sources/Sentry/include/SentryUncaughtNSExceptions.h; sourceTree = ""; }; 79BA363AA17520C8A474FC95D86CC169 /* MIKMIDIEndpoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIEndpoint.h; path = Source/MIKMIDIEndpoint.h; sourceTree = ""; }; - 7A0B6C4B8DB728209F5E4EA9D46E95C8 /* SentryCPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCPU.h; path = Sources/Sentry/include/SentryCPU.h; sourceTree = ""; }; + 79E62D0B9B9FA0F42403B8F79461611C /* SentryNetworkTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNetworkTracker.m; path = Sources/Sentry/SentryNetworkTracker.m; sourceTree = ""; }; 7A17DC292BDE963530239F05E2FA34FC /* SRIOConsumer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumer.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.m; sourceTree = ""; }; - 7AAFAB2B41EBA5E53C207ED48DAF341F /* SentryHttpStatusCodeRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHttpStatusCodeRange.h; path = Sources/Sentry/Public/SentryHttpStatusCodeRange.h; sourceTree = ""; }; - 7AB11DDB076F6FC08820F145088F7FA0 /* SentryScopeSyncC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryScopeSyncC.c; path = Sources/Sentry/SentryScopeSyncC.c; sourceTree = ""; }; + 7AE0C65C5CF4751EABA0AD5D22AE848B /* SentryDebugMeta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDebugMeta.m; path = Sources/Sentry/SentryDebugMeta.m; sourceTree = ""; }; + 7B05F7340C216792A8C5D1776111E7A8 /* SentryAppStartMeasurement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStartMeasurement.h; path = Sources/Sentry/include/HybridPublic/SentryAppStartMeasurement.h; sourceTree = ""; }; + 7B08C2CC0B3396AEE5254F033FF77095 /* SentryCrashMonitor_System.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashMonitor_System.m; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.m; sourceTree = ""; }; 7B28B63B33D94F4EB70F39AA102B0A2B /* MIKMIDISystemKeepAliveCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISystemKeepAliveCommand.h; path = Source/MIKMIDISystemKeepAliveCommand.h; sourceTree = ""; }; + 7B5B51C125C702370ADCAF158ABCD3EF /* SentryPerformanceTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPerformanceTracker.h; path = Sources/Sentry/include/SentryPerformanceTracker.h; sourceTree = ""; }; + 7B64F313D3588C5DBFC21BE76C0FBBC9 /* SentryDiscardedEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDiscardedEvent.m; path = Sources/Sentry/SentryDiscardedEvent.m; sourceTree = ""; }; 7B8567ED3FCD2D3D4C083513CDF18F09 /* MIKMIDIMacDebugQuickLookSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMacDebugQuickLookSupport.m; path = Source/MIKMIDIMacDebugQuickLookSupport.m; sourceTree = ""; }; + 7BB7055F6886355C95341A84A5DA036A /* SentryInstallation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryInstallation.m; path = Sources/Sentry/SentryInstallation.m; sourceTree = ""; }; 7BBC3A6510E964F9EFA08E197FA7AEF6 /* CLIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLIColor.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/CLIColor.h; sourceTree = ""; }; 7BD8AC64D4E827EDE6B96AF3EFC4678A /* MIKMIDITrack.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDITrack.m; path = Source/MIKMIDITrack.m; sourceTree = ""; }; - 7CA38BF6D44290DD7D4CC46F72C0FBDD /* SentryUser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUser.m; path = Sources/Sentry/SentryUser.m; sourceTree = ""; }; - 7CD611DAEE4A5B7C1561C63761A46133 /* SentryCrashMonitor.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor.c; sourceTree = ""; }; + 7BE2FF0132BDD1ECAA2EDBDDBD62CBEF /* SentrySessionReplayIntegration+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySessionReplayIntegration+Private.h"; path = "Sources/Sentry/include/SentrySessionReplayIntegration+Private.h"; sourceTree = ""; }; 7CDA75873818A131B52825BF4D1D2B4A /* MIKMIDISystemMessageCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISystemMessageCommand.m; path = Source/MIKMIDISystemMessageCommand.m; sourceTree = ""; }; + 7CF79A70E491771CAA0F27C87186FD64 /* SentryEnabledFeaturesBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryEnabledFeaturesBuilder.swift; path = Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift; sourceTree = ""; }; 7D1FE6F5DA923F3BB0D4D339BEFDD50D /* MIKMIDITrack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDITrack.h; path = Source/MIKMIDITrack.h; sourceTree = ""; }; - 7D55ADA9FD3B28F05EF59B7505B1050B /* SentryCrashMachineContextWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMachineContextWrapper.h; path = Sources/Sentry/include/SentryCrashMachineContextWrapper.h; sourceTree = ""; }; 7DBAD4C07704813F1DF42D77DE7EFBAD /* SUErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUErrors.h; path = Sparkle.framework/Versions/B/Headers/SUErrors.h; sourceTree = ""; }; - 7E3C7205887FF01B002CC8B3102E585D /* URLSessionTaskHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLSessionTaskHelper.swift; path = Sources/Swift/Tools/URLSessionTaskHelper.swift; sourceTree = ""; }; + 7E2EB4EF0AA177EA07CDA3A4AA91622C /* SentryCrashInstallationReporter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashInstallationReporter.h; path = Sources/Sentry/include/SentryCrashInstallationReporter.h; sourceTree = ""; }; 7E78D3A69861AB0219C3943C07027F62 /* PSWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocket.h; path = PocketSocket/PSWebSocket.h; sourceTree = ""; }; - 7EA98A1FF0DDA53FCDD0A62FDD17EDC5 /* SentryMeta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMeta.m; path = Sources/Sentry/SentryMeta.m; sourceTree = ""; }; - 7EB072B27362A517BCB63D5633AED711 /* Sentry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Sentry.modulemap; sourceTree = ""; }; 7EB9B39EBFD3DBC150D2AAEF6478AC81 /* DDFileLogger+Buffering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDFileLogger+Buffering.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDFileLogger+Buffering.h"; sourceTree = ""; }; - 7FAA6C03AB3AF97C7ECEFCB826269031 /* SentryThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryThread.m; path = Sources/Sentry/SentryThread.m; sourceTree = ""; }; - 7FD439AAFED38A8FD922D59F40CDCF6C /* SentryCrashReportFilterBasic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashReportFilterBasic.m; path = Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.m; sourceTree = ""; }; - 80400492C24E095114263D5800CB5BC2 /* SentrySpotlightTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpotlightTransport.h; path = Sources/Sentry/include/SentrySpotlightTransport.h; sourceTree = ""; }; - 807367F8CEDD722A42F3AED730471390 /* SentryDictionaryDeepSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDictionaryDeepSearch.h; path = Sources/SentryCrash/Reporting/Filters/Tools/SentryDictionaryDeepSearch.h; sourceTree = ""; }; - 80E20135DB15D00DBE0A2C3331037FDB /* SentryThreadWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryThreadWrapper.h; path = Sources/Sentry/include/SentryThreadWrapper.h; sourceTree = ""; }; + 80112564CACA3F1A4BE3CC98B0CFA186 /* SentryMachLogging.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryMachLogging.cpp; path = Sources/Sentry/SentryMachLogging.cpp; sourceTree = ""; }; + 801359890C957E05995C5A9DE3F23D73 /* SentryFrameRemover.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFrameRemover.h; path = Sources/Sentry/include/SentryFrameRemover.h; sourceTree = ""; }; + 803B67F9CE05575013E5ADC8ADB47651 /* SentryScreenshotIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScreenshotIntegration.m; path = Sources/Sentry/SentryScreenshotIntegration.m; sourceTree = ""; }; + 80ED7A4FDB50A475C8FBC673A4906C89 /* SentryDataCategoryMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDataCategoryMapper.m; path = Sources/Sentry/SentryDataCategoryMapper.m; sourceTree = ""; }; + 80FC9CF001523AF3C6DEFD61CF069029 /* SentryDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDefines.h; path = Sources/Sentry/Public/SentryDefines.h; sourceTree = ""; }; 813BA02EB99705920E6D4C7E5020B44D /* SRLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRLog.m; path = SocketRocket/Internal/Utilities/SRLog.m; sourceTree = ""; }; 8146F63CF2CEF0B5D20E3D356833C779 /* MIKMIDIConnectionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIConnectionManager.h; path = Source/MIKMIDIConnectionManager.h; sourceTree = ""; }; - 817F1991AE8BC816D785C6DD04668B18 /* SentryCrashInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashInstallation.h; path = Sources/SentryCrash/Installations/SentryCrashInstallation.h; sourceTree = ""; }; - 81F5C766B2045D009E0ABB3FD3FD6E45 /* SentrySDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySDK.h; path = Sources/Sentry/Public/SentrySDK.h; sourceTree = ""; }; - 8203B0CC47F1C9B9094641BD32396510 /* SentryCrashIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashIntegration.m; path = Sources/Sentry/SentryCrashIntegration.m; sourceTree = ""; }; - 8227C46DBB43CE98E5E9AE4EBBDFA00C /* SentryCrashObjC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashObjC.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashObjC.c; sourceTree = ""; }; - 824721A438303BD1A058012EA4CC2982 /* SentryCrashWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashWrapper.h; path = Sources/Sentry/include/SentryCrashWrapper.h; sourceTree = ""; }; - 825AE5C17E90640280B1F2580683162C /* SentryNSURLSessionTaskSearch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSURLSessionTaskSearch.m; path = Sources/Sentry/SentryNSURLSessionTaskSearch.m; sourceTree = ""; }; - 82E7A3C8BC259E827062E2CE81E8167A /* SentryMechanism.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMechanism.h; path = Sources/Sentry/Public/SentryMechanism.h; sourceTree = ""; }; + 816878C82AAB045C22EB363A94907871 /* SentryContinuousProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryContinuousProfiler.mm; path = Sources/Sentry/Profiling/SentryContinuousProfiler.mm; sourceTree = ""; }; + 81E3767A4C7B40C1BC79A72F0D5A95EC /* UrlSanitized.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UrlSanitized.swift; path = Sources/Swift/Core/Tools/UrlSanitized.swift; sourceTree = ""; }; + 81FB4ED6990EF83BB240340C11A01284 /* SentryAppState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppState.h; path = Sources/Sentry/include/SentryAppState.h; sourceTree = ""; }; + 822F0A7C7BF1AE03A84912103DD54E72 /* SentryCrashJSONCodec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashJSONCodec.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.h; sourceTree = ""; }; + 82A8708C9020A49A576D394A78F672DF /* SentryCrashVarArgs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashVarArgs.h; path = Sources/SentryCrash/Reporting/Filters/Tools/SentryCrashVarArgs.h; sourceTree = ""; }; 8303CA9AF549BECD7BA5D8F2A48CECF8 /* MIKMIDIControlChangeCommand+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MIKMIDIControlChangeCommand+Private.h"; path = "Source/MIKMIDIControlChangeCommand+Private.h"; sourceTree = ""; }; - 83399FD92E465650EE055AE23ACE178F /* SentryId.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryId.swift; path = Sources/Swift/Protocol/SentryId.swift; sourceTree = ""; }; 83912A79ABCD7BF390FF0FEA554CA00D /* SUAppcastItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUAppcastItem.h; path = Sparkle.framework/Versions/B/Headers/SUAppcastItem.h; sourceTree = ""; }; - 8397D2B19FDDB426EC98325ED864FA51 /* SentryCrashNSErrorUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashNSErrorUtil.m; path = Sources/SentryCrash/Recording/Tools/SentryCrashNSErrorUtil.m; sourceTree = ""; }; 839BB12438C2C096A2A438810D182307 /* CocoaHTTPServer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaHTTPServer.debug.xcconfig; sourceTree = ""; }; + 83BF24CE9E15C64AC6AD96BB7167FEE1 /* SentryDispatchQueueWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDispatchQueueWrapper.m; path = Sources/Sentry/SentryDispatchQueueWrapper.m; sourceTree = ""; }; + 83EF69E0F85672AAD70D4BACA3CC92DB /* SentryDebugMetaCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryDebugMetaCodable.swift; path = Sources/Swift/Protocol/Codable/SentryDebugMetaCodable.swift; sourceTree = ""; }; 8406B4DB1B555FD523BA171DB047224D /* SPUUserDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUserDriver.h; path = Sparkle.framework/Versions/B/Headers/SPUUserDriver.h; sourceTree = ""; }; - 8424AD41362FB5AEF19608A7CBC810C3 /* SentryEnvelopeRateLimit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelopeRateLimit.m; path = Sources/Sentry/SentryEnvelopeRateLimit.m; sourceTree = ""; }; 842EF3ED83C5944AB14DA25945770838 /* MIKMIDISequencer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISequencer.h; path = Source/MIKMIDISequencer.h; sourceTree = ""; }; + 8431CD8C532A8DEEB662E2FE721C23E0 /* SentryLogC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLogC.m; path = Sources/Sentry/SentryLogC.m; sourceTree = ""; }; + 8450784D7958893BC52C171399D38969 /* SentryCrashMonitor_Signal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor_Signal.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_Signal.c; sourceTree = ""; }; + 84615395DA31A84C51F94A99094E69AE /* SentryCrashThread.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashThread.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashThread.c; sourceTree = ""; }; 846F800D771D9F4FF4981C8319BFFB88 /* ASCIImage */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = ASCIImage; path = libASCIImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 84DC54FF392AEAB4E910F569D2D1736D /* SentryMetricsClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMetricsClient.swift; path = Sources/Swift/Metrics/SentryMetricsClient.swift; sourceTree = ""; }; - 854A083478FB2BA393FF6C2B1F43857B /* SentryCrashC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashC.c; path = Sources/SentryCrash/Recording/SentryCrashC.c; sourceTree = ""; }; + 84A9B133D6CCBF73D42C4AC6FFC8C3C7 /* NSLocale+Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLocale+Sentry.h"; path = "Sources/Sentry/include/NSLocale+Sentry.h"; sourceTree = ""; }; + 852032663E4A7D45316C9EDD5CFFC96F /* SentryCrashMonitorType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitorType.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitorType.h; sourceTree = ""; }; 856EF9D8335163A11F7B46D310CBA477 /* MIKMIDIChannelVoiceCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIChannelVoiceCommand.m; path = Source/MIKMIDIChannelVoiceCommand.m; sourceTree = ""; }; - 8572D02BB0DF5598CB21671E08EFB5CD /* UrlSanitized.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UrlSanitized.swift; path = Sources/Swift/Tools/UrlSanitized.swift; sourceTree = ""; }; 859C7C1828CE86CFD39DF3F7F4868F54 /* SRSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSecurityPolicy.m; path = SocketRocket/SRSecurityPolicy.m; sourceTree = ""; }; 85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = SocketRocket; path = libSocketRocket.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 85A1830896200B5AE63C6003F2AF97B3 /* SentryDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDefines.h; path = Sources/Sentry/Public/SentryDefines.h; sourceTree = ""; }; - 85A76E534888F5A3FD1D2817C3F4A4AB /* SentryTransportFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransportFactory.h; path = Sources/Sentry/include/SentryTransportFactory.h; sourceTree = ""; }; - 85C176EE486CB28F40C2536448BC7400 /* SentryCrashSymbolicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashSymbolicator.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashSymbolicator.h; sourceTree = ""; }; 85C2F84F2F3BB5FE4BD4AED20D9CEF88 /* Pods-Hammerspoon-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Hammerspoon-umbrella.h"; sourceTree = ""; }; - 85C78EA33AD069CD8876D9FBB34B76FF /* SentryCrashStackEntryMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashStackEntryMapper.m; path = Sources/Sentry/SentryCrashStackEntryMapper.m; sourceTree = ""; }; + 85E0C5CEB1BBD25DA922B268963AEC14 /* SentrySamplingContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySamplingContext.h; path = Sources/Sentry/Public/SentrySamplingContext.h; sourceTree = ""; }; + 860CA4F7747B83DC0277AED809DD45BF /* SentryCrashDefaultBinaryImageProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashDefaultBinaryImageProvider.m; path = Sources/Sentry/SentryCrashDefaultBinaryImageProvider.m; sourceTree = ""; }; 864D1A56B1EA5AA78A9084DDB28F15DB /* SPUStandardUserDriverDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUStandardUserDriverDelegate.h; path = Sparkle.framework/Versions/B/Headers/SPUStandardUserDriverDelegate.h; sourceTree = ""; }; + 866AB42A14F3AA83F5CCB0D431EFA9DF /* Sentry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Sentry-umbrella.h"; sourceTree = ""; }; + 8685F2D00E2938BDB0EE0F8821012911 /* NSArray+SentrySanitize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+SentrySanitize.h"; path = "Sources/Sentry/include/NSArray+SentrySanitize.h"; sourceTree = ""; }; + 868B71843A3A0C5871F81E441D659711 /* SentryException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryException.h; path = Sources/Sentry/Public/SentryException.h; sourceTree = ""; }; + 869A0000ED64E788FC7A510588EEE58A /* SentryCrashMonitor_NSException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashMonitor_NSException.m; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_NSException.m; sourceTree = ""; }; + 86B5524E4BF6E6FAF2E5040F120D7DCD /* SentryCrashNSErrorUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashNSErrorUtil.m; path = Sources/SentryCrash/Recording/Tools/SentryCrashNSErrorUtil.m; sourceTree = ""; }; 86D9AB898C363D41D4E481EB5B188699 /* SRRandom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRandom.h; path = SocketRocket/Internal/Utilities/SRRandom.h; sourceTree = ""; }; + 8742C2399745ECC8D043A3E221FC7A8B /* SentryDebugImageProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDebugImageProvider.m; path = Sources/Sentry/SentryDebugImageProvider.m; sourceTree = ""; }; 875A853EF16DE9D57BE99E2A46D0F589 /* Pods-Hammerspoon-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Hammerspoon-resources.sh"; sourceTree = ""; }; + 8787C7AD08C4D777BB7FC083F3099E0E /* SentryRequestCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRequestCodable.swift; path = Sources/Swift/Protocol/Codable/SentryRequestCodable.swift; sourceTree = ""; }; + 879DC3AEC1FE349460CCF05A0E44311F /* SentryReplayVideoMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayVideoMaker.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayVideoMaker.swift; sourceTree = ""; }; 87CEBFB7B7323593F0CE749DDDFCF274 /* PSWebSocketDeflater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketDeflater.h; path = PocketSocket/PSWebSocketDeflater.h; sourceTree = ""; }; + 87F5310C509B09820467AEA5E83F6CF8 /* SentryCrashWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashWrapper.m; path = Sources/Sentry/SentryCrashWrapper.m; sourceTree = ""; }; 882A838E208D86B393D611DC290E199F /* PSWebSocketDriver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSWebSocketDriver.m; path = PocketSocket/PSWebSocketDriver.m; sourceTree = ""; }; - 882F2C490C4B281DAEB04392CD181CB4 /* SentryCrashWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashWrapper.m; path = Sources/Sentry/SentryCrashWrapper.m; sourceTree = ""; }; - 8864375D9EC4EB3F66DF0FC142FA7CF0 /* SentryCrashMachineContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMachineContext.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.h; sourceTree = ""; }; + 886D98EC2DACD7E9BB813F7239EFAAAB /* NSNumberDecodableWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSNumberDecodableWrapper.swift; path = Sources/Swift/Protocol/Codable/NSNumberDecodableWrapper.swift; sourceTree = ""; }; + 8882043BE2E81AC642F94108FEB6E661 /* SentryMachLogging.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryMachLogging.hpp; path = Sources/Sentry/include/SentryMachLogging.hpp; sourceTree = ""; }; 897599DA33F35B452DDEB3C8205AB45D /* Pods-Hammerspoon-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Hammerspoon-acknowledgements.plist"; sourceTree = ""; }; - 8990502F713E1FCD895CF70754BB17D8 /* SentryRedactOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRedactOptions.swift; path = Sources/Swift/Protocol/SentryRedactOptions.swift; sourceTree = ""; }; - 8A33BF02CCF7D216DBBFBB0BA777834D /* SentryScreenshotIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScreenshotIntegration.m; path = Sources/Sentry/SentryScreenshotIntegration.m; sourceTree = ""; }; - 8A72E88B446CC4FE89F2C74FAE7E744B /* MetricsAggregator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MetricsAggregator.swift; path = Sources/Swift/Metrics/MetricsAggregator.swift; sourceTree = ""; }; - 8AC6775638F38D17B39F7C1C42B0A381 /* SentryCrashMach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMach.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMach.h; sourceTree = ""; }; + 899A467E33D23B3C4851C216969A646F /* SentryDependencyContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDependencyContainer.h; path = Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h; sourceTree = ""; }; + 89D24D0894702DF1776C05B5E0EF59BC /* SentryBreadcrumb+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryBreadcrumb+Private.h"; path = "Sources/Sentry/include/HybridPublic/SentryBreadcrumb+Private.h"; sourceTree = ""; }; + 8A12BB6450CB713A25FC31E05608F6FF /* NumberExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NumberExtensions.swift; path = Sources/Swift/Core/Extensions/NumberExtensions.swift; sourceTree = ""; }; + 8A157016CFDCE8B69F5D9AC8243F7463 /* SentryDiscardReasonMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDiscardReasonMapper.m; path = Sources/Sentry/SentryDiscardReasonMapper.m; sourceTree = ""; }; + 8A4AC60D34897EE4A2A1817B03B8BDFE /* SentryIntegrationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryIntegrationProtocol.h; path = Sources/Sentry/Public/SentryIntegrationProtocol.h; sourceTree = ""; }; + 8AD573609C4DD4D53E4FDCCA8D3C9BF3 /* SentryCrashInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashInstallation.h; path = Sources/SentryCrash/Installations/SentryCrashInstallation.h; sourceTree = ""; }; + 8AEED5DE1B8557ABD0BF34522210EDF1 /* SentrySysctl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySysctl.h; path = Sources/Sentry/include/SentrySysctl.h; sourceTree = ""; }; 8AFD4ECDECC8685116C738E01C8186CE /* MIKMIDIEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIEvent.m; path = Source/MIKMIDIEvent.m; sourceTree = ""; }; - 8B86EC3596906650F1A3D0A569BB7679 /* SentryUIViewControllerSwizzling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIViewControllerSwizzling.m; path = Sources/Sentry/SentryUIViewControllerSwizzling.m; sourceTree = ""; }; - 8B91153A5160B262B00E3A1751F6F83F /* SentryCrashBinaryImageProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashBinaryImageProvider.h; path = Sources/Sentry/include/SentryCrashBinaryImageProvider.h; sourceTree = ""; }; - 8BED14EE0EE2F8C4B5680F589B113B78 /* SentryFrameRemover.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFrameRemover.m; path = Sources/Sentry/SentryFrameRemover.m; sourceTree = ""; }; - 8C01CC40D7A45F5F3E4CBF4171CC5464 /* SentryMsgPackSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMsgPackSerializer.m; path = Sources/Sentry/SentryMsgPackSerializer.m; sourceTree = ""; }; - 8C83786CBE45FC058901FC5261CB12F8 /* SentryRRWebMetaEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebMetaEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebMetaEvent.swift; sourceTree = ""; }; + 8C2AF0ED5678F26A199D1187DF622757 /* SentryCrashStackCursor_Backtrace.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashStackCursor_Backtrace.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_Backtrace.c; sourceTree = ""; }; 8CBF1051BE74C19B87CD434F8D2B68A1 /* MIKMIDIChannelVoiceCommand_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIChannelVoiceCommand_SubclassMethods.h; path = Source/MIKMIDIChannelVoiceCommand_SubclassMethods.h; sourceTree = ""; }; + 8CF6E6C705AB59F50EA0D4AD6BA9F8CF /* SentryThreadInspector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryThreadInspector.h; path = Sources/Sentry/include/SentryThreadInspector.h; sourceTree = ""; }; 8D26327A6C226830B2E1A3EE46B72674 /* MIKMIDIDeviceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIDeviceManager.h; path = Source/MIKMIDIDeviceManager.h; sourceTree = ""; }; 8D3CB77B497E3A08D81AED29EA3E0A29 /* DDASLLogCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogCapture.m; path = Sources/CocoaLumberjack/DDASLLogCapture.m; sourceTree = ""; }; 8D56D49745490A9D00598A677A94F507 /* MIKMIDIMappingItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMappingItem.h; path = Source/MIKMIDIMappingItem.h; sourceTree = ""; }; - 8E7BE901D79ABAB59E0390AACC282F01 /* SentryCrashExceptionApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashExceptionApplication.h; path = Sources/Sentry/Public/SentryCrashExceptionApplication.h; sourceTree = ""; }; - 8E7C8BFB8928EBE3C195C73DD76A4DEF /* SentryUIEventTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTracker.h; path = Sources/Sentry/include/SentryUIEventTracker.h; sourceTree = ""; }; - 8EF6D9E83F9FDA4407E1E07B6FD07EE6 /* SentrySessionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySessionTracker.h; path = Sources/Sentry/include/SentrySessionTracker.h; sourceTree = ""; }; - 8FDE677CCBAB7DB9FE026E529F6E4977 /* SentryCrashFileUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashFileUtils.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.h; sourceTree = ""; }; + 8DC22CECBBE3E67CD8D9359EDC1C1CEF /* SentryScreenFrames.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScreenFrames.m; path = Sources/Sentry/SentryScreenFrames.m; sourceTree = ""; }; + 8DD887A0050B4A72475E9A589CEF0F89 /* SentryCrashMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor.h; sourceTree = ""; }; + 8DEF41D9B59330B53F10BBF26B0D4971 /* SentryAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAttachment.m; path = Sources/Sentry/SentryAttachment.m; sourceTree = ""; }; + 8DFF64F1A541FA55FB0E0B906D45F16C /* SentrySpan+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySpan+Private.h"; path = "Sources/Sentry/include/SentrySpan+Private.h"; sourceTree = ""; }; + 8E1205EF093247098739F118D081AC02 /* SentrySample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySample.m; path = Sources/Sentry/Profiling/SentrySample.m; sourceTree = ""; }; + 8E7D33B94A1B9DBFC2DCD2DFF44F66DE /* SentrySession+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySession+Private.h"; path = "Sources/Sentry/include/SentrySession+Private.h"; sourceTree = ""; }; + 8F545D7F8B2046D3F801B76E41366D28 /* SentryRRWebTouchEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebTouchEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebTouchEvent.swift; sourceTree = ""; }; + 8FD01BCFEFF8D3DD043FA95A330D38FD /* SentryClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryClient.h; path = Sources/Sentry/Public/SentryClient.h; sourceTree = ""; }; + 8FDF7638A90D4B5527FC4418EC946D24 /* Sentry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Sentry.modulemap; sourceTree = ""; }; 900BB119EB3B1A5260854113BB8B039F /* MIKMIDIPitchBendChangeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPitchBendChangeEvent.h; path = Source/MIKMIDIPitchBendChangeEvent.h; sourceTree = ""; }; - 902BCC112991AEABE78136494D482BA0 /* NSLocale+Sentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLocale+Sentry.m"; path = "Sources/Sentry/NSLocale+Sentry.m"; sourceTree = ""; }; + 902956407F04A8529E31397B44044937 /* SentrySwift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwift.h; path = Sources/Sentry/include/SentrySwift.h; sourceTree = ""; }; + 905C379BC198F2746E9035C78DACDA5E /* SentryStacktraceBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryStacktraceBuilder.m; path = Sources/Sentry/SentryStacktraceBuilder.m; sourceTree = ""; }; 9093C406D4B64731D18CCA6C385B6596 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/CocoaLumberjack/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 90ABA8BA9BC696677D0D28784125D7DB /* SentryNSDataSwizzling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSDataSwizzling.m; path = Sources/Sentry/SentryNSDataSwizzling.m; sourceTree = ""; }; + 90AAB05173D10F905323830BBD3002D7 /* SentryCrashDebug.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashDebug.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashDebug.c; sourceTree = ""; }; 90AD304C8E409EE16CB4625F8EC72805 /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = ""; }; - 90DFAC13F4502018267E077995C4CC22 /* SentryDataCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDataCategory.h; path = Sources/Sentry/include/SentryDataCategory.h; sourceTree = ""; }; - 90FB191DFF25E58F5AD7C2973E729417 /* SentryProfilerState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerState.h; path = Sources/Sentry/include/SentryProfilerState.h; sourceTree = ""; }; - 91110C940CF3E0DC5177395FE6D1BDE7 /* SentryMachLogging.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryMachLogging.hpp; path = Sources/Sentry/include/SentryMachLogging.hpp; sourceTree = ""; }; - 91115B79CA65938B48F0335E98FFC9D4 /* SentryDebugImageProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDebugImageProvider.h; path = Sources/Sentry/Public/SentryDebugImageProvider.h; sourceTree = ""; }; - 9136E7315992B6E961F99494784E423F /* SentryHttpDateParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHttpDateParser.m; path = Sources/Sentry/SentryHttpDateParser.m; sourceTree = ""; }; - 91416C4E1B3ABA3F34D11AC4F3FA6529 /* SentryFramesTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFramesTrackingIntegration.m; path = Sources/Sentry/SentryFramesTrackingIntegration.m; sourceTree = ""; }; - 917BC1D2BBF2675CC1CF9239AB8FBB35 /* SentryRetryAfterHeaderParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRetryAfterHeaderParser.h; path = Sources/Sentry/include/SentryRetryAfterHeaderParser.h; sourceTree = ""; }; - 917F676D916B3C5ECFA038FCFD1889D9 /* SentryDelayedFramesTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDelayedFramesTracker.h; path = Sources/Sentry/include/SentryDelayedFramesTracker.h; sourceTree = ""; }; 9192462197B734C4F024DF6F3202D421 /* SocketRocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.release.xcconfig; sourceTree = ""; }; - 91A211522E8118B3600505936E8D0F27 /* SentryCrashSymbolicator.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashSymbolicator.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashSymbolicator.c; sourceTree = ""; }; - 91CC390493C9DD5E9F2C4D6DEE838E00 /* SentryLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryLog.swift; path = Sources/Swift/Tools/SentryLog.swift; sourceTree = ""; }; - 92B0C7B5929F085D529E99BB413EBA79 /* NSMutableDictionary+Sentry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableDictionary+Sentry.m"; path = "Sources/Sentry/NSMutableDictionary+Sentry.m"; sourceTree = ""; }; + 926AA2D4E5E1CED329F2F95CFF5FD2CB /* SentryTransportAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTransportAdapter.m; path = Sources/Sentry/SentryTransportAdapter.m; sourceTree = ""; }; + 92AFDBA9D5CC855EA00FB21CDCD61E55 /* SentryReplayApi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryReplayApi.h; path = Sources/Sentry/Public/SentryReplayApi.h; sourceTree = ""; }; + 92D72DCE8B696F2B887D26F23A9F6C13 /* SentryOptions+HybridSDKs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryOptions+HybridSDKs.h"; path = "Sources/Sentry/include/HybridPublic/SentryOptions+HybridSDKs.h"; sourceTree = ""; }; 92FE6A882C4D18E418625FFC2139AA49 /* PSWebSocketInflater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSWebSocketInflater.m; path = PocketSocket/PSWebSocketInflater.m; sourceTree = ""; }; - 93803DAF93725B5980811976380C1D54 /* UIRedactBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIRedactBuilder.swift; path = Sources/Swift/Tools/UIRedactBuilder.swift; sourceTree = ""; }; - 93AE0E3BDFFD2D2128943F83878D441B /* SentryDebugMeta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDebugMeta.m; path = Sources/Sentry/SentryDebugMeta.m; sourceTree = ""; }; - 9452FC54CB524C7233E630215BDA616F /* SentrySerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySerialization.m; path = Sources/Sentry/SentrySerialization.m; sourceTree = ""; }; - 950F8A353817C1C4137FC38F7641CF8C /* SentryContinuousProfiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryContinuousProfiler.h; path = Sources/Sentry/include/SentryContinuousProfiler.h; sourceTree = ""; }; + 93823E72A4537D395A60EDB02FBB61A3 /* SentryWatchdogTerminationTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationTrackingIntegration.h; path = Sources/Sentry/include/SentryWatchdogTerminationTrackingIntegration.h; sourceTree = ""; }; + 93A9BB91031482A7585D5BC11375A453 /* SentryHub+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryHub+Private.h"; path = "Sources/Sentry/include/SentryHub+Private.h"; sourceTree = ""; }; + 93B1AA9C2546C314F065772764262F6B /* SentryFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFrame.h; path = Sources/Sentry/Public/SentryFrame.h; sourceTree = ""; }; + 93B884D749F216BDA2A699DBE3FC1D5A /* SentryANRType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryANRType.swift; path = Sources/Swift/Core/Integrations/ANR/SentryANRType.swift; sourceTree = ""; }; + 942CB785F10EF5D302CBEE0B17B22874 /* SentryInAppLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInAppLogic.h; path = Sources/Sentry/include/SentryInAppLogic.h; sourceTree = ""; }; + 9448B8D33A8B8886752785AD18161DF1 /* SentryOptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryOptions.m; path = Sources/Sentry/SentryOptions.m; sourceTree = ""; }; + 948029A4730DA2DAAB70595E08A0DE26 /* SentryFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFormatter.h; path = Sources/Sentry/include/HybridPublic/SentryFormatter.h; sourceTree = ""; }; + 94D32381EBFB62DFBDCD427E9E04D6A7 /* SentryAppStartMeasurement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStartMeasurement.m; path = Sources/Sentry/SentryAppStartMeasurement.m; sourceTree = ""; }; 9561FEDBADF0DECE998FFC6602D09873 /* SRSIMDHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSIMDHelpers.m; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.m; sourceTree = ""; }; - 95BE0CBAD3FFF9C6E9C2FBB26C7A2FEA /* SentryNoOpSpan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNoOpSpan.m; path = Sources/Sentry/SentryNoOpSpan.m; sourceTree = ""; }; - 9637024B7B86F4DFE1C3BC3EFF72683C /* SentryLogC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLogC.h; path = Sources/Sentry/include/SentryLogC.h; sourceTree = ""; }; - 964AC0C64EB02F4290FFC5987106ED8E /* SentrySample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySample.m; path = Sources/Sentry/Profiling/SentrySample.m; sourceTree = ""; }; + 962C790D313BC9CD6D3795CD05661781 /* SentryCrashIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashIntegration.h; path = Sources/Sentry/include/SentryCrashIntegration.h; sourceTree = ""; }; 96938FEB113D0B5CB884DDD289E9E77E /* MIKMIDIClientSourceEndpoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIClientSourceEndpoint.h; path = Source/MIKMIDIClientSourceEndpoint.h; sourceTree = ""; }; - 96B18F58FD1DD21A1C801F87641C097E /* SentryCrashMonitor_NSException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_NSException.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_NSException.h; sourceTree = ""; }; - 9719074E200FB3095CD0C4D46489A012 /* SentryCrashReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReport.h; path = Sources/SentryCrash/Recording/SentryCrashReport.h; sourceTree = ""; }; + 96F36B319C20D9CCECB8380DAF1D0E43 /* SentryPropagationContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPropagationContext.h; path = Sources/Sentry/SentryPropagationContext.h; sourceTree = ""; }; + 96F9E586137C66364ED6A0E3E9EDE5CD /* SentryAutoBreadcrumbTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAutoBreadcrumbTrackingIntegration.m; path = Sources/Sentry/SentryAutoBreadcrumbTrackingIntegration.m; sourceTree = ""; }; + 971EFB9F42CC92340CFA0E717BD61903 /* SentryDefaultRateLimits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDefaultRateLimits.h; path = Sources/Sentry/include/SentryDefaultRateLimits.h; sourceTree = ""; }; + 972D0DDFFD016B086F9E12707D142036 /* SentryHub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHub.m; path = Sources/Sentry/SentryHub.m; sourceTree = ""; }; 97374FB11D4E2C1DC17DDF20E0285ED0 /* DELETEResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DELETEResponse.h; path = Extensions/WebDAV/DELETEResponse.h; sourceTree = ""; }; 976B6373B6050F75B5F22384B0FE1A73 /* Pods-Hammerspoon.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Hammerspoon.release.xcconfig"; sourceTree = ""; }; - 977B851A58428EB952FF0D119072B3FA /* SentryWatchdogTerminationTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationTracker.h; path = Sources/Sentry/include/SentryWatchdogTerminationTracker.h; sourceTree = ""; }; - 9837682E38F6D905DFE0CF4C429F933B /* SentryHttpTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHttpTransport.h; path = Sources/Sentry/include/SentryHttpTransport.h; sourceTree = ""; }; + 9773F177546E1954F32757DEDB59677C /* SentryTracer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTracer.m; path = Sources/Sentry/SentryTracer.m; sourceTree = ""; }; + 978B9A6D4D3166EA514062544A9156E6 /* SentryNetworkTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNetworkTrackingIntegration.m; path = Sources/Sentry/SentryNetworkTrackingIntegration.m; sourceTree = ""; }; + 9802EE34E6F9FFD1811AF78199EBDCBF /* SentryEnvelopeRateLimit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelopeRateLimit.m; path = Sources/Sentry/SentryEnvelopeRateLimit.m; sourceTree = ""; }; + 985518D47F23D213ED423113D40FE92B /* SentryProfilerSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerSerialization.h; path = Sources/Sentry/include/SentryProfilerSerialization.h; sourceTree = ""; }; + 986E4537FEEC81A4A92BB801CC5F32B8 /* SentryAutoBreadcrumbTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAutoBreadcrumbTrackingIntegration.h; path = Sources/Sentry/include/SentryAutoBreadcrumbTrackingIntegration.h; sourceTree = ""; }; 988923A666D72522C0D744911E35F3BC /* MIKMIDISourceEndpoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISourceEndpoint.h; path = Source/MIKMIDISourceEndpoint.h; sourceTree = ""; }; + 9915491130B686F27F2481A44F5A4A06 /* SentryWatchdogTerminationContextProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryWatchdogTerminationContextProcessor.swift; path = Sources/Swift/Integrations/WatchdogTerminations/Processors/SentryWatchdogTerminationContextProcessor.swift; sourceTree = ""; }; + 992514C828A3C923EF053BA67001F382 /* SentryCrashReportFixer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashReportFixer.c; path = Sources/SentryCrash/Recording/SentryCrashReportFixer.c; sourceTree = ""; }; + 993CF4388221193C6C987F7A3F902399 /* SentryStacktraceBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryStacktraceBuilder.h; path = Sources/Sentry/include/SentryStacktraceBuilder.h; sourceTree = ""; }; + 997616B6DA81D6F3C87407FFF729C3AF /* SentrySDK.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySDK.m; path = Sources/Sentry/SentrySDK.m; sourceTree = ""; }; 99798CA2584321A1BF9EA541DC137E78 /* ORSSerialPort-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ORSSerialPort-prefix.pch"; sourceTree = ""; }; + 99DA03A4F6DB9555424E94484A8B3639 /* SentryCrashJSONCodecObjC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashJSONCodecObjC.m; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.m; sourceTree = ""; }; + 99DE7F77081A82AE48E64A4BCA50341F /* SentryMetricProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryMetricProfiler.mm; path = Sources/Sentry/SentryMetricProfiler.mm; sourceTree = ""; }; 99FCD39FFFC8129127C5CA19016B47A0 /* MIKMIDIObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIObject.m; path = Source/MIKMIDIObject.m; sourceTree = ""; }; - 9A227909B32E001649C6040DD7E41405 /* SentryTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTracer.h; path = Sources/Sentry/include/SentryTracer.h; sourceTree = ""; }; 9A287DDC7EA7068ABCB93823D1570EEA /* ORSSerialPort-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ORSSerialPort-dummy.m"; sourceTree = ""; }; + 9A47CD6102F516A4E7022AF905006C88 /* SentryCoreDataTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCoreDataTrackingIntegration.h; path = Sources/Sentry/include/SentryCoreDataTrackingIntegration.h; sourceTree = ""; }; + 9A6E96F9686CED11A83C8CF2B199428D /* SentryAppStartTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStartTrackingIntegration.h; path = Sources/Sentry/include/SentryAppStartTrackingIntegration.h; sourceTree = ""; }; + 9A993FFD99C1A626733F459F61F8C910 /* SentryCrashMachineContext.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMachineContext.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.c; sourceTree = ""; }; 9A9F9D7E7B24382E9790537A20F8D351 /* HTTPAsyncFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPAsyncFileResponse.m; path = Core/Responses/HTTPAsyncFileResponse.m; sourceTree = ""; }; - 9AF86F1F9721DB639D4919C559B31FFB /* SentryTraceProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryTraceProfiler.mm; path = Sources/Sentry/Profiling/SentryTraceProfiler.mm; sourceTree = ""; }; - 9B713CA2CD2A320F2ED9F05F8CA69B6E /* SentryCrashDebug.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashDebug.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashDebug.c; sourceTree = ""; }; + 9AF02E3E80A14C3AB15F7F1941ABFF37 /* SentryProfilerSerialization.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfilerSerialization.mm; path = Sources/Sentry/Profiling/SentryProfilerSerialization.mm; sourceTree = ""; }; + 9B410C510F3D3ABF7D884FFBC40A4457 /* SentryNSDictionarySanitize.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSDictionarySanitize.m; path = Sources/Sentry/SentryNSDictionarySanitize.m; sourceTree = ""; }; + 9B6215BF2862BE54E30D103E810503CF /* SentryANRTrackerV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryANRTrackerV1.h; path = Sources/Sentry/include/SentryANRTrackerV1.h; sourceTree = ""; }; + 9B67152F73302D1D194D66B13AECB3ED /* SentryAppStartTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStartTracker.h; path = Sources/Sentry/include/SentryAppStartTracker.h; sourceTree = ""; }; 9C4EB8092FD3032A17342EE0DB912D98 /* PSWebSocketDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketDriver.h; path = PocketSocket/PSWebSocketDriver.h; sourceTree = ""; }; 9C5D0EFE8DC739CC9BC50409F6356BB2 /* ORSSerialPort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ORSSerialPort.h; path = Source/ORSSerialPort.h; sourceTree = ""; }; - 9C7B72EFCA520A3F9774C14C668FBAB3 /* SentryProfileTimeseries.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfileTimeseries.mm; path = Sources/Sentry/SentryProfileTimeseries.mm; sourceTree = ""; }; - 9CD5A1C1CE36A5F69F77F9F7ACCF27EE /* SentryViewHierarchyIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryViewHierarchyIntegration.h; path = Sources/Sentry/include/SentryViewHierarchyIntegration.h; sourceTree = ""; }; - 9D5EB7615C4518DC633202C82F4FB3DB /* SentryANRTrackingIntegrationV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryANRTrackingIntegrationV2.m; path = Sources/Sentry/SentryANRTrackingIntegrationV2.m; sourceTree = ""; }; + 9C960815AF5A9CC36433E8014FAE64E8 /* SentryLogOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryLogOutput.swift; path = Sources/Swift/Core/Tools/SentryLogOutput.swift; sourceTree = ""; }; + 9CB06B912B54A368FD5987358A227924 /* SentrySpanContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanContext.m; path = Sources/Sentry/SentrySpanContext.m; sourceTree = ""; }; + 9D1F0EC48B392EAE9559B50CAE05D675 /* SentryCrashSysCtl.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashSysCtl.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.c; sourceTree = ""; }; + 9D326D07867B7B21C8779DB2B151C283 /* SentrySRDefaultBreadcrumbConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentrySRDefaultBreadcrumbConverter.swift; path = Sources/Swift/Integrations/SessionReplay/SentrySRDefaultBreadcrumbConverter.swift; sourceTree = ""; }; + 9D7A56DDC91677E82BCA78612D8B6B9E /* SentryCoreDataSwizzling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCoreDataSwizzling.m; path = Sources/Sentry/SentryCoreDataSwizzling.m; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E001A62F25B7B7A9B650A3091AE334C /* SentryMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMessage.m; path = Sources/Sentry/SentryMessage.m; sourceTree = ""; }; + 9E00BB3CF3266C62EEFB535D21DC0BE9 /* SentryStacktrace.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryStacktrace.m; path = Sources/Sentry/SentryStacktrace.m; sourceTree = ""; }; 9E0A3FCDC71A8763FDE07CCDD7D997F9 /* SRURLUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRURLUtilities.m; path = SocketRocket/Internal/Utilities/SRURLUtilities.m; sourceTree = ""; }; - 9ED304949BB09ED912DAFC70A43FFE67 /* SentryUIEventTrackerTransactionMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTrackerTransactionMode.h; path = Sources/Sentry/include/SentryUIEventTrackerTransactionMode.h; sourceTree = ""; }; - 9EEBAD0326FAEC21EC9407537EAA8155 /* SentryDisplayLinkWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDisplayLinkWrapper.m; path = Sources/Sentry/include/SentryDisplayLinkWrapper.m; sourceTree = ""; }; + 9E54BA06A5ED36D17D78302114356BFE /* SentryCrashMonitor_System.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_System.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.h; sourceTree = ""; }; + 9EF723904C58EEEBA7F0FC57E76F60F1 /* SentryThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryThread.h; path = Sources/Sentry/Public/SentryThread.h; sourceTree = ""; }; 9F0388A5DDDBCC3599BC947B6EAE0C4D /* CocoaHTTPServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaHTTPServer-dummy.m"; sourceTree = ""; }; 9F051BC38B6E2DBC7610F5942CF80BD6 /* SocketRocket.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.debug.xcconfig; sourceTree = ""; }; 9F30D997712AB96094372E02201362BD /* MIKMIDITrack_Protected.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDITrack_Protected.h; path = Source/MIKMIDITrack_Protected.h; sourceTree = ""; }; + 9F7210EFFBF686CD251D5A1B4427B08B /* SentryCrashCachedData.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCachedData.c; path = Sources/SentryCrash/Recording/SentryCrashCachedData.c; sourceTree = ""; }; 9F786C5330BF38BF3DC5E1DC57D5BF65 /* HTTPMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPMessage.m; path = Core/HTTPMessage.m; sourceTree = ""; }; - A047CA69288F77F6485DF86D21CAAB1D /* SentryNSDataUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSDataUtils.m; path = Sources/Sentry/SentryNSDataUtils.m; sourceTree = ""; }; - A0530EBEDFB6DF1385B3B2402D249C0E /* SentrySystemEventBreadcrumbs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySystemEventBreadcrumbs.h; path = Sources/Sentry/include/SentrySystemEventBreadcrumbs.h; sourceTree = ""; }; - A0F1C8387B9F711513BC694C1257A76A /* SentryFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFormatter.h; path = Sources/Sentry/include/HybridPublic/SentryFormatter.h; sourceTree = ""; }; + 9F8668C520399BA6040828B01D2D0DB6 /* SentryProfiledTracerConcurrency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfiledTracerConcurrency.h; path = Sources/Sentry/include/SentryProfiledTracerConcurrency.h; sourceTree = ""; }; + 9FA1A20CDB46FFB92641EC76FD79B2FC /* SentryCrashCachedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashCachedData.h; path = Sources/SentryCrash/Recording/SentryCrashCachedData.h; sourceTree = ""; }; + 9FBA08D83020FDFD54F1C1ADC2A0B1E5 /* SentryFileIOTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFileIOTrackingIntegration.m; path = Sources/Sentry/SentryFileIOTrackingIntegration.m; sourceTree = ""; }; + A0095ED28923BB433C6936C719EF5BF8 /* SentryRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRequest.m; path = Sources/Sentry/SentryRequest.m; sourceTree = ""; }; + A0420ED2F06C298E891E27608911A133 /* SentryRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRequestOperation.h; path = Sources/Sentry/include/SentryRequestOperation.h; sourceTree = ""; }; + A059A28870B5D0DFCBE9719234C0FDFC /* SentryWatchdogTerminationScopeObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationScopeObserver.m; path = Sources/Sentry/SentryWatchdogTerminationScopeObserver.m; sourceTree = ""; }; + A0BE50811C81F94CA06D0BF50EAAA391 /* SentryDefaultObjCRuntimeWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDefaultObjCRuntimeWrapper.h; path = Sources/Sentry/include/SentryDefaultObjCRuntimeWrapper.h; sourceTree = ""; }; + A0BF15DF33FD6B2353C4BFF2ABBC0D07 /* SentrySpanStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanStatus.m; path = Sources/Sentry/SentrySpanStatus.m; sourceTree = ""; }; + A0C4FD24B189D37A784C7FA3A67B7B84 /* SentryUserFeedbackFormConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackFormConfiguration.swift; path = Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackFormConfiguration.swift; sourceTree = ""; }; A11C17EE437FC5AB0BDA0325363E437A /* SRIOConsumerPool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumerPool.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m; sourceTree = ""; }; + A130B05C92B391BDAF34E51CDE1940A5 /* SentryGraphicsImageRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryGraphicsImageRenderer.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryGraphicsImageRenderer.swift; sourceTree = ""; }; + A139368FACD29D3F545E73A99828C356 /* SentryWatchdogTerminationTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationTracker.h; path = Sources/Sentry/include/SentryWatchdogTerminationTracker.h; sourceTree = ""; }; + A1A30C9B714366214F409090EDE145BC /* SentryLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLog.h; path = Sources/Sentry/include/SentryLog.h; sourceTree = ""; }; + A1ACDED416CB68F5EAB3AD0C1A53DE8C /* SentryNSProcessInfoWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSProcessInfoWrapper.h; path = Sources/Sentry/include/SentryNSProcessInfoWrapper.h; sourceTree = ""; }; A1BF895D48796B4F288E1C73CBDDC275 /* MIKMIDIMetaTrackSequenceNameEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaTrackSequenceNameEvent.h; path = Source/MIKMIDIMetaTrackSequenceNameEvent.h; sourceTree = ""; }; A20F896728D6C7FFA53B17ED560FB95A /* DDContextFilterLogFormatter+Deprecated.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDContextFilterLogFormatter+Deprecated.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDContextFilterLogFormatter+Deprecated.h"; sourceTree = ""; }; - A21DA63C193D8455569C1695C86B59BB /* SentryCrashSysCtl.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashSysCtl.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.c; sourceTree = ""; }; - A270A6AF666BBD8E9740DC8A79919F4F /* SentryCrashMemory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMemory.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMemory.h; sourceTree = ""; }; + A279C443C60B1D2BCEC66CB27950153A /* SentryProfileTimeseries.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfileTimeseries.h; path = Sources/Sentry/include/SentryProfileTimeseries.h; sourceTree = ""; }; A2B776772C8FBF5D97BDE4D1F46C274A /* MIKMIDISequence+MIKMIDIPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MIKMIDISequence+MIKMIDIPrivate.h"; path = "Source/MIKMIDISequence+MIKMIDIPrivate.h"; sourceTree = ""; }; - A2E16A73DAE220CD1B7E560B08776026 /* SentrySessionReplayIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySessionReplayIntegration.h; path = Sources/Sentry/include/SentrySessionReplayIntegration.h; sourceTree = ""; }; A30A09EAEF2D914E89C9895F37291A88 /* DAVConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DAVConnection.m; path = Extensions/WebDAV/DAVConnection.m; sourceTree = ""; }; - A32D762F11D1189E284D764E3BC047EB /* SentryCrashMachineContext.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMachineContext.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.c; sourceTree = ""; }; - A39CB8EA3CBC6F2CDC535C59D576E0F7 /* SentryFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFileManager.h; path = Sources/Sentry/include/SentryFileManager.h; sourceTree = ""; }; + A33CB6C1BE62CF73171734DD2FABA749 /* SentryScreenshotIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScreenshotIntegration.h; path = Sources/Sentry/include/SentryScreenshotIntegration.h; sourceTree = ""; }; + A3BBA64625A152A56BECC443B01EC490 /* SentryThreadMetadataCache.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryThreadMetadataCache.hpp; path = Sources/Sentry/include/SentryThreadMetadataCache.hpp; sourceTree = ""; }; + A3BCD36EF9F7213689C999CEFEEB289D /* SentryMechanismMeta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMechanismMeta.h; path = Sources/Sentry/Public/SentryMechanismMeta.h; sourceTree = ""; }; A40744E74F20D172729FD70C1DC93565 /* Pods-Hammerspoon.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Hammerspoon.profile.xcconfig"; sourceTree = ""; }; - A477EC39035EC38453C3083C439FCF17 /* SentrySdkInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySdkInfo.h; path = Sources/Sentry/include/SentrySdkInfo.h; sourceTree = ""; }; + A416897A0822626DBF259384531555A0 /* SentrySamplingProfiler.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentrySamplingProfiler.hpp; path = Sources/Sentry/include/SentrySamplingProfiler.hpp; sourceTree = ""; }; + A42039A24680DB263DDCB2E0BC8A9F0E /* SentryReplayEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayEvent.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayEvent.swift; sourceTree = ""; }; + A43554692DE28A726723B5003DB600EA /* SentryUIEventTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIEventTracker.m; path = Sources/Sentry/SentryUIEventTracker.m; sourceTree = ""; }; A4938F684913D37B6337405025347608 /* NSURLRequest+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h"; sourceTree = ""; }; - A4C38AF18350D688C18C717305352D13 /* SentryNSDictionarySanitize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSDictionarySanitize.h; path = Sources/Sentry/include/SentryNSDictionarySanitize.h; sourceTree = ""; }; - A52B1C534D0B5EB541222E6CAFE0413E /* SentryRRWebBreadcrumbEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebBreadcrumbEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebBreadcrumbEvent.swift; sourceTree = ""; }; - A53807FD51EEB03F5DABD4AAAEE94EDF /* SentryCrashID.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashID.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashID.c; sourceTree = ""; }; - A56A272A4B695313852FC2AD0284C79F /* SentrySRDefaultBreadcrumbConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentrySRDefaultBreadcrumbConverter.swift; path = Sources/Swift/Integrations/SessionReplay/SentrySRDefaultBreadcrumbConverter.swift; sourceTree = ""; }; - A592989F329AC2BF22F7E5AB68655B73 /* SentryEnvelopeAttachmentHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeAttachmentHeader.h; path = Sources/Sentry/include/SentryEnvelopeAttachmentHeader.h; sourceTree = ""; }; + A4B8FA7CA3389D3F77D2A5DC7FA90DEC /* SentryTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTransaction.m; path = Sources/Sentry/SentryTransaction.m; sourceTree = ""; }; + A4BAAA8F7F968CA32CC27AFA6CA33C47 /* SentryTraceContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceContext.h; path = Sources/Sentry/Public/SentryTraceContext.h; sourceTree = ""; }; + A5007C5E09BF8160EC9C14A0FD651801 /* SentryDelayedFramesTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDelayedFramesTracker.h; path = Sources/Sentry/include/SentryDelayedFramesTracker.h; sourceTree = ""; }; + A507AE1FFF1F537AD1D200F9331240B3 /* SentrySpanId.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanId.m; path = Sources/Sentry/SentrySpanId.m; sourceTree = ""; }; + A52ECA8F50A2C63943F1ADC8FBB3E32D /* SentryHttpStatusCodeRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHttpStatusCodeRange.h; path = Sources/Sentry/Public/SentryHttpStatusCodeRange.h; sourceTree = ""; }; A5AB178CB948A92A61BDFF58CFE8020D /* DDTTYLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDTTYLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDTTYLogger.h; sourceTree = ""; }; A5AD88F533B61B658F9EB29DA79E16B4 /* PSWebSocketInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketInternal.h; path = PocketSocket/PSWebSocketInternal.h; sourceTree = ""; }; - A5BDC79C7380C040B578F1A826EACC71 /* SentryWatchdogTerminationTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationTrackingIntegration.m; path = Sources/Sentry/SentryWatchdogTerminationTrackingIntegration.m; sourceTree = ""; }; - A6411CA17A6C1D4C3EDD3D36D8DC49B3 /* SentryDispatchSourceWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchSourceWrapper.h; path = Sources/Sentry/include/SentryDispatchSourceWrapper.h; sourceTree = ""; }; - A677BC0259318FAE26742F4AB3B60073 /* SentryAttachment+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryAttachment+Private.h"; path = "Sources/Sentry/include/SentryAttachment+Private.h"; sourceTree = ""; }; - A6A1E52C149597FBF16108B4D3758BFD /* SentryDevice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDevice.h; path = Sources/Sentry/include/SentryDevice.h; sourceTree = ""; }; - A6D2097B716EF157FA6D7B87E43DBE27 /* SentryByteCountFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryByteCountFormatter.h; path = Sources/Sentry/include/SentryByteCountFormatter.h; sourceTree = ""; }; - A73F2F47F8E99F38D5C1145AE392DB0C /* SentryPredicateDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPredicateDescriptor.h; path = Sources/Sentry/include/SentryPredicateDescriptor.h; sourceTree = ""; }; - A76009F81F962EE26C018F3547969E51 /* SentryANRTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryANRTracker.h; path = Sources/Sentry/include/SentryANRTracker.h; sourceTree = ""; }; + A5CCFEC704FA755C8CE5B212BD31D8AC /* SentryCrashSignalInfo.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashSignalInfo.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashSignalInfo.c; sourceTree = ""; }; + A6AB562B89B46DFF4A53F7436A71C1EF /* SentryFeedbackAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFeedbackAPI.h; path = Sources/Sentry/Public/SentryFeedbackAPI.h; sourceTree = ""; }; + A6B888DAA0B8319F95350F577A34A962 /* SentryLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryLog.swift; path = Sources/Swift/Core/Tools/SentryLog.swift; sourceTree = ""; }; + A6CCA424894D6D2DE3A103A3AC34D506 /* SentrySpanContext+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySpanContext+Private.h"; path = "Sources/Sentry/include/SentrySpanContext+Private.h"; sourceTree = ""; }; + A6E79D678484A20FBE09F8E74060B9AF /* SentrySpanProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanProtocol.h; path = Sources/Sentry/Public/SentrySpanProtocol.h; sourceTree = ""; }; + A6F64F8B24B4B2BCA7A20B23A598C9F3 /* SentryDelayedFramesTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDelayedFramesTracker.m; path = Sources/Sentry/SentryDelayedFramesTracker.m; sourceTree = ""; }; A7A7F3DA043B0BAC501772A67431080E /* HTTPFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPFileResponse.h; path = Core/Responses/HTTPFileResponse.h; sourceTree = ""; }; - A8F565F82675C906821D6FC3CC12F1DD /* SentrySpan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpan.h; path = Sources/Sentry/include/SentrySpan.h; sourceTree = ""; }; + A7D45B793B8653991E78532EB0E7A687 /* SentryScreenFrames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScreenFrames.h; path = Sources/Sentry/include/HybridPublic/SentryScreenFrames.h; sourceTree = ""; }; + A8B05C33F5F838187210EE0090C8CBF9 /* SentryCrashIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashIntegration.m; path = Sources/Sentry/SentryCrashIntegration.m; sourceTree = ""; }; + A916BA304F5A9005B5D0FAF7776AE362 /* SentryCrashMach.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMach.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashMach.c; sourceTree = ""; }; A94255A3E7159FA9B09AF83105A389D3 /* HTTPErrorResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPErrorResponse.h; path = Core/Responses/HTTPErrorResponse.h; sourceTree = ""; }; - A9A4C1214FFF63EEAF1FC9801E324AAF /* SentryCrashMonitor_CPPException.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryCrashMonitor_CPPException.cpp; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.cpp; sourceTree = ""; }; - A9BF69708826D7B366F0FA218140968E /* SentrySessionReplayIntegration-Hybrid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySessionReplayIntegration-Hybrid.h"; path = "Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration-Hybrid.h"; sourceTree = ""; }; - A9E5DE78DD79E203ACA7E997D4A338F6 /* SentrySessionReplaySyncC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySessionReplaySyncC.h; path = Sources/Sentry/include/SentrySessionReplaySyncC.h; sourceTree = ""; }; AA0197B58FEC975FF5384D0823AD22B0 /* MIKMIDIMetaCuePointEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaCuePointEvent.h; path = Source/MIKMIDIMetaCuePointEvent.h; sourceTree = ""; }; AA26B7092A6E27412E421C1E0D8914D3 /* MIKMIDIControlChangeCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIControlChangeCommand.h; path = Source/MIKMIDIControlChangeCommand.h; sourceTree = ""; }; AA6F89079FEB1979B7671E45DAC632AE /* MIKMIDIDestinationEndpoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIDestinationEndpoint.m; path = Source/MIKMIDIDestinationEndpoint.m; sourceTree = ""; }; + AA883C425153F298787046063BC18C7C /* SentryCrashCPU_arm.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_arm.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm.c; sourceTree = ""; }; AA8E00185B4941FC407C5504DD539958 /* MultipartMessageHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartMessageHeader.h; path = Core/Mime/MultipartMessageHeader.h; sourceTree = ""; }; + AABF144E4FECC804C88660851E7404BD /* SentryTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransport.h; path = Sources/Sentry/include/SentryTransport.h; sourceTree = ""; }; AAD81E06D64AF06E03A3E04506279DBD /* MIKMIDIMetaCopyrightEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaCopyrightEvent.m; path = Source/MIKMIDIMetaCopyrightEvent.m; sourceTree = ""; }; - AB1E2063BDBCF3FB40EC018AED4CF019 /* SentrySampling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySampling.m; path = Sources/Sentry/SentrySampling.m; sourceTree = ""; }; + AB3602E5F6455132F4E292E10674FA06 /* SentryHttpDateParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHttpDateParser.h; path = Sources/Sentry/include/SentryHttpDateParser.h; sourceTree = ""; }; + AB5AF804AE8846C9CD01A4E07FC50E56 /* SentryNetworkTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNetworkTrackingIntegration.h; path = Sources/Sentry/include/SentryNetworkTrackingIntegration.h; sourceTree = ""; }; AB750EFEFD0E374DF078145FF41774B0 /* Sparkle.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sparkle.debug.xcconfig; sourceTree = ""; }; AB7555D58C8F1A07489012ACF5A22AB3 /* MIKMIDIProgramChangeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIProgramChangeEvent.h; path = Source/MIKMIDIProgramChangeEvent.h; sourceTree = ""; }; AB801297707EC98AAF57E7099565E70C /* MIKMIDIMappingItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMappingItem.m; path = Source/MIKMIDIMappingItem.m; sourceTree = ""; }; AB8D88F1B3F79FA718713A3C5570F7C8 /* SRLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRLog.h; path = SocketRocket/Internal/Utilities/SRLog.h; sourceTree = ""; }; - ABCBC5E9EC605227E37FD7C331271004 /* SentryDataCategoryMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDataCategoryMapper.h; path = Sources/Sentry/include/SentryDataCategoryMapper.h; sourceTree = ""; }; + ABC9ECB062E169D711AADAD1B4338F85 /* SentryDevice.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryDevice.mm; path = Sources/Sentry/SentryDevice.mm; sourceTree = ""; }; + ABE9A4F7047B5CA0F0E9DFAFB201D181 /* SentryFileContents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryFileContents.swift; path = Sources/Swift/Core/Helper/SentryFileContents.swift; sourceTree = ""; }; AC0A367A791AC08CDA9C2A8610A45D36 /* SRRunLoopThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRunLoopThread.m; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.m; sourceTree = ""; }; - AC4E4D72389513804DD8B90CB2EA46DD /* SentryCrashJSONCodecObjC.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashJSONCodecObjC.m; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.m; sourceTree = ""; }; - ACD00B7E5C0BCB430CB82D4C142061FE /* SentrySDK.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySDK.m; path = Sources/Sentry/SentrySDK.m; sourceTree = ""; }; - AE07DAD02640ED755F69139357FE9802 /* SentryScopeObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScopeObserver.h; path = Sources/Sentry/include/SentryScopeObserver.h; sourceTree = ""; }; - AE5EA6846998D63671459BD7A261F3D3 /* SentryCrashMonitor_Signal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_Signal.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_Signal.h; sourceTree = ""; }; - AE73D62CFFD79A47310DDBA199176C67 /* SentryDebugImageProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDebugImageProvider.m; path = Sources/Sentry/SentryDebugImageProvider.m; sourceTree = ""; }; - AECAF574D8039358F508D7760C619A96 /* SentryThreadMetadataCache.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryThreadMetadataCache.hpp; path = Sources/Sentry/include/SentryThreadMetadataCache.hpp; sourceTree = ""; }; - AED8A3DEE4D565E5211CD39359F289AB /* SentryUIEventTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTrackingIntegration.h; path = Sources/Sentry/include/SentryUIEventTrackingIntegration.h; sourceTree = ""; }; + AC48BBE59A92DDB13D38B820F3F678C9 /* SentryScope.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScope.h; path = Sources/Sentry/Public/SentryScope.h; sourceTree = ""; }; + AD92D7F1003AD0C23D2C15B9FC128D72 /* SentrySpanStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanStatus.h; path = Sources/Sentry/Public/SentrySpanStatus.h; sourceTree = ""; }; + ADA3453AE613ED13A83F04EE0B1EE04E /* SentryAppStartTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStartTrackingIntegration.m; path = Sources/Sentry/SentryAppStartTrackingIntegration.m; sourceTree = ""; }; + AE6C15F539BEE4CFF8462F8C4C1F539B /* SentryClient+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryClient+Private.h"; path = "Sources/Sentry/include/SentryClient+Private.h"; sourceTree = ""; }; + AE74D23E7EF85AE415B3A683D9CC5C31 /* SentryExtraPackages.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryExtraPackages.h; path = Sources/Sentry/include/SentryExtraPackages.h; sourceTree = ""; }; + AED3FF866171BE6D1B84822B6AD1D03C /* Sentry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sentry.release.xcconfig; sourceTree = ""; }; AEE178F589061D15708753D9A179E2A1 /* MIKMIDIClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIClock.h; path = Source/MIKMIDIClock.h; sourceTree = ""; }; AF41F1AC3465584EF871191F0D8FBB1B /* Pods-Hammerspoon-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Hammerspoon-dummy.m"; sourceTree = ""; }; - B092B48DF9CEABE76B08122C6C9C5A65 /* SentrySubClassFinder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySubClassFinder.h; path = Sources/Sentry/include/SentrySubClassFinder.h; sourceTree = ""; }; + AFDAAC10BE35358D509B630C8414DDF7 /* SentryNSNotificationCenterWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSNotificationCenterWrapper.m; path = Sources/Sentry/SentryNSNotificationCenterWrapper.m; sourceTree = ""; }; + B03D0F765739BABC924DB4163592AD11 /* SentryId.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryId.swift; path = Sources/Swift/Core/Protocol/SentryId.swift; sourceTree = ""; }; B0C96EBCF6DF566F8AD90E6A27644614 /* SUVersionComparisonProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUVersionComparisonProtocol.h; path = Sparkle.framework/Versions/B/Headers/SUVersionComparisonProtocol.h; sourceTree = ""; }; - B19BC58FBEC2863E71C2862FDCD72983 /* SentrySpanId.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanId.m; path = Sources/Sentry/SentrySpanId.m; sourceTree = ""; }; + B0DEAD6A40976ADF39177FF5C3368ECE /* SentryProfilerState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfilerState.h; path = Sources/Sentry/include/SentryProfilerState.h; sourceTree = ""; }; + B100F93931218F4CCC7AA0F468B65B27 /* SentryCrashUUIDConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashUUIDConversion.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashUUIDConversion.h; sourceTree = ""; }; + B18BF0A45152AE67AD7CCB3B1B2D9459 /* SentryCrashCPU_x86_32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_x86_32.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_x86_32.c; sourceTree = ""; }; B1CD29CD7DB33C3F051C16EF7D89E21A /* MIKMIDIProgramChangeCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIProgramChangeCommand.h; path = Source/MIKMIDIProgramChangeCommand.h; sourceTree = ""; }; B1D4029013299DFFFF40058BE4139C40 /* MIKMIDISystemExclusiveCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISystemExclusiveCommand.m; path = Source/MIKMIDISystemExclusiveCommand.m; sourceTree = ""; }; - B28238865833B36D3ED8E6ADC5884B96 /* SentryUIEventTrackerMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIEventTrackerMode.h; path = Sources/Sentry/include/SentryUIEventTrackerMode.h; sourceTree = ""; }; + B1EC6104EB05DF5001CE063BDC2968A9 /* SentryCrashString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashString.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashString.h; sourceTree = ""; }; + B21740BEE120420515F88CB36EB4E7B2 /* SentryCrashWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashWrapper.h; path = Sources/Sentry/include/SentryCrashWrapper.h; sourceTree = ""; }; B28A4D71BC04B1694C7A281176FC21E0 /* GCDAsyncSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDAsyncSocket.m; path = Source/GCD/GCDAsyncSocket.m; sourceTree = ""; }; - B2DD1CA88D6299A643B84406A4D04DD7 /* SentryRRWebEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebEvent.swift; sourceTree = ""; }; - B2E9730523C6D811F54C48AA80470EA0 /* SentryDiscardReasonMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDiscardReasonMapper.h; path = Sources/Sentry/include/SentryDiscardReasonMapper.h; sourceTree = ""; }; - B2FB74BC40327781D5FAC957AA284242 /* SentryClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryClient.h; path = Sources/Sentry/Public/SentryClient.h; sourceTree = ""; }; - B361147BC7C979EB189D29E3C9759832 /* UIImageHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImageHelper.swift; path = Sources/Swift/Tools/UIImageHelper.swift; sourceTree = ""; }; - B3B6A92FBB2385DF304038245C985969 /* SentryProfiler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfiler.mm; path = Sources/Sentry/SentryProfiler.mm; sourceTree = ""; }; - B460381718BE835C1B59647AEF517C41 /* SentryScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScreenshot.m; path = Sources/Sentry/SentryScreenshot.m; sourceTree = ""; }; + B2C45863BCD0D25D16453728AE2F4064 /* SentryANRTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryANRTrackingIntegration.h; path = Sources/Sentry/include/SentryANRTrackingIntegration.h; sourceTree = ""; }; + B35A0966B65DB16054066AA015E1677D /* SentryEventDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryEventDecoder.swift; path = Sources/Swift/Protocol/Codable/SentryEventDecoder.swift; sourceTree = ""; }; + B398234C45BBBDEEF37448D697DF91A9 /* SentryNSURLRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSURLRequest.h; path = Sources/Sentry/include/SentryNSURLRequest.h; sourceTree = ""; }; + B3D46ABFCAEA12066A55E4802173859B /* SentryCrashDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDebug.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashDebug.h; sourceTree = ""; }; + B42A3EF716427D6B5B709CD87D5E171B /* SentryUserCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserCodable.swift; path = Sources/Swift/Protocol/Codable/SentryUserCodable.swift; sourceTree = ""; }; + B45463C44779423861F8CC9A10EC1DE3 /* SentryInAppLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryInAppLogic.m; path = Sources/Sentry/SentryInAppLogic.m; sourceTree = ""; }; B468504995BA4E7933855D10AD1C48C5 /* ASCIImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ASCIImage-prefix.pch"; sourceTree = ""; }; - B53C405E80F37BC880FACE2AB1597AB2 /* SentryReplayOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayOptions.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayOptions.swift; sourceTree = ""; }; - B5989B4C5A785355A33EF2AABB3FED42 /* SentrySampling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySampling.h; path = Sources/Sentry/include/SentrySampling.h; sourceTree = ""; }; + B46ED8FE1059606448A598FAFA916B0D /* SentryFramesTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFramesTrackingIntegration.m; path = Sources/Sentry/SentryFramesTrackingIntegration.m; sourceTree = ""; }; + B4B51596D6FEA1B245A3E64A6B90B049 /* SentryCrashReportStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportStore.h; path = Sources/SentryCrash/Recording/SentryCrashReportStore.h; sourceTree = ""; }; + B507ED4338B1FC568FACFD979A642CAD /* SentryDefaultViewRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryDefaultViewRenderer.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryDefaultViewRenderer.swift; sourceTree = ""; }; + B592BDDEDC3B796CD7CDA4B41FDB78BB /* SentryTransactionNameSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryTransactionNameSource.swift; path = Sources/Swift/Core/Integrations/Performance/SentryTransactionNameSource.swift; sourceTree = ""; }; + B5A63DCE4981065611C31C7EEDE8BD21 /* SentryDefaultMaskRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryDefaultMaskRenderer.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryDefaultMaskRenderer.swift; sourceTree = ""; }; + B5E0D3724E4DDE5EC0334CDA4A188BDE /* SentryScopeObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScopeObserver.h; path = Sources/Sentry/include/SentryScopeObserver.h; sourceTree = ""; }; + B6342F723012AF8852AC4F1966C63194 /* SentryGeo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryGeo.m; path = Sources/Sentry/SentryGeo.m; sourceTree = ""; }; B64EC76C48BA328809DAD17AB9C9724D /* SRMutex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRMutex.m; path = SocketRocket/Internal/Utilities/SRMutex.m; sourceTree = ""; }; - B6813A12F575957A167C88033E5FD96A /* SentryCrashMonitor_System.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_System.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.h; sourceTree = ""; }; - B6AE3F999716A927636D5C9486818CDD /* SentryRRWebTouchEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebTouchEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebTouchEvent.swift; sourceTree = ""; }; - B6EBF2BDD6C4B322A9071E3EBED06C8E /* SentryDataCategoryMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDataCategoryMapper.m; path = Sources/Sentry/SentryDataCategoryMapper.m; sourceTree = ""; }; - B700B370455A4388251774BCCB5DE117 /* SentryTraceContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceContext.h; path = Sources/Sentry/Public/SentryTraceContext.h; sourceTree = ""; }; - B72FB11EB76D7F8AB731A62DDAD10E8B /* SentryCrashPlatformSpecificDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashPlatformSpecificDefines.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashPlatformSpecificDefines.h; sourceTree = ""; }; - B731B7DD93C355641B6D8EA4107E08A0 /* SentryTransactionContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransactionContext.h; path = Sources/Sentry/Public/SentryTransactionContext.h; sourceTree = ""; }; + B67906939A2348172FE9659844C6747A /* SentryUserFeedback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUserFeedback.h; path = Sources/Sentry/Public/SentryUserFeedback.h; sourceTree = ""; }; + B73F79C8DF2CF94E0A214C93BE0C8AF7 /* SentryEnvelopeAttachmentHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelopeAttachmentHeader.m; path = Sources/Sentry/SentryEnvelopeAttachmentHeader.m; sourceTree = ""; }; B771A3598FAAD66A8DD42FCE854B8CB9 /* HTTPConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPConnection.h; path = Core/HTTPConnection.h; sourceTree = ""; }; - B7786342F5239BB026883A01DB4C2A79 /* SentryCrashUUIDConversion.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashUUIDConversion.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashUUIDConversion.c; sourceTree = ""; }; - B781C0EFB3D1CAA61B9F9CEB608094DE /* SentryCrashCPU_Apple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashCPU_Apple.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_Apple.h; sourceTree = ""; }; - B7BBAB530A555954C19FC09FF62364AB /* SentryANRTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryANRTracker.m; path = Sources/Sentry/SentryANRTracker.m; sourceTree = ""; }; - B7D631357B9671D5C06D222EEC51B8F4 /* SentryOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryOptions.h; path = Sources/Sentry/Public/SentryOptions.h; sourceTree = ""; }; + B78012F8184B73CD5BA07D024CD7C475 /* SentryMechanism.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMechanism.m; path = Sources/Sentry/SentryMechanism.m; sourceTree = ""; }; + B7B3627211F504E596A425413F11F97A /* SentryNSErrorCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryNSErrorCodable.swift; path = Sources/Swift/Protocol/Codable/SentryNSErrorCodable.swift; sourceTree = ""; }; B7E72463E5410ABB781714E60E75E464 /* MIKMIDIPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPrivate.h; path = Source/MIKMIDIPrivate.h; sourceTree = ""; }; - B8AD64AE9A8DDC40E008FF384284ECAD /* SentryCrashStackCursor_MachineContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor_MachineContext.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_MachineContext.h; sourceTree = ""; }; - B8BBDF85CF1F94AC96F3CDE4A1D8A741 /* SentryScreenFrames.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScreenFrames.m; path = Sources/Sentry/SentryScreenFrames.m; sourceTree = ""; }; - B8C97C11EBA352B28EAE1EB5796C4BE9 /* SentrySpanId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanId.h; path = Sources/Sentry/Public/SentrySpanId.h; sourceTree = ""; }; - B8E7355FA8FE038F157474DC6648B349 /* SentryMachLogging.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentryMachLogging.cpp; path = Sources/Sentry/SentryMachLogging.cpp; sourceTree = ""; }; - B919C4EC7E2F5568D545C90A10C7044A /* SentryMeasurementValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMeasurementValue.h; path = Sources/Sentry/include/SentryMeasurementValue.h; sourceTree = ""; }; + B7F9C204A84B9AD912DBC085F2A35F07 /* SentryWithoutUIKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWithoutUIKit.h; path = Sources/Sentry/Public/SentryWithoutUIKit.h; sourceTree = ""; }; + B84B3AF41AD3E766A8BDE34F66A1D4F3 /* SentryDiscardReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDiscardReason.h; path = Sources/Sentry/include/SentryDiscardReason.h; sourceTree = ""; }; + B8EDF710824EDFA7FCBDFC684A1751BC /* SentryCrashMach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMach.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMach.h; sourceTree = ""; }; + B8EF53651663A34C25FC46C6814C0A26 /* SentryMeasurementUnit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMeasurementUnit.h; path = Sources/Sentry/Public/SentryMeasurementUnit.h; sourceTree = ""; }; + B9039BCB072659E5080CF899BF027D8C /* HTTPHeaderSanitizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaderSanitizer.swift; path = Sources/Swift/Core/Tools/HTTPHeaderSanitizer.swift; sourceTree = ""; }; + B93A05C04A80D55F1AC0267A538409EF /* SentryEnvelope.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelope.m; path = Sources/Sentry/SentryEnvelope.m; sourceTree = ""; }; B945A3848C7CF183A6CD61FE0D141115 /* DDOSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDOSLogger.m; path = Sources/CocoaLumberjack/DDOSLogger.m; sourceTree = ""; }; - BA6B9607AB207FAE0B320D45203DD324 /* SentryUIEventTrackerTransactionMode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIEventTrackerTransactionMode.m; path = Sources/Sentry/SentryUIEventTrackerTransactionMode.m; sourceTree = ""; }; + B98C7CD492E48CAA488CDB124B649F1B /* SentryDispatchQueueWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchQueueWrapper.h; path = Sources/Sentry/include/SentryDispatchQueueWrapper.h; sourceTree = ""; }; + B9989CED3E978FD838B8906F4484F0E6 /* SentryBreadcrumb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBreadcrumb.m; path = Sources/Sentry/SentryBreadcrumb.m; sourceTree = ""; }; + BA461260B836E1856DD2B51049D06618 /* PrivateSentrySDKOnly.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PrivateSentrySDKOnly.h; path = Sources/Sentry/include/HybridPublic/PrivateSentrySDKOnly.h; sourceTree = ""; }; + BA57C65239884442883C333375A3C57C /* SentryUserFeedbackIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUserFeedbackIntegration.m; path = Sources/Sentry/SentryUserFeedbackIntegration.m; sourceTree = ""; }; + BA5942D9455C32587D025AFF9656C9A8 /* SentryViewControllerBreadcrumbTracking.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryViewControllerBreadcrumbTracking.swift; path = Sources/Swift/Core/Protocol/SentryViewControllerBreadcrumbTracking.swift; sourceTree = ""; }; BA92B27E597DACDA2276CC472B98334D /* HTTPDataResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPDataResponse.h; path = Core/Responses/HTTPDataResponse.h; sourceTree = ""; }; - BAA26206547391D1E4720208789500AA /* SentryPerformanceTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPerformanceTracker.m; path = Sources/Sentry/SentryPerformanceTracker.m; sourceTree = ""; }; - BAA87EED89345DF05E322A1CA8DFCD9D /* SentryTraceHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTraceHeader.m; path = Sources/Sentry/SentryTraceHeader.m; sourceTree = ""; }; BAB583CA1AE3BE19889A2D01E1941926 /* SPUUpdater.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdater.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdater.h; sourceTree = ""; }; BACEC86247C2D652E699F492A8816537 /* MIKMIDIMetaTimeSignatureEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaTimeSignatureEvent.m; path = Source/MIKMIDIMetaTimeSignatureEvent.m; sourceTree = ""; }; - BB16E5BCFA8E07C4717EA91099C9BC4A /* SentryNSTimerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSTimerFactory.m; path = Sources/Sentry/SentryNSTimerFactory.m; sourceTree = ""; }; BB5920AC822770B7C25DC50F2D9808CE /* MIKMIDICompilerCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDICompilerCompatibility.h; path = Source/MIKMIDICompilerCompatibility.h; sourceTree = ""; }; - BB64F49CC4970288EEE9D679DB445E65 /* SentryCrashBinaryImageCache.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashBinaryImageCache.c; path = Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.c; sourceTree = ""; }; BB70962A26769963C9814D1B38668169 /* SRSIMDHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSIMDHelpers.h; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.h; sourceTree = ""; }; BC2A098E7EE2E765710251A10465AAE3 /* MIKMIDITempoEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDITempoEvent.m; path = Source/MIKMIDITempoEvent.m; sourceTree = ""; }; BC2D1326B0C7076D97E0DBD731E46EB4 /* MIKMIDIMetaLyricEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaLyricEvent.m; path = Source/MIKMIDIMetaLyricEvent.m; sourceTree = ""; }; + BC8EC61D3FC344869A3B369946567D11 /* SentryMechanism.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMechanism.h; path = Sources/Sentry/Public/SentryMechanism.h; sourceTree = ""; }; BCAED0A39006EA29797534B9445A9D76 /* SRHTTPConnectMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHTTPConnectMessage.h; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h; sourceTree = ""; }; - BD05C0B2FD5A930246BDFE9D3DB3B37E /* SentryProfileTimeseries.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfileTimeseries.h; path = Sources/Sentry/include/SentryProfileTimeseries.h; sourceTree = ""; }; BD1E20E491C7915FFE70AB39BCD25636 /* MIKMIDIClientDestinationEndpoint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIClientDestinationEndpoint.m; path = Source/MIKMIDIClientDestinationEndpoint.m; sourceTree = ""; }; + BD3511636338F6815546F70E8554408C /* SentryCrashDefaultBinaryImageProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDefaultBinaryImageProvider.h; path = Sources/Sentry/include/SentryCrashDefaultBinaryImageProvider.h; sourceTree = ""; }; BD5FD0ED28F5B03F8693B93FCA798D73 /* MIKMIDIMetaEvent_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaEvent_SubclassMethods.h; path = Source/MIKMIDIMetaEvent_SubclassMethods.h; sourceTree = ""; }; - BDBE3DDC57B0A43545CE597515074570 /* SentryTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransport.h; path = Sources/Sentry/include/SentryTransport.h; sourceTree = ""; }; - BEB12B16B65038501D6EB7D96A36391B /* SentrySamplerDecision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySamplerDecision.h; path = Sources/Sentry/include/SentrySamplerDecision.h; sourceTree = ""; }; - BF27D256DE5D7B1EBD7CDEE1379C0FF7 /* SentryDelayedFramesTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDelayedFramesTracker.m; path = Sources/Sentry/SentryDelayedFramesTracker.m; sourceTree = ""; }; + BE391DB4728D2CA5CEC5C03EA5E17122 /* SentryQueueableRequestManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryQueueableRequestManager.m; path = Sources/Sentry/SentryQueueableRequestManager.m; sourceTree = ""; }; + BEA5AB62CCE589AE5F7C3ABB35E84D2A /* PrivateSentrySDKOnly.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivateSentrySDKOnly.mm; path = Sources/Sentry/PrivateSentrySDKOnly.mm; sourceTree = ""; }; BF2AB6125CC6084004F9016FA3EA7FA2 /* MIKMIDIPolyphonicKeyPressureCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIPolyphonicKeyPressureCommand.m; path = Source/MIKMIDIPolyphonicKeyPressureCommand.m; sourceTree = ""; }; - BF3FB0C6807A650937FD75BBBFA85AC1 /* SentryViewPhotographer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryViewPhotographer.swift; path = Sources/Swift/Tools/SentryViewPhotographer.swift; sourceTree = ""; }; - BF62C2E79B23C4ACEB7B0B22408309CD /* SentrySystemWrapper.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentrySystemWrapper.mm; path = Sources/Sentry/SentrySystemWrapper.mm; sourceTree = ""; }; + BF32B9A7EE205072661EFE7A2480EFE2 /* SentryUserFeedbackFormController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackFormController.swift; path = Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackFormController.swift; sourceTree = ""; }; BF667EDBB3DA39863EDE12CAA2B28907 /* PARImage+ASCIIInput.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "PARImage+ASCIIInput.m"; path = "Core/PARImage+ASCIIInput.m"; sourceTree = ""; }; BF76058C6035947C95DF0E0AB516A531 /* NSUIApplication+MIKMIDI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSUIApplication+MIKMIDI.h"; path = "Source/NSUIApplication+MIKMIDI.h"; sourceTree = ""; }; - BFEE70C887CB1F71071471128E4A27CA /* SentryViewScreenshotProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryViewScreenshotProvider.swift; path = Sources/Swift/Tools/SentryViewScreenshotProvider.swift; sourceTree = ""; }; C00FF6FD698FA69CCE76C46B9EC0F13F /* DDAbstractDatabaseLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAbstractDatabaseLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDAbstractDatabaseLogger.h; sourceTree = ""; }; C04E40D0463E2181F17F8207D3FD36CF /* SRPinningSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRPinningSecurityPolicy.m; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.m; sourceTree = ""; }; - C0566BE5446E14D02EF3166D8742A54E /* SentryEnabledFeaturesBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryEnabledFeaturesBuilder.swift; path = Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift; sourceTree = ""; }; - C0767A431A76CC24DF4CDF0F70E33FFC /* SentryCrashThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashThread.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashThread.h; sourceTree = ""; }; - C0C3CC1F137AA503251BD2AA1E6F778E /* SentryInternalSerializable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalSerializable.h; path = Sources/Sentry/include/SentryInternalSerializable.h; sourceTree = ""; }; + C07339D3D8A51AE282986026D39FFE23 /* SentryViewScreenshotProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryViewScreenshotProvider.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryViewScreenshotProvider.swift; sourceTree = ""; }; + C0C717F70AAC5FD32FA303A355692468 /* SentryDebugImageProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDebugImageProvider.h; path = Sources/Sentry/Public/SentryDebugImageProvider.h; sourceTree = ""; }; + C0DA99FF20D6602D9E3BE42E87CD38E0 /* SentrySwiftAsyncIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwiftAsyncIntegration.h; path = Sources/Sentry/include/SentrySwiftAsyncIntegration.h; sourceTree = ""; }; + C115A9F676A6B8E2F92A53A09EAD3091 /* SentryAppStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppStateManager.h; path = Sources/Sentry/include/SentryAppStateManager.h; sourceTree = ""; }; C12D845A1CC6551AA46F001A4BFE8D7F /* SRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRConstants.m; path = SocketRocket/Internal/SRConstants.m; sourceTree = ""; }; - C17007F1F4F3542FA3D644E0C07DFF4B /* SentryUIApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIApplication.h; path = Sources/Sentry/include/SentryUIApplication.h; sourceTree = ""; }; + C16FB91F92FCF7EE5B278BB9AAD6DDB1 /* SentryException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryException.m; path = Sources/Sentry/SentryException.m; sourceTree = ""; }; C1844E20A839D34185D43C9C6CF6892C /* MIKMIDISynthesizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISynthesizer.m; path = Source/MIKMIDISynthesizer.m; sourceTree = ""; }; - C22B6113525CAE7948EB1F4363FA4FC5 /* SentryPixelBuffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryPixelBuffer.swift; path = Sources/Swift/Integrations/SessionReplay/SentryPixelBuffer.swift; sourceTree = ""; }; - C239CE4E1013EA661055180332FDD86A /* SentryCrashMonitor_MachException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_MachException.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_MachException.h; sourceTree = ""; }; + C192767F2A4AB5D9C5EE41EBA673F032 /* SentryEventCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryEventCodable.swift; path = Sources/Swift/Protocol/Codable/SentryEventCodable.swift; sourceTree = ""; }; + C1993EEEA8310DAF1EDFB9DD5D060C7A /* SentryANRTrackerV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryANRTrackerV1.m; path = Sources/Sentry/SentryANRTrackerV1.m; sourceTree = ""; }; + C1F18BD9D2EDB8D81CF9CF6796E591E4 /* SentryEnvelope+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryEnvelope+Private.h"; path = "Sources/Sentry/include/SentryEnvelope+Private.h"; sourceTree = ""; }; + C1F87D6C0D33933FE6DCFFD0A7105E4A /* SentryCrashMonitor_NSException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_NSException.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_NSException.h; sourceTree = ""; }; C23ECB572E61FFE01D598EB4E8152380 /* HTTPRedirectResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPRedirectResponse.h; path = Core/Responses/HTTPRedirectResponse.h; sourceTree = ""; }; - C249610D89B6543D6AE0CCE7384171F1 /* SentryEnvelope.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEnvelope.m; path = Sources/Sentry/SentryEnvelope.m; sourceTree = ""; }; C251B86DA142E465F4DDED9F3D4235D9 /* WebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = WebSocket.m; path = Core/WebSocket.m; sourceTree = ""; }; C261436D14052AE3C35F240BCD155CAC /* CocoaLumberjack */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = CocoaLumberjack; path = libCocoaLumberjack.a; sourceTree = BUILT_PRODUCTS_DIR; }; + C2AEC4A7F86D4B04ED290F84C4F3F1A8 /* StringExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringExtensions.swift; path = Sources/Swift/Core/Extensions/StringExtensions.swift; sourceTree = ""; }; + C2D59258969035EB099022748EA11377 /* SentryUserFeedbackFormViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackFormViewModel.swift; path = Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackFormViewModel.swift; sourceTree = ""; }; C2D924384BDE40B5F9255F8541416BC1 /* SRIOConsumerPool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumerPool.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h; sourceTree = ""; }; - C2F0BB4D3CAC40E54F995CE1A1CFE38B /* SentryLevelHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLevelHelper.m; path = Sources/Sentry/SentryLevelHelper.m; sourceTree = ""; }; - C308E3127DA95097A40019F21A122569 /* SentryANRTrackerV2Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryANRTrackerV2Delegate.swift; path = Sources/Swift/Integrations/ANR/SentryANRTrackerV2Delegate.swift; sourceTree = ""; }; + C34BC0893A5319CBEDC74F1CF83EFEB6 /* SentryTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransaction.h; path = Sources/Sentry/include/SentryTransaction.h; sourceTree = ""; }; C3C0C431DAD109DCB31F56A6A04807B7 /* MIKMIDIResponder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIResponder.h; path = Source/MIKMIDIResponder.h; sourceTree = ""; }; + C3D6FEAF72DB40ACDB634885253F02CE /* SwizzleClassNameExclude.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwizzleClassNameExclude.swift; path = Sources/Swift/Core/Integrations/Performance/SwizzleClassNameExclude.swift; sourceTree = ""; }; + C3E4A324E1C9C10A80A3F94A8227322D /* SentryWatchdogTerminationTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationTrackingIntegration.m; path = Sources/Sentry/SentryWatchdogTerminationTrackingIntegration.m; sourceTree = ""; }; C419E2CDB019AEEA1BC2F89D332C4F70 /* HTTPConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPConnection.m; path = Core/HTTPConnection.m; sourceTree = ""; }; - C4BBE5B53EC30700D1B42981485562B5 /* SentryUser+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryUser+Private.h"; path = "Sources/Sentry/include/HybridPublic/SentryUser+Private.h"; sourceTree = ""; }; - C62B1FEE1E0EA5939844C3B1CFE86E63 /* SentryCrashMonitor_MachException.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor_MachException.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_MachException.c; sourceTree = ""; }; - C6B94D8169DB9B1DE0E0A3A75EF42CDC /* SentryInAppLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInAppLogic.h; path = Sources/Sentry/include/SentryInAppLogic.h; sourceTree = ""; }; - C6EBB9F015607F3132DD89A8A4739B3B /* SentryProfilerState+ObjCpp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryProfilerState+ObjCpp.h"; path = "Sources/Sentry/include/SentryProfilerState+ObjCpp.h"; sourceTree = ""; }; + C428B8116EAAA28CD94300AFED41D724 /* SentrySpanDataKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpanDataKey.m; path = Sources/Sentry/SentrySpanDataKey.m; sourceTree = ""; }; + C42A1F14CCFDCD30A11BCF25E8EA144E /* SentryTransactionContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransactionContext.h; path = Sources/Sentry/Public/SentryTransactionContext.h; sourceTree = ""; }; + C4BBB13FB47AE7ABC026F4407FCD7DD3 /* SentryANRTrackerV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryANRTrackerV2.h; path = Sources/Sentry/include/SentryANRTrackerV2.h; sourceTree = ""; }; + C4D6EFB2B1362021F1D712F86CF33CEF /* SentryProfiledTracerConcurrency.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfiledTracerConcurrency.mm; path = Sources/Sentry/Profiling/SentryProfiledTracerConcurrency.mm; sourceTree = ""; }; + C58494212C3114ECFC538790B00F3137 /* SentryExtraPackages.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryExtraPackages.m; path = Sources/Sentry/SentryExtraPackages.m; sourceTree = ""; }; + C623F9BD27CF3F02A1CA571BE5BC8D56 /* SentryUIEventTrackerTransactionMode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIEventTrackerTransactionMode.m; path = Sources/Sentry/SentryUIEventTrackerTransactionMode.m; sourceTree = ""; }; + C65029C2756339F4165691E5C7F116EC /* SentryCrashExceptionApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashExceptionApplication.h; path = Sources/Sentry/Public/SentryCrashExceptionApplication.h; sourceTree = ""; }; C6FF17B0A7EC7476265242C8863FFC42 /* DDFileLogger+Buffering.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DDFileLogger+Buffering.m"; path = "Sources/CocoaLumberjack/Extensions/DDFileLogger+Buffering.m"; sourceTree = ""; }; - C7065D21AEF1F441865BB047177D1ED5 /* SentryCrashReportFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFilter.h; path = Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilter.h; sourceTree = ""; }; + C78FBA240F2965B3B4E28D3EDDE8995A /* SentryUserAccess.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUserAccess.h; path = Sources/Sentry/include/SentryUserAccess.h; sourceTree = ""; }; + C796AADF925BE2B926ABA6BD4279FEDC /* SentrySessionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySessionTracker.m; path = Sources/Sentry/SentrySessionTracker.m; sourceTree = ""; }; C7BABCA4CD663FC5A91A269A0247B07B /* SRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRConstants.h; path = SocketRocket/Internal/SRConstants.h; sourceTree = ""; }; - C7C92457ADA8E86703615DEEEE2EC502 /* SentryDictionaryDeepSearch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDictionaryDeepSearch.m; path = Sources/SentryCrash/Reporting/Filters/Tools/SentryDictionaryDeepSearch.m; sourceTree = ""; }; C7DB7E3E3283AFBE47ADA5332BA30706 /* MIKMIDIControlChangeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIControlChangeEvent.h; path = Source/MIKMIDIControlChangeEvent.h; sourceTree = ""; }; - C8204C9DA2015F1DC85B3CEF487DB968 /* SentryCrashCPU_arm.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashCPU_arm.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm.c; sourceTree = ""; }; - C8317A0D0EF05D69F1DADE6ACC7A0E6A /* SentrySampleDecision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySampleDecision.h; path = Sources/Sentry/Public/SentrySampleDecision.h; sourceTree = ""; }; + C823581AED4553C5C6E46D9AA85B4C48 /* SentryUserFeedbackThemeConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackThemeConfiguration.swift; path = Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackThemeConfiguration.swift; sourceTree = ""; }; + C82B4EE1530BCF01766CB046EEF27F35 /* SentryUIViewControllerPerformanceTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIViewControllerPerformanceTracker.h; path = Sources/Sentry/include/SentryUIViewControllerPerformanceTracker.h; sourceTree = ""; }; + C88092370104A9779634B014B6CFC897 /* SentryProfilerState+ObjCpp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryProfilerState+ObjCpp.h"; path = "Sources/Sentry/include/SentryProfilerState+ObjCpp.h"; sourceTree = ""; }; C89629A69B3CC56BE474C28C8FBFBE8F /* MIKMIDIErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIErrors.m; path = Source/MIKMIDIErrors.m; sourceTree = ""; }; - C8EA855EDB6A2D904ABC2B9400FC5A87 /* SentryCrashID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashID.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashID.h; sourceTree = ""; }; + C8F4F614F87D25048167240FF1310A1C /* SentryDebugMeta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDebugMeta.h; path = Sources/Sentry/Public/SentryDebugMeta.h; sourceTree = ""; }; C918A36C05882B46F306016F09316ACE /* MIKMIDIMappingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMappingManager.h; path = Source/MIKMIDIMappingManager.h; sourceTree = ""; }; C92DD161BB2424E19D2BD9FE1E5BB706 /* MIKMIDIPolyphonicKeyPressureEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIPolyphonicKeyPressureEvent.m; path = Source/MIKMIDIPolyphonicKeyPressureEvent.m; sourceTree = ""; }; - C961A787FB2361ADF25E9732AE6B6ABD /* SentryScreenshotIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScreenshotIntegration.h; path = Sources/Sentry/include/SentryScreenshotIntegration.h; sourceTree = ""; }; - C9733620410EF3B5782C9A7CFB99A3B0 /* SentryCrashReportSink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashReportSink.m; path = Sources/Sentry/SentryCrashReportSink.m; sourceTree = ""; }; - C98440DA8D164B0F0C57A3856ED8D8F1 /* SentrySDK+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySDK+Private.h"; path = "Sources/Sentry/include/SentrySDK+Private.h"; sourceTree = ""; }; C9BB82C25C4B233D8794576EE0DBC49E /* MIKMIDISequencer+MIKMIDIPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MIKMIDISequencer+MIKMIDIPrivate.h"; path = "Source/MIKMIDISequencer+MIKMIDIPrivate.h"; sourceTree = ""; }; - CA1D0C8F1DAC9BC7FD78C68101956EF6 /* SentryUIApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIApplication.m; path = Sources/Sentry/SentryUIApplication.m; sourceTree = ""; }; - CA2114D14C475781B89A8C1390ECD686 /* SentryNSNotificationCenterWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSNotificationCenterWrapper.m; path = Sources/Sentry/SentryNSNotificationCenterWrapper.m; sourceTree = ""; }; - CA3491F9FB1375C03F8DDC73930BF1D6 /* SentryTraceContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTraceContext.m; path = Sources/Sentry/SentryTraceContext.m; sourceTree = ""; }; + C9CB2432A7085A0A304B9D1C0C5FA4D4 /* SentryDispatchFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchFactory.h; path = Sources/Sentry/include/SentryDispatchFactory.h; sourceTree = ""; }; + C9EA8DFF457592E0521C7DAF988E0AE5 /* SentryCrashSignalInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashSignalInfo.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashSignalInfo.h; sourceTree = ""; }; CA6EC70B803A92E9C2FCA7DD54124AF4 /* SRProxyConnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRProxyConnect.h; path = SocketRocket/Internal/Proxy/SRProxyConnect.h; sourceTree = ""; }; - CAF0D754B1FFB8825EA1443E4DBF9316 /* SentryUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUser.h; path = Sources/Sentry/Public/SentryUser.h; sourceTree = ""; }; + CADDE9A9647F91E7D151ABF1EAAB7037 /* SentryHttpStatusCodeRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHttpStatusCodeRange.m; path = Sources/Sentry/SentryHttpStatusCodeRange.m; sourceTree = ""; }; CB10335A8CD8F95AB09C700E2790029E /* MultipartMessageHeaderField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartMessageHeaderField.h; path = Core/Mime/MultipartMessageHeaderField.h; sourceTree = ""; }; - CBB2C1F5D10BEBE1E6A14A285137D1E4 /* BucketsMetricsAggregator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BucketsMetricsAggregator.swift; path = Sources/Swift/Metrics/BucketsMetricsAggregator.swift; sourceTree = ""; }; - CC072351C6CC94FA790ABD3D97327DF9 /* SentryMigrateSessionInit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMigrateSessionInit.h; path = Sources/Sentry/include/SentryMigrateSessionInit.h; sourceTree = ""; }; - CCA342C607AFB7558FC0346EF59594DE /* SentryStackBounds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryStackBounds.hpp; path = Sources/Sentry/include/SentryStackBounds.hpp; sourceTree = ""; }; + CB5B404568287168B94D32C501CF7758 /* SentryStacktrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryStacktrace.h; path = Sources/Sentry/Public/SentryStacktrace.h; sourceTree = ""; }; + CB5C1A8C47AA551F58EC39F9B5BDD214 /* SentryBaggage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBaggage.m; path = Sources/Sentry/SentryBaggage.m; sourceTree = ""; }; + CC5BF7FF018EDD63174F884B0299AA74 /* SentryCrashExceptionApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashExceptionApplication.m; path = Sources/Sentry/SentryCrashExceptionApplication.m; sourceTree = ""; }; + CCD5A1E882F2F945A406879F94E539E7 /* SentryCrashPlatformSpecificDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashPlatformSpecificDefines.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashPlatformSpecificDefines.h; sourceTree = ""; }; + CD7F2CFB8DB56B7F548A712102E76789 /* SentryBreadcrumbDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBreadcrumbDelegate.h; path = Sources/Sentry/include/SentryBreadcrumbDelegate.h; sourceTree = ""; }; CDD6A528EEF81F6568DCCCCADDC5E5E3 /* CocoaLumberjack-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaLumberjack-dummy.m"; sourceTree = ""; }; - CE40D474002E563A7719600E2768FB4E /* SentryTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTransaction.h; path = Sources/Sentry/include/SentryTransaction.h; sourceTree = ""; }; + CDE2799EC60774AF37D6EE071244A705 /* SentryCrashMonitor_CPPException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_CPPException.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.h; sourceTree = ""; }; CE45A20CFA34B7A0688891154CA18A0A /* MIKMIDI */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = MIKMIDI; path = libMIKMIDI.a; sourceTree = BUILT_PRODUCTS_DIR; }; - CE4A38DC078003E8E69BA3A210BDC45D /* CounterMetric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CounterMetric.swift; path = Sources/Swift/Metrics/CounterMetric.swift; sourceTree = ""; }; - CE56D423CA52273FA1E301F5D877E103 /* SentryEnvelopeRateLimit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeRateLimit.h; path = Sources/Sentry/include/SentryEnvelopeRateLimit.h; sourceTree = ""; }; - CE5DC823D881449DC09DDBC2313419CB /* SentryCrashDefaultMachineContextWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashDefaultMachineContextWrapper.m; path = Sources/Sentry/SentryCrashDefaultMachineContextWrapper.m; sourceTree = ""; }; - CE6EDC7E18E7AEBC9AF4C3A9F4AC51DD /* SentryANRTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryANRTrackingIntegration.m; path = Sources/Sentry/SentryANRTrackingIntegration.m; sourceTree = ""; }; - CEB0EF668E09C209F3F88C334AAE9856 /* SentryUIDeviceWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIDeviceWrapper.m; path = Sources/Sentry/SentryUIDeviceWrapper.m; sourceTree = ""; }; - CED24D58E07D4230C56147FFC1BAAA77 /* SentryRetryAfterHeaderParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRetryAfterHeaderParser.m; path = Sources/Sentry/SentryRetryAfterHeaderParser.m; sourceTree = ""; }; - CF7E10CC115C08E0CCA0B8C2045D55BE /* SentryCrashStackCursor_SelfThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashStackCursor_SelfThread.m; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.m; sourceTree = ""; }; - CF9FE4589744B663482372C4DC4C5DED /* SentrySystemWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySystemWrapper.h; path = Sources/Sentry/include/SentrySystemWrapper.h; sourceTree = ""; }; + CE4EBEEC29172F3F0BC6746337521897 /* SentryDisplayLinkWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDisplayLinkWrapper.h; path = Sources/Sentry/include/SentryDisplayLinkWrapper.h; sourceTree = ""; }; + CE73E9AD4131629352FB52E7DA588C11 /* SentrySwizzleWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySwizzleWrapper.m; path = Sources/Sentry/SentrySwizzleWrapper.m; sourceTree = ""; }; + CE986B0045E01CEBF67692FF3AAE6D94 /* SentryNSDictionarySanitize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSDictionarySanitize.h; path = Sources/Sentry/include/SentryNSDictionarySanitize.h; sourceTree = ""; }; + CED63A8241CEBFABCA543D7386B56B0E /* SentryEnvelopeItemType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeItemType.h; path = Sources/Sentry/include/HybridPublic/SentryEnvelopeItemType.h; sourceTree = ""; }; + CF0D45FE32476F1A1BC9CB244CF750D2 /* SentryCoreDataSwizzling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCoreDataSwizzling.h; path = Sources/Sentry/include/SentryCoreDataSwizzling.h; sourceTree = ""; }; + CF2359FFBE6F63197FB962A1D32CC764 /* SentryMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMessage.swift; path = Sources/Swift/Protocol/Codable/SentryMessage.swift; sourceTree = ""; }; + CF8FF95516B2F152E962F6C71C3ED8FB /* SentrySessionReplaySyncC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentrySessionReplaySyncC.c; path = Sources/Sentry/SentrySessionReplaySyncC.c; sourceTree = ""; }; CFF6421DE4DFF747AA5E89018265FB5E /* GCDAsyncSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDAsyncSocket.h; path = Source/GCD/GCDAsyncSocket.h; sourceTree = ""; }; - D01DEA6A488A5DD484B36D8E7915579B /* SentrySwiftAsyncIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySwiftAsyncIntegration.m; path = Sources/Sentry/SentrySwiftAsyncIntegration.m; sourceTree = ""; }; + D0179E9161467D79028511F818361982 /* SentryUncaughtNSExceptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUncaughtNSExceptions.m; path = Sources/Sentry/SentryUncaughtNSExceptions.m; sourceTree = ""; }; D032E95436882CA6ECA90FB922DBF041 /* MIKMIDIDevice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIDevice.m; path = Source/MIKMIDIDevice.m; sourceTree = ""; }; - D06A731A0261566C05CA30BD226EA77B /* SentryCrashDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDebug.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashDebug.h; sourceTree = ""; }; + D091905D5DFC8D1E70DE497E1D01DCCD /* SentrySamplingProfiler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SentrySamplingProfiler.cpp; path = Sources/Sentry/SentrySamplingProfiler.cpp; sourceTree = ""; }; D0A2A8B7EADD76FB00CA167067EFFC83 /* PSWebSocketNetworkThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSWebSocketNetworkThread.m; path = PocketSocket/PSWebSocketNetworkThread.m; sourceTree = ""; }; D0E9D4653D70BC0D04A09041E841DC3D /* PSWebSocketUTF8Decoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PSWebSocketUTF8Decoder.h; path = PocketSocket/PSWebSocketUTF8Decoder.h; sourceTree = ""; }; - D111501CA55B0511CC10065E04546EC8 /* SentryViewHierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryViewHierarchy.m; path = Sources/Sentry/SentryViewHierarchy.m; sourceTree = ""; }; - D122CD1624E8E327CA8210293C36E768 /* SentryCrashSignalInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashSignalInfo.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashSignalInfo.h; sourceTree = ""; }; - D1570417C9CCBF8CF1C9495525E81020 /* UIViewController+Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Sentry.h"; path = "Sources/Sentry/include/UIViewController+Sentry.h"; sourceTree = ""; }; + D10C154DCC4EB4534D4CC64FC1750F16 /* SentryCrashDefaultMachineContextWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashDefaultMachineContextWrapper.m; path = Sources/Sentry/SentryCrashDefaultMachineContextWrapper.m; sourceTree = ""; }; + D11D7A8CB26839CE3D0D488A84519F5C /* Locks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Locks.swift; path = Sources/Swift/Core/Extensions/Locks.swift; sourceTree = ""; }; D1626E41ADEADF114F1B496238C1581E /* MIKMIDIMetaSequenceEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaSequenceEvent.h; path = Source/MIKMIDIMetaSequenceEvent.h; sourceTree = ""; }; - D193BD18EF13A1C4DD75CAEBD2ADD7A4 /* Sentry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Sentry-prefix.pch"; sourceTree = ""; }; D1A1FB7C650A2F3A4EB6395938879495 /* PocketSocket */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = PocketSocket; path = libPocketSocket.a; sourceTree = BUILT_PRODUCTS_DIR; }; D1C609420D7B4F4A83097742A69BB86E /* ASCIImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ASCIImage.release.xcconfig; sourceTree = ""; }; D1CB0D70200ACA8090748F69D49324EF /* MIKMIDIMetronome.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetronome.m; path = Source/MIKMIDIMetronome.m; sourceTree = ""; }; + D1EF3BDAAC4CA8F686FDF7887BF26532 /* SentryRandom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRandom.h; path = Sources/Sentry/include/SentryRandom.h; sourceTree = ""; }; D20321AF541BC473BCCCE5D01E59001F /* MIKMIDIMetaTextEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaTextEvent.h; path = Source/MIKMIDIMetaTextEvent.h; sourceTree = ""; }; + D210B554E20E4A035B2898D255F0A365 /* SentryRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRequest.h; path = Sources/Sentry/Public/SentryRequest.h; sourceTree = ""; }; D227D41DE120A39AE10D358AEE6A6F3A /* DDData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDData.m; path = Core/Categories/DDData.m; sourceTree = ""; }; - D2296DE30F2F287E47237776F2A4987F /* SentryThreadState.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryThreadState.hpp; path = Sources/Sentry/include/SentryThreadState.hpp; sourceTree = ""; }; D260887EA6D5BBCE842DECC9CC7289B0 /* MIKMIDIPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPlayer.h; path = Source/MIKMIDIPlayer.h; sourceTree = ""; }; - D288E2BAB78EE1922C20BB1E84892D65 /* SentryInstallation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInstallation.h; path = Sources/Sentry/include/SentryInstallation.h; sourceTree = ""; }; + D290C44BD1A044F8C5EFBE02E3B262CB /* SentryDelayedFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDelayedFrame.m; path = Sources/Sentry/SentryDelayedFrame.m; sourceTree = ""; }; D295BB7D5E69C4C2F89CBD7C6BC948C6 /* DAVConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DAVConnection.h; path = Extensions/WebDAV/DAVConnection.h; sourceTree = ""; }; - D2C67CA6D51EF8AA03A69E3981D377F2 /* SentryCrashInstallation+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryCrashInstallation+Private.h"; path = "Sources/SentryCrash/Installations/SentryCrashInstallation+Private.h"; sourceTree = ""; }; - D2DAAD32527B05E5F93B4F504ECA4B48 /* SentryProfiledTracerConcurrency.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfiledTracerConcurrency.mm; path = Sources/Sentry/Profiling/SentryProfiledTracerConcurrency.mm; sourceTree = ""; }; - D2DF52B986595B4CECC7F4BF64A701C8 /* SentryBinaryImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBinaryImageCache.m; path = Sources/Sentry/SentryBinaryImageCache.m; sourceTree = ""; }; - D37474B523B58E0E54B0A02036C98ED0 /* SentryCrashReportConverter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportConverter.h; path = Sources/Sentry/include/SentryCrashReportConverter.h; sourceTree = ""; }; - D466BF7FC2664A3BD7974FE422AC5E51 /* SentryStatsdClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryStatsdClient.h; path = Sources/Sentry/include/SentryStatsdClient.h; sourceTree = ""; }; - D4728057230514E522E9B3EE21424811 /* NSMutableDictionary+Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableDictionary+Sentry.h"; path = "Sources/Sentry/include/NSMutableDictionary+Sentry.h"; sourceTree = ""; }; + D296C27301789D3757AB682A2CF42968 /* SentryEnvelopeItemHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEnvelopeItemHeader.h; path = Sources/Sentry/Public/SentryEnvelopeItemHeader.h; sourceTree = ""; }; + D3FD570912E77AB7BCCBB5C3A6E8F7F7 /* SentryCrashMachineContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMachineContext.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.h; sourceTree = ""; }; + D418462B04DDDA7D63F4BD1479B611B8 /* SentryTraceProfiler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceProfiler.h; path = Sources/Sentry/include/SentryTraceProfiler.h; sourceTree = ""; }; + D42942DBAC112680AC9219076B4DD29E /* SentryLaunchProfiling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryLaunchProfiling.m; path = Sources/Sentry/Profiling/SentryLaunchProfiling.m; sourceTree = ""; }; + D47E5153895B6B7A14604DABF446B044 /* SentryConcurrentRateLimitsDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryConcurrentRateLimitsDictionary.m; path = Sources/Sentry/SentryConcurrentRateLimitsDictionary.m; sourceTree = ""; }; + D4D42B04022071057D472D6A697EF9BA /* SentryCrashObjCApple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashObjCApple.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashObjCApple.h; sourceTree = ""; }; + D509789FAAB3D35278CEC34975C1AC73 /* SentryConcurrentRateLimitsDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryConcurrentRateLimitsDictionary.h; path = Sources/Sentry/include/SentryConcurrentRateLimitsDictionary.h; sourceTree = ""; }; D513CA96F29F44A4E6158DC7AC257404 /* MIKMIDICommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDICommand.h; path = Source/MIKMIDICommand.h; sourceTree = ""; }; - D549A908ECDBE0BB33C7DC5E539A6ACA /* SentrySamplingContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySamplingContext.h; path = Sources/Sentry/Public/SentrySamplingContext.h; sourceTree = ""; }; - D56051679D48037350F252332E0CA809 /* HTTPHeaderSanitizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaderSanitizer.swift; path = Sources/Swift/Tools/HTTPHeaderSanitizer.swift; sourceTree = ""; }; D58201D58497942CFA0790FF0D7A067A /* MIKMIDIMetaKeySignatureEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaKeySignatureEvent.m; path = Source/MIKMIDIMetaKeySignatureEvent.m; sourceTree = ""; }; - D5F106B2971AA1D20AAC0C7A34E7D760 /* SentryNetworkTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNetworkTrackingIntegration.m; path = Sources/Sentry/SentryNetworkTrackingIntegration.m; sourceTree = ""; }; + D58D07EE1B2F64368291080C9CE7638B /* SentryWatchdogTerminationLogic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationLogic.h; path = Sources/Sentry/include/SentryWatchdogTerminationLogic.h; sourceTree = ""; }; + D5C2BA3093CA54F9EAA36262AD80B8CC /* SentryViewRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryViewRenderer.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryViewRenderer.swift; sourceTree = ""; }; + D5D0C26AFCD97907D6F50B415AC6FB63 /* SentryClientReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryClientReport.h; path = Sources/Sentry/include/SentryClientReport.h; sourceTree = ""; }; D62045ED6EEB4A5B2EB20E85A5194BD1 /* MIKMIDIControlChangeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIControlChangeEvent.m; path = Source/MIKMIDIControlChangeEvent.m; sourceTree = ""; }; - D6678A60DA665A0E90E8708C65270670 /* SentryRequestOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRequestOperation.h; path = Sources/Sentry/include/SentryRequestOperation.h; sourceTree = ""; }; D68C5B76AD4A475EE76D545BE0930760 /* Pods-Hammerspoon */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "Pods-Hammerspoon"; path = "libPods-Hammerspoon.a"; sourceTree = BUILT_PRODUCTS_DIR; }; D6B9550261A744095833786371052979 /* ORSSerialPortManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ORSSerialPortManager.m; path = Source/ORSSerialPortManager.m; sourceTree = ""; }; - D6F6177F7FAFA22A6C7F338309F72960 /* SentryAsyncSafeLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAsyncSafeLog.h; path = Sources/Sentry/SentryAsyncSafeLog.h; sourceTree = ""; }; - D7C0906529547454269F43C72A7886D7 /* SentryUIViewControllerSwizzling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIViewControllerSwizzling.h; path = Sources/Sentry/include/SentryUIViewControllerSwizzling.h; sourceTree = ""; }; - D8178AEB4217BA674D28E2BE452AFA84 /* SentryCrashStackCursor_MachineContext.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashStackCursor_MachineContext.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_MachineContext.c; sourceTree = ""; }; - D81A93A6C1979D3A1FC2159770837FDC /* SentryHub+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryHub+Private.h"; path = "Sources/Sentry/include/SentryHub+Private.h"; sourceTree = ""; }; - D8CB058DFCC85223CFAE3D019F022847 /* SentryBreadcrumbTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBreadcrumbTracker.m; path = Sources/Sentry/SentryBreadcrumbTracker.m; sourceTree = ""; }; + D792184A9AB8B9AA1AAE185E026E65D1 /* SentryFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFileManager.m; path = Sources/Sentry/SentryFileManager.m; sourceTree = ""; }; + D796B4EABFA42393A5836CAA14AD6FA6 /* SentryRequestOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRequestOperation.m; path = Sources/Sentry/SentryRequestOperation.m; sourceTree = ""; }; + D7EF38338515091AA4C76946C8DDD9DE /* SentryFeedback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryFeedback.swift; path = Sources/Swift/Integrations/UserFeedback/SentryFeedback.swift; sourceTree = ""; }; + D872FB48215B27841F868DB140428098 /* SentryNSTimerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSTimerFactory.m; path = Sources/Sentry/SentryNSTimerFactory.m; sourceTree = ""; }; + D8C0E7D478EAD9ED8B1713A1FF92DF9D /* SentryRateLimitParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRateLimitParser.h; path = Sources/Sentry/include/SentryRateLimitParser.h; sourceTree = ""; }; D8CFE95C10F85D5744A16D3D436C0AB4 /* ORSSerialBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ORSSerialBuffer.h; path = Source/ORSSerialBuffer.h; sourceTree = ""; }; - D8DA09F2482BCB1F2592D0DC0B399B5E /* SentryDefaultObjCRuntimeWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDefaultObjCRuntimeWrapper.h; path = Sources/Sentry/include/SentryDefaultObjCRuntimeWrapper.h; sourceTree = ""; }; - D912F9286CA59E3B581072F9C4B2B839 /* UIViewExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewExtensions.swift; path = Sources/Swift/Extensions/UIViewExtensions.swift; sourceTree = ""; }; D91AF7E51225D293CDFAB3AFC7AA84B2 /* MIKMIDIObject_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIObject_SubclassMethods.h; path = Source/MIKMIDIObject_SubclassMethods.h; sourceTree = ""; }; - D981FF04279B99543F7647514D0CD636 /* SentryCrashStackCursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackCursor.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor.h; sourceTree = ""; }; - DA638962BEEAC8342C9B8D5084536D61 /* SentryNSProcessInfoWrapper.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryNSProcessInfoWrapper.mm; path = Sources/Sentry/SentryNSProcessInfoWrapper.mm; sourceTree = ""; }; - DA7CF09828133D665CA31439FFE1D4DA /* SentryDebugMeta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDebugMeta.h; path = Sources/Sentry/Public/SentryDebugMeta.h; sourceTree = ""; }; - DADB8CA53656E2267D3D4E94B75DE12F /* SentryUIViewControllerPerformanceTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIViewControllerPerformanceTracker.h; path = Sources/Sentry/include/SentryUIViewControllerPerformanceTracker.h; sourceTree = ""; }; + D9AEE7B904B6F822F4823028C45E48BD /* SentryLogC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLogC.h; path = Sources/Sentry/include/SentryLogC.h; sourceTree = ""; }; DAF311B7298EBA625A098E822CBFA2EA /* MIKMIDICommandThrottler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDICommandThrottler.h; path = Source/MIKMIDICommandThrottler.h; sourceTree = ""; }; - DB030BC8488CE21D50F024172EE2629F /* SentryScopeSyncC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryScopeSyncC.h; path = Sources/Sentry/include/SentryScopeSyncC.h; sourceTree = ""; }; - DB309AC3FBF0822DACB4B505EBDD2C10 /* SentryRRWebVideoEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebVideoEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebVideoEvent.swift; sourceTree = ""; }; + DB16E9474E3B42771CBCD73DEAD9F9BB /* SentryIconography.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryIconography.swift; path = Sources/Swift/Helper/SentryIconography.swift; sourceTree = ""; }; + DB2F3271F4566C0BDFB4196FF1C9919D /* SentryMaskRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMaskRenderer.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryMaskRenderer.swift; sourceTree = ""; }; DBC734BD7650923AAAFC72B8A6895B0C /* MIKMIDIMetaTrackSequenceNameEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaTrackSequenceNameEvent.m; path = Source/MIKMIDIMetaTrackSequenceNameEvent.m; sourceTree = ""; }; - DBFE0503F38113C24E4BD42FD5E0AE0D /* SentryDsn.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDsn.m; path = Sources/Sentry/SentryDsn.m; sourceTree = ""; }; + DC13C47D74A1189A7E3D992AB90CB201 /* SentryCrashSymbolicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashSymbolicator.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashSymbolicator.h; sourceTree = ""; }; + DC466DC7111241D7B7EC3144EEEB8302 /* SentryCrashMonitorContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitorContext.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitorContext.h; sourceTree = ""; }; + DC7E77EC1685B63E80F5B84300084065 /* SentryCrashReportFields.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFields.h; path = Sources/SentryCrash/Recording/SentryCrashReportFields.h; sourceTree = ""; }; + DC9AD2CB1B51FEB4E6E5F500A12B8369 /* SentryProfileTimeseries.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfileTimeseries.mm; path = Sources/Sentry/SentryProfileTimeseries.mm; sourceTree = ""; }; + DCBF273CCEDE27D8C56FA3A8250A33BC /* SentryFramesTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryFramesTracker.h; path = Sources/Sentry/include/HybridPublic/SentryFramesTracker.h; sourceTree = ""; }; + DCE90B00255F2927CE141770B326E2F5 /* SentryTraceHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceHeader.h; path = Sources/Sentry/Public/SentryTraceHeader.h; sourceTree = ""; }; DCF66FA92D4BDA2A865D6042771BEEA6 /* HTTPFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTTPFileResponse.m; path = Core/Responses/HTTPFileResponse.m; sourceTree = ""; }; - DD2B9F34DFCFDB4FD4513D109607BE8F /* SentryTraceHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryTraceHeader.h; path = Sources/Sentry/Public/SentryTraceHeader.h; sourceTree = ""; }; + DD50C1A63AB5540BE015C11A47A7D319 /* SentryCrashDate.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashDate.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashDate.c; sourceTree = ""; }; DD7658052A9D7297CDB1CCB186BBC436 /* DDASLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDASLLogger.h; sourceTree = ""; }; - DD9B764125F67A90E6640AEFA593B4EC /* SentryWatchdogTerminationScopeObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryWatchdogTerminationScopeObserver.m; path = Sources/Sentry/SentryWatchdogTerminationScopeObserver.m; sourceTree = ""; }; DDBA0B5951D9B5655132C777A476E711 /* MultipartMessageHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MultipartMessageHeader.m; path = Core/Mime/MultipartMessageHeader.m; sourceTree = ""; }; - DDC5B14755BA6FCA06A597FC3AFA195E /* SentryMechanismMeta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMechanismMeta.h; path = Sources/Sentry/Public/SentryMechanismMeta.h; sourceTree = ""; }; - DDE9E9132D62DCEDA4C9293D51719908 /* SentryInAppLogic.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryInAppLogic.m; path = Sources/Sentry/SentryInAppLogic.m; sourceTree = ""; }; - DDF0E35C376AFA8DF8EE725332C50087 /* Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sentry.h; path = Sources/Sentry/Public/Sentry.h; sourceTree = ""; }; DE1371E30EEB0E988CA1463D902B91DB /* DDRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDRange.m; path = Core/Categories/DDRange.m; sourceTree = ""; }; DE3ADFBE83594B129C861552C701D694 /* DDASLLogCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogCapture.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDASLLogCapture.h; sourceTree = ""; }; + DE3CFC8EBFAA9FB970C25D425FCE1A0F /* SentryUIViewControllerPerformanceTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIViewControllerPerformanceTracker.m; path = Sources/Sentry/SentryUIViewControllerPerformanceTracker.m; sourceTree = ""; }; DE46C7F5C1073736EAFB7016C204EF06 /* DDOSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDOSLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDOSLogger.h; sourceTree = ""; }; - DEABC0B771792792AB178CFB5773FB1D /* SentryBaseIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBaseIntegration.h; path = Sources/Sentry/include/SentryBaseIntegration.h; sourceTree = ""; }; - DEB94ADAB8F47C149D8743DCB40FEFEA /* SentryCrashReportVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportVersion.h; path = Sources/SentryCrash/Recording/SentryCrashReportVersion.h; sourceTree = ""; }; DF1FC1426D43ED67E86AEAD7E1E22AD4 /* NSRunLoop+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h"; sourceTree = ""; }; - DF70139B0265F43C0F3FBF882396DF88 /* SentryMXManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMXManager.swift; path = Sources/Swift/MetricKit/SentryMXManager.swift; sourceTree = ""; }; DF8FFFBF626E1A78D9F50E1E619FE4CF /* MIKMIDISequencer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDISequencer.m; path = Source/MIKMIDISequencer.m; sourceTree = ""; }; - E007A1325F0132F4B3311F0D79DC2EB1 /* SentryCrashMonitor_Signal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor_Signal.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_Signal.c; sourceTree = ""; }; - E017B86B2E26554305CB855F95B4C9FA /* SentryPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPrivate.h; path = Sources/Sentry/include/SentryPrivate.h; sourceTree = ""; }; - E079D98F3D78BF502A659DF0A95E8127 /* SentryDiscardReasonMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDiscardReasonMapper.m; path = Sources/Sentry/SentryDiscardReasonMapper.m; sourceTree = ""; }; + DFE5091698975C1345A5BB944AE573BC /* SentrySession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySession.h; path = Sources/Sentry/include/SentrySession.h; sourceTree = ""; }; + E00A5FD6AA293963D41721191843BB41 /* SentryCrashStackEntryMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashStackEntryMapper.m; path = Sources/Sentry/SentryCrashStackEntryMapper.m; sourceTree = ""; }; + E041B25B21D227873A96BDE132DDFBBE /* SentryCrashJSONCodec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashJSONCodec.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.c; sourceTree = ""; }; E08F1F04EC8D67D7C213DDB5602F10ED /* PSWebSocketUTF8Decoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSWebSocketUTF8Decoder.m; path = PocketSocket/PSWebSocketUTF8Decoder.m; sourceTree = ""; }; - E0C2CBA4FA98212DC9EFDCEA40D485D3 /* SentryAutoBreadcrumbTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAutoBreadcrumbTrackingIntegration.m; path = Sources/Sentry/SentryAutoBreadcrumbTrackingIntegration.m; sourceTree = ""; }; E1026F22848E378B0F43660D21EDEACE /* DDNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDNumber.h; path = Core/Categories/DDNumber.h; sourceTree = ""; }; + E191F7C692908966320448D84B64D5FA /* SentryThreadCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryThreadCodable.swift; path = Sources/Swift/Protocol/Codable/SentryThreadCodable.swift; sourceTree = ""; }; E19C3C27FE150C79821DFE5D7E9A9183 /* PARImage+ASCIIInput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PARImage+ASCIIInput.h"; path = "Core/PARImage+ASCIIInput.h"; sourceTree = ""; }; - E1A387DC8BF0E02240242ADA0ADDDD2F /* NSLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSLock.swift; path = Sources/Swift/Extensions/NSLock.swift; sourceTree = ""; }; E1A3EA46C044E8B9D084D7B00DEF7A39 /* MIKMIDIClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIClock.m; path = Source/MIKMIDIClock.m; sourceTree = ""; }; E1BD483179BB6B080A80DF000573F098 /* WebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WebSocket.h; path = Core/WebSocket.h; sourceTree = ""; }; - E1DFABC1136E834A9B80BA8506BD552F /* SentryHttpStatusCodeRange+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryHttpStatusCodeRange+Private.h"; path = "Sources/Sentry/include/SentryHttpStatusCodeRange+Private.h"; sourceTree = ""; }; + E1BDAC9EEC45CC939068731F85353694 /* SentryDisplayLinkWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDisplayLinkWrapper.m; path = Sources/Sentry/include/SentryDisplayLinkWrapper.m; sourceTree = ""; }; E1ED0785BCF2F459FEF9088AC5E1193E /* MIKMIDIMappingXMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMappingXMLParser.h; path = Source/MIKMIDIMappingXMLParser.h; sourceTree = ""; }; E1F5717CF01EC7655B5006E8A05C5E4E /* CocoaAsyncSocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaAsyncSocket.release.xcconfig; sourceTree = ""; }; + E1FDD1A0A32D4A1C67B66E9C27ECD239 /* SentrySpotlightTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpotlightTransport.m; path = Sources/Sentry/SentrySpotlightTransport.m; sourceTree = ""; }; E212929ED215DD544BD852B998AD94EC /* DDData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDData.h; path = Core/Categories/DDData.h; sourceTree = ""; }; - E2B12166AE92031770B8C68ECD920F00 /* SentryCoreDataTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCoreDataTrackingIntegration.m; path = Sources/Sentry/SentryCoreDataTrackingIntegration.m; sourceTree = ""; }; + E22A100EE9161E47FFDECB474D0DDF5A /* SentryCrashReportSink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashReportSink.m; path = Sources/Sentry/SentryCrashReportSink.m; sourceTree = ""; }; + E29C5F3E023FA7648ECD69C2AF03B8A2 /* SentryAsyncSafeLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAsyncSafeLog.h; path = Sources/Sentry/SentryAsyncSafeLog.h; sourceTree = ""; }; + E2CE64E628BAFEF98C3765D2594305AB /* SentryBinaryImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBinaryImageCache.h; path = Sources/Sentry/include/HybridPublic/SentryBinaryImageCache.h; sourceTree = ""; }; + E2DDE768164BFBBE68483A76040892BD /* SentryHttpTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryHttpTransport.h; path = Sources/Sentry/include/SentryHttpTransport.h; sourceTree = ""; }; E2F4F4F91847F1528BD31F55AC01268C /* MIKMIDIConnectionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIConnectionManager.m; path = Source/MIKMIDIConnectionManager.m; sourceTree = ""; }; - E326348860C69AE8458531DDA058E80E /* SentryCrashMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor.h; sourceTree = ""; }; - E42C47184EEEB774E7E12B9BF7B0AE29 /* SentryAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAttachment.h; path = Sources/Sentry/Public/SentryAttachment.h; sourceTree = ""; }; - E4E03AA1DEA9A0040B4C1CA2DFE7FBA2 /* SentryBaseIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBaseIntegration.m; path = Sources/Sentry/SentryBaseIntegration.m; sourceTree = ""; }; - E50A7E05D86AEC2614C76F94DF56CF83 /* SentryPerformanceTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryPerformanceTrackingIntegration.h; path = Sources/Sentry/include/SentryPerformanceTrackingIntegration.h; sourceTree = ""; }; + E2F95EB4A673FB421E155C6411A70419 /* SentrySessionReplaySyncC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySessionReplaySyncC.h; path = Sources/Sentry/include/SentrySessionReplaySyncC.h; sourceTree = ""; }; + E3DCDA102369CBCD7C8D59D754E876BF /* SentryCrashMonitorType.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitorType.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitorType.c; sourceTree = ""; }; + E3E9BBD3D4A8A0CDF9A463B13B6A4DE0 /* SentryCrashIsAppImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashIsAppImage.h; path = Sources/Sentry/include/SentryCrashIsAppImage.h; sourceTree = ""; }; + E3EAE18F63ED8BB6C897E0F72506E6C8 /* SentryBinaryImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBinaryImageCache.m; path = Sources/Sentry/SentryBinaryImageCache.m; sourceTree = ""; }; + E423319C60D2FD4826987354FD55AFA5 /* SentryCrashReportWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportWriter.h; path = Sources/SentryCrash/Recording/SentryCrashReportWriter.h; sourceTree = ""; }; + E470ABE640336B2AF754A739775CDC74 /* SentryDispatchQueueProviderProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchQueueProviderProtocol.h; path = Sources/Sentry/include/SentryDispatchQueueProviderProtocol.h; sourceTree = ""; }; + E49D6B49784CF0D1FE93A45D08C27655 /* SentryMXCallStackTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryMXCallStackTree.swift; path = Sources/Swift/Core/MetricKit/SentryMXCallStackTree.swift; sourceTree = ""; }; E52BCB07A2726354462572EBEFF1BFA3 /* CocoaLumberjack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CocoaLumberjack.h; path = "Sources/CocoaLumberjack/Supporting Files/CocoaLumberjack.h"; sourceTree = ""; }; - E556DE5669F43059D7ED912203951D09 /* SentryCrashMach.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMach.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashMach.c; sourceTree = ""; }; + E553A9EB4198D14179778FD1BE2007B1 /* SentryUserFeedbackIntegrationDriver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackIntegrationDriver.swift; path = Sources/Swift/Integrations/UserFeedback/SentryUserFeedbackIntegrationDriver.swift; sourceTree = ""; }; E561C36E80F2AB36A7A52C3D9236F760 /* MIKMIDIMappingGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMappingGenerator.m; path = Source/MIKMIDIMappingGenerator.m; sourceTree = ""; }; - E5728A59CC3B61ACC5C6B32C5E1208F3 /* SentryCrashMonitor_AppState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_AppState.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_AppState.h; sourceTree = ""; }; - E58836104DBC75004560BF9A06495ECF /* SentryDateUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDateUtil.h; path = Sources/Sentry/include/SentryDateUtil.h; sourceTree = ""; }; - E5D4109FA871DF4BCF84BC15D7D6F2E4 /* SentryPerformanceTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryPerformanceTrackingIntegration.m; path = Sources/Sentry/SentryPerformanceTrackingIntegration.m; sourceTree = ""; }; - E5F6B485DF6D918B24F3AF358483B380 /* SentrySpanProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanProtocol.h; path = Sources/Sentry/Public/SentrySpanProtocol.h; sourceTree = ""; }; + E5BFFB554D6A95231397D224FCBE6847 /* SentrySerializable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySerializable.h; path = Sources/Sentry/Public/SentrySerializable.h; sourceTree = ""; }; + E5C966A0EC914D5EE46BE39ABE8CBA87 /* SentryThreadState.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryThreadState.hpp; path = Sources/Sentry/include/SentryThreadState.hpp; sourceTree = ""; }; E6086857AE4642BBC4787C78C287E073 /* DDFileLogger+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDFileLogger+Internal.h"; path = "Sources/CocoaLumberjack/DDFileLogger+Internal.h"; sourceTree = ""; }; - E60E4FF781588BDFFBE2070AFE28A979 /* SentryFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFileManager.m; path = Sources/Sentry/SentryFileManager.m; sourceTree = ""; }; - E6AEC779ACD655FF28BFE4738AB05740 /* SentrySpanStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanStatus.h; path = Sources/Sentry/Public/SentrySpanStatus.h; sourceTree = ""; }; - E6C750537F82086F752F1CB28A85A5BD /* SentryConcurrentRateLimitsDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryConcurrentRateLimitsDictionary.m; path = Sources/Sentry/SentryConcurrentRateLimitsDictionary.m; sourceTree = ""; }; - E759332A5670070D6E7AA30BF6E6F550 /* SentryDefaultRateLimits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDefaultRateLimits.h; path = Sources/Sentry/include/SentryDefaultRateLimits.h; sourceTree = ""; }; + E645006E8D8EA853F704FC02A697714B /* SentryANRTrackerV2Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryANRTrackerV2Delegate.swift; path = Sources/Swift/Core/Integrations/ANR/SentryANRTrackerV2Delegate.swift; sourceTree = ""; }; + E7D040C37DFB42A6B0E036B875FF1959 /* SentrySerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySerialization.m; path = Sources/Sentry/SentrySerialization.m; sourceTree = ""; }; E81FC29C83D18A980D23CF2D8A344796 /* ORSSerialPort.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ORSSerialPort.release.xcconfig; sourceTree = ""; }; - E97943931DA666D19A31C626A71CE7B5 /* SentryQueueableRequestManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryQueueableRequestManager.m; path = Sources/Sentry/SentryQueueableRequestManager.m; sourceTree = ""; }; - E9C3DB60DD7A816B42CD3A98B30CC1F5 /* SentryAppState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAppState.h; path = Sources/Sentry/include/SentryAppState.h; sourceTree = ""; }; - E9E7DA61D49DBEDC25D0D54AF713F75C /* SentryGeo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryGeo.h; path = Sources/Sentry/Public/SentryGeo.h; sourceTree = ""; }; - EA154F8B9FE418FCEAC98B05895FA850 /* SentryNSDataSwizzling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSDataSwizzling.h; path = Sources/Sentry/include/SentryNSDataSwizzling.h; sourceTree = ""; }; - EA78382FB58123C1DFD3FDA35DAEF4E3 /* GaugeMetric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GaugeMetric.swift; path = Sources/Swift/Metrics/GaugeMetric.swift; sourceTree = ""; }; - EA99648975F943639502A5C133C72BF5 /* SentryLaunchProfiling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryLaunchProfiling.h; path = Sources/Sentry/include/SentryLaunchProfiling.h; sourceTree = ""; }; - EAB1A60DE10EFF5905590581794E3C00 /* SentryThreadInspector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryThreadInspector.h; path = Sources/Sentry/include/SentryThreadInspector.h; sourceTree = ""; }; - EB7A19F404A0BC1FF96C79F25BC88CDC /* SentryDispatchSourceWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDispatchSourceWrapper.m; path = Sources/Sentry/SentryDispatchSourceWrapper.m; sourceTree = ""; }; - EBA60827BC3DAF72A33E3FE7FEBB2D70 /* SentrySample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySample.h; path = Sources/Sentry/include/SentrySample.h; sourceTree = ""; }; + E8D8CEB0BF30CF4C289F3D5EF6932490 /* SentryCrashIntegrationSessionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashIntegrationSessionHandler.m; path = Sources/Sentry/SentryCrashIntegrationSessionHandler.m; sourceTree = ""; }; + E90D0D2273EE786D76AFCDF55C520EAA /* SentryDsn.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDsn.m; path = Sources/Sentry/SentryDsn.m; sourceTree = ""; }; + E93EA72DF2CA700E681C64D9FF5F5FCA /* SentrySessionReplayDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentrySessionReplayDelegate.swift; path = Sources/Swift/Integrations/SessionReplay/SentrySessionReplayDelegate.swift; sourceTree = ""; }; + E976ACA64E92D8B5567B2DF9D4CC5085 /* Sentry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Sentry-dummy.m"; sourceTree = ""; }; + E9B1828181C49FA6C359B80A417C8A6B /* SentryBuildAppStartSpans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBuildAppStartSpans.h; path = Sources/Sentry/include/SentryBuildAppStartSpans.h; sourceTree = ""; }; + EA27E5AA16C18B31FA6F0E5F3E0E6CD2 /* SentryCrashIntegrationSessionHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashIntegrationSessionHandler.h; path = Sources/Sentry/include/SentryCrashIntegrationSessionHandler.h; sourceTree = ""; }; + EA95EB854533E791CBC83372272BA2ED /* SentryBreadcrumb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBreadcrumb.h; path = Sources/Sentry/Public/SentryBreadcrumb.h; sourceTree = ""; }; + EAFF0A1D72037928F26DBD4A5F15241D /* SentryEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryEvent.m; path = Sources/Sentry/SentryEvent.m; sourceTree = ""; }; + EB25D52BDCCA8BADA23CDDB732970728 /* SentryUserFeedbackWidgetConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryUserFeedbackWidgetConfiguration.swift; path = Sources/Swift/Integrations/UserFeedback/Configuration/SentryUserFeedbackWidgetConfiguration.swift; sourceTree = ""; }; + EB661E0A7D8C236E2E5D89538E42DA92 /* SentryGeoCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryGeoCodable.swift; path = Sources/Swift/Protocol/Codable/SentryGeoCodable.swift; sourceTree = ""; }; + EB98D830E8E41543E535AB98411B20FD /* SentryNoOpSpan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNoOpSpan.h; path = Sources/Sentry/include/SentryNoOpSpan.h; sourceTree = ""; }; EBC1EC183E581BEABDB8752E63D9B560 /* MIKMIDINoteOnCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDINoteOnCommand.m; path = Source/MIKMIDINoteOnCommand.m; sourceTree = ""; }; - EBC8D3D124AF01ECB6C8DE459047F25E /* SentryANRTrackerV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryANRTrackerV2.h; path = Sources/Sentry/include/SentryANRTrackerV2.h; sourceTree = ""; }; - EBE3653DD3ED38722D6A130AD644E1F8 /* SentryCrashDefaultBinaryImageProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDefaultBinaryImageProvider.h; path = Sources/Sentry/include/SentryCrashDefaultBinaryImageProvider.h; sourceTree = ""; }; - EBFBF5C4F7E883B0CE1DDC4838A671CD /* SentryCrashDoctor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDoctor.h; path = Sources/SentryCrash/Recording/SentryCrashDoctor.h; sourceTree = ""; }; - EC6DA11B76FE08F15D71FF41970330F0 /* SentryUIDeviceWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUIDeviceWrapper.h; path = Sources/Sentry/include/SentryUIDeviceWrapper.h; sourceTree = ""; }; - ECE33D86D66035EDDA76AC63CC903026 /* SentryTransactionContext.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryTransactionContext.mm; path = Sources/Sentry/SentryTransactionContext.mm; sourceTree = ""; }; + EBE1B49B10F91FE9F03486DAA142F4B7 /* SentryFeedbackAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryFeedbackAPI.m; path = Sources/Sentry/SentryFeedbackAPI.m; sourceTree = ""; }; + EC217681D4187EC5D6A5D0653005F9C1 /* SentryDateUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDateUtils.m; path = Sources/Sentry/SentryDateUtils.m; sourceTree = ""; }; + EC3925F70F53982E830A02382C273600 /* SentryAutoSessionTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAutoSessionTrackingIntegration.h; path = Sources/Sentry/include/SentryAutoSessionTrackingIntegration.h; sourceTree = ""; }; + ECAF569749A4EAF9881B2B361470A4C0 /* SentryCrashObjC.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashObjC.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashObjC.c; sourceTree = ""; }; ECEDD82BF9BE05D89E821494F455F638 /* MIKMIDIMetaCopyrightEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMetaCopyrightEvent.h; path = Source/MIKMIDIMetaCopyrightEvent.h; sourceTree = ""; }; - ED464F2D1DA0087B603F30746D1DB96B /* SentryCrashThread.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashThread.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashThread.c; sourceTree = ""; }; - ED5523D4F5988DE5E3BB8F6C2B2F6C78 /* SentryReplayRecording.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayRecording.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayRecording.swift; sourceTree = ""; }; - ED8F86ECF84DAA6A3B818DF42492999D /* SentryAutoSessionTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAutoSessionTrackingIntegration.m; path = Sources/Sentry/SentryAutoSessionTrackingIntegration.m; sourceTree = ""; }; - EDC0943F9037C31E4BB345DB0519464F /* SentryMsgPackSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMsgPackSerializer.h; path = Sources/Sentry/include/SentryMsgPackSerializer.h; sourceTree = ""; }; + ED8E8998B575E9D0F374F5EA95BE52A3 /* SentrySubClassFinder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySubClassFinder.h; path = Sources/Sentry/include/SentrySubClassFinder.h; sourceTree = ""; }; + EDDD2760E0F22210874A3DCB8C6223F9 /* SentryReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryReachability.m; path = Sources/Sentry/SentryReachability.m; sourceTree = ""; }; + EDE09D1A76FBED0D1AC8C6F2A4339EE8 /* SentryCrashDynamicLinker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDynamicLinker.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.h; sourceTree = ""; }; + EDE839CBA122178697484BEF9BECF4FA /* SentryError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryError.h; path = Sources/Sentry/Public/SentryError.h; sourceTree = ""; }; EDED4A2D7047E5DEF0DA16061DE438BE /* SUAppcast.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUAppcast.h; path = Sparkle.framework/Versions/B/Headers/SUAppcast.h; sourceTree = ""; }; - EE167B3ACC02085EC7BAF7F8CDA098C4 /* SentryUserFeedback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryUserFeedback.h; path = Sources/Sentry/Public/SentryUserFeedback.h; sourceTree = ""; }; - EE4566783FBCA3EA9BC775540E00FCFD /* SentryAsynchronousOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAsynchronousOperation.m; path = Sources/Sentry/SentryAsynchronousOperation.m; sourceTree = ""; }; - EE65FBF3C516C082D871B79A87CFBADA /* SentryCrashFileUtils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashFileUtils.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.c; sourceTree = ""; }; EE6641C0DC7F6E2AD573E98FF67F2250 /* DDLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLog.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLog.h; sourceTree = ""; }; - EE9F4F84F0AA8532D84ADA0EA5BC134E /* SentryDevice.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryDevice.mm; path = Sources/Sentry/SentryDevice.mm; sourceTree = ""; }; - EEC2614B3B8D466D32F1DD952483C351 /* SentryCrashObjC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashObjC.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashObjC.h; sourceTree = ""; }; - EFAD24B74F9B012A20554D15DA5530E5 /* PrivateSentrySDKOnly.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivateSentrySDKOnly.mm; path = Sources/Sentry/PrivateSentrySDKOnly.mm; sourceTree = ""; }; + EF16DC366ECD6B929DD0A891AC53C431 /* SentrySessionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySessionTracker.h; path = Sources/Sentry/include/SentrySessionTracker.h; sourceTree = ""; }; + EF77AAB993822801A86A4FAF11D57CD0 /* SentryNSDataUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSDataUtils.h; path = Sources/Sentry/include/SentryNSDataUtils.h; sourceTree = ""; }; + EFC1CB0E264A9C5A2B66D9D149C7016E /* SentryTransportFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTransportFactory.m; path = Sources/Sentry/SentryTransportFactory.m; sourceTree = ""; }; + EFC9CCCBA99E17CCBF2B9C9DDAEB2455 /* SentryStackBounds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryStackBounds.hpp; path = Sources/Sentry/include/SentryStackBounds.hpp; sourceTree = ""; }; EFD57E13BF3AFECEC395FF68062C78BF /* MIKMIDIMappingGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIMappingGenerator.h; path = Source/MIKMIDIMappingGenerator.h; sourceTree = ""; }; EFDDE2D28C9D803BF4320C6063D59DE0 /* HTTPMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTTPMessage.h; path = Core/HTTPMessage.h; sourceTree = ""; }; F00EEF230C3E3427EB59590923088DF3 /* MIKMIDIProgramChangeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIProgramChangeEvent.m; path = Source/MIKMIDIProgramChangeEvent.m; sourceTree = ""; }; F0184A5B2000F77304C65C2682F3C5CE /* SPUUpdaterSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdaterSettings.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdaterSettings.h; sourceTree = ""; }; - F03CCC135A99036094780C23F708343B /* SentryCrashSysCtl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashSysCtl.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.h; sourceTree = ""; }; - F059627EB5B6F14D6ADFF7FDF4AD9027 /* SentryCrashReportFields.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportFields.h; path = Sources/SentryCrash/Recording/SentryCrashReportFields.h; sourceTree = ""; }; - F073A2002AE6CBCE085BF8EFB96FC354 /* SentryBaggage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBaggage.m; path = Sources/Sentry/SentryBaggage.m; sourceTree = ""; }; + F05B10FD20805229FA5603F07372AB8B /* SentryRateLimitParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRateLimitParser.m; path = Sources/Sentry/SentryRateLimitParser.m; sourceTree = ""; }; + F06AFF0B6CB2017451A3DBD7A62F0404 /* SentryANRTrackingIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryANRTrackingIntegration.m; path = Sources/Sentry/SentryANRTrackingIntegration.m; sourceTree = ""; }; F0B9A289A6CA386238227B97D2E1027D /* PSWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSWebSocket.m; path = PocketSocket/PSWebSocket.m; sourceTree = ""; }; + F0BCFCD2AC19D74D9D1469678961B4A6 /* SentryInternalCDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalCDefines.h; path = Sources/Sentry/include/SentryInternalCDefines.h; sourceTree = ""; }; + F0CF2F51A62EFD082A3A49DCAF25C8BB /* SentryTracer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryTracer+Private.h"; path = "Sources/Sentry/include/SentryTracer+Private.h"; sourceTree = ""; }; F0E08C7B71F571EC237E1A45466EA7AA /* PSWebSocketBuffer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSWebSocketBuffer.m; path = PocketSocket/PSWebSocketBuffer.m; sourceTree = ""; }; - F10177534C0AB70F2F8F67E7792808ED /* SentryCrashUUIDConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashUUIDConversion.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashUUIDConversion.h; sourceTree = ""; }; - F1107A10A5376382F9C36065A8831980 /* SentryWatchdogTerminationScopeObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationScopeObserver.h; path = Sources/Sentry/include/SentryWatchdogTerminationScopeObserver.h; sourceTree = ""; }; F12E9481DD93967AE2BA14DA96910E21 /* MIKMIDISynthesizer_SubclassMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDISynthesizer_SubclassMethods.h; path = Source/MIKMIDISynthesizer_SubclassMethods.h; sourceTree = ""; }; - F148ED6700444C023C6D1688CC450EA7 /* SentryAppStartMeasurement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStartMeasurement.m; path = Sources/Sentry/SentryAppStartMeasurement.m; sourceTree = ""; }; - F1695452E621BE3466055F9F805C6429 /* SentryError.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryError.mm; path = Sources/Sentry/SentryError.mm; sourceTree = ""; }; - F206047DBF883008D889B1B81126B59D /* SentryEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryEvent.h; path = Sources/Sentry/Public/SentryEvent.h; sourceTree = ""; }; - F30662254B5249C452761DBEADF88AEB /* SentryDispatchQueueWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDispatchQueueWrapper.h; path = Sources/Sentry/include/SentryDispatchQueueWrapper.h; sourceTree = ""; }; - F31D1EFD7F6C45B0039EFC170CE770DC /* SentryDiscardedEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryDiscardedEvent.m; path = Sources/Sentry/SentryDiscardedEvent.m; sourceTree = ""; }; - F32F0B5CF5DE9568030FF636CD17B811 /* SentryCrashStackCursor_Backtrace.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashStackCursor_Backtrace.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_Backtrace.c; sourceTree = ""; }; - F33A08139F6DA0D74D725558DD8AEDC9 /* SentryBreadcrumb.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBreadcrumb.m; path = Sources/Sentry/SentryBreadcrumb.m; sourceTree = ""; }; - F33BE47A11BA82438326290199F19337 /* SentryClientReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryClientReport.m; path = Sources/Sentry/SentryClientReport.m; sourceTree = ""; }; - F3E9F6A236C7AC41C336A3EAFCEDDE7C /* SentryTracer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryTracer+Private.h"; path = "Sources/Sentry/include/SentryTracer+Private.h"; sourceTree = ""; }; - F419D6863CDA4C6ECF96457926C672AC /* SentryHub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryHub.m; path = Sources/Sentry/SentryHub.m; sourceTree = ""; }; - F4304BFC958A368DAACA1629E8146947 /* SentrySpotlightTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpotlightTransport.m; path = Sources/Sentry/SentrySpotlightTransport.m; sourceTree = ""; }; - F43F9C227D195871399DBA0FAA39C16B /* SentryCrashStackEntryMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashStackEntryMapper.h; path = Sources/Sentry/include/SentryCrashStackEntryMapper.h; sourceTree = ""; }; + F15132121431EF0247B64069F0CA9722 /* SentrySubClassFinder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySubClassFinder.m; path = Sources/Sentry/SentrySubClassFinder.m; sourceTree = ""; }; + F1B42BBA860B282A2F0AF43C80AAA3C5 /* SentrySystemWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySystemWrapper.h; path = Sources/Sentry/include/SentrySystemWrapper.h; sourceTree = ""; }; + F3A56A23F6EFD3EFBD6A052CA289D192 /* SentryBacktrace.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = SentryBacktrace.hpp; path = Sources/Sentry/include/SentryBacktrace.hpp; sourceTree = ""; }; + F3FC80C3ADCA7662387A1DD3DD181EB2 /* SentryDictionaryDeepSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDictionaryDeepSearch.h; path = Sources/SentryCrash/Reporting/Filters/Tools/SentryDictionaryDeepSearch.h; sourceTree = ""; }; + F407A101E944888391EA94B0FB530C8F /* SentrySDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySDK.h; path = Sources/Sentry/Public/SentrySDK.h; sourceTree = ""; }; + F451BDBC211EF22CA3D935AF49D0E393 /* SentryOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryOptions.h; path = Sources/Sentry/Public/SentryOptions.h; sourceTree = ""; }; F45A0A3556574DF777A76D51981FEC1E /* MIKMIDIOutputPort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIOutputPort.m; path = Source/MIKMIDIOutputPort.m; sourceTree = ""; }; - F465483B6663380CD3AC0B106F2C8A86 /* SentryCrashReportSink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportSink.h; path = Sources/Sentry/include/SentryCrashReportSink.h; sourceTree = ""; }; - F47EA5EA4204821A3101B46E12CDF103 /* SentryEnvelope+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentryEnvelope+Private.h"; path = "Sources/Sentry/include/SentryEnvelope+Private.h"; sourceTree = ""; }; - F484B464B4FCE9F2E997BBF2252E9D42 /* SentrySamplingContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySamplingContext.m; path = Sources/Sentry/SentrySamplingContext.m; sourceTree = ""; }; + F45B7DE827E13E28A3AE4A7445A790F4 /* SentryCrashMonitor_Signal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_Signal.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_Signal.h; sourceTree = ""; }; + F49B408433BFA6CB28661256C630D5CC /* SentryReplayRecording.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryReplayRecording.swift; path = Sources/Swift/Integrations/SessionReplay/SentryReplayRecording.swift; sourceTree = ""; }; F4CB2AD6A6A43E774C40CE1EE0F4E6C4 /* SPUUpdatePermissionRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPUUpdatePermissionRequest.h; path = Sparkle.framework/Versions/B/Headers/SPUUpdatePermissionRequest.h; sourceTree = ""; }; F4CE8575A6E0A2042AFB4F7402F4B92C /* SRHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHash.m; path = SocketRocket/Internal/Utilities/SRHash.m; sourceTree = ""; }; - F4CFA0BD325A5CC11B091B5EFB6E8FE4 /* SentryNSURLRequestBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSURLRequestBuilder.h; path = Sources/Sentry/include/SentryNSURLRequestBuilder.h; sourceTree = ""; }; + F4DADCFF9AD9131B6560FF74219F2EFC /* SentryRenderVideoResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRenderVideoResult.swift; path = Sources/Swift/Integrations/SessionReplay/SentryRenderVideoResult.swift; sourceTree = ""; }; + F53B771770FB3F228A246488E0BEB0AA /* SentryAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAttachment.h; path = Sources/Sentry/Public/SentryAttachment.h; sourceTree = ""; }; + F54EF32EF2FE2D4E238B2148553D7C6D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; F58A384DCA1ED1FAA4272D7D7D2BE088 /* PSWebSocketDeflater.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PSWebSocketDeflater.m; path = PocketSocket/PSWebSocketDeflater.m; sourceTree = ""; }; F5BF60F22A344A23CE2814221D0C3C12 /* MIKMIDICommandScheduler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDICommandScheduler.h; path = Source/MIKMIDICommandScheduler.h; sourceTree = ""; }; - F5C68D304D045C97D23C0F0D2BB3F9CA /* EncodeMetrics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EncodeMetrics.swift; path = Sources/Swift/Metrics/EncodeMetrics.swift; sourceTree = ""; }; - F5ED5CD2338ED5D09AA4A870F61CE73B /* SentryMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMessage.h; path = Sources/Sentry/Public/SentryMessage.h; sourceTree = ""; }; - F6777E422A5A3A95147DBA36CFA2A078 /* SentryProfiledTracerConcurrency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryProfiledTracerConcurrency.h; path = Sources/Sentry/include/SentryProfiledTracerConcurrency.h; sourceTree = ""; }; - F694C933B6EA4B00D70FB167F8452D36 /* Sentry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Sentry.release.xcconfig; sourceTree = ""; }; - F6A176F71A427EBF188A2DC915C2915E /* SentryUIEventTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryUIEventTracker.m; path = Sources/Sentry/SentryUIEventTracker.m; sourceTree = ""; }; - F6BAC88C16ED7B2B88D5A116E36C7695 /* SentryReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryReachability.m; path = Sources/Sentry/SentryReachability.m; sourceTree = ""; }; - F7D12B0B93EA4E49F18847C1344218D4 /* SentryLevel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryLevel.swift; path = Sources/Swift/Helper/Log/SentryLevel.swift; sourceTree = ""; }; + F60FB99184606DA379E83532E1C074CF /* SentryLog+Configure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SentryLog+Configure.swift"; path = "Sources/Swift/Tools/SentryLog+Configure.swift"; sourceTree = ""; }; + F67BCCF7FA50880126FC18B5F463485B /* SentrySessionListener.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentrySessionListener.swift; path = Sources/Swift/Protocol/SentrySessionListener.swift; sourceTree = ""; }; + F70D5524E23EF0358766F8ADEDB31419 /* SentryCrashBinaryImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashBinaryImageCache.h; path = Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.h; sourceTree = ""; }; + F73937115036161B539916F5B1B13E50 /* SentryCrashMonitor_AppState.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashMonitor_AppState.c; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_AppState.c; sourceTree = ""; }; + F7A1D95754B6C14BA494052EE52F8FE0 /* SentryInternalNotificationNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryInternalNotificationNames.h; path = Sources/Sentry/include/SentryInternalNotificationNames.h; sourceTree = ""; }; F7EAF80E2E283D7FF5FC34814EBE5D85 /* Pods-Hammerspoon.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Hammerspoon.modulemap"; sourceTree = ""; }; - F7F453D2DDCD6E7682FF8C9A7C61930B /* SentryMechanismMeta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMechanismMeta.m; path = Sources/Sentry/SentryMechanismMeta.m; sourceTree = ""; }; + F83A5CF950B53A27A5D17222EF446777 /* SentryRateLimits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRateLimits.h; path = Sources/Sentry/include/SentryRateLimits.h; sourceTree = ""; }; + F866153E81C58FF17A1278AA81319568 /* SentryScope.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryScope.m; path = Sources/Sentry/SentryScope.m; sourceTree = ""; }; F87245CE3F29700434539E2E95E8E764 /* MIKMIDIDeviceManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIDeviceManager.m; path = Source/MIKMIDIDeviceManager.m; sourceTree = ""; }; - F8A5F6AD94DDC763ADCCFEF62916A082 /* SentrySession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySession.m; path = Sources/Sentry/SentrySession.m; sourceTree = ""; }; + F87EB4D917774B89F9474698C8FD5E46 /* UIViewController+Sentry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Sentry.h"; path = "Sources/Sentry/include/UIViewController+Sentry.h"; sourceTree = ""; }; + F8B3CB1CD10B710358F24273B2E5D334 /* SentryBaseIntegration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryBaseIntegration.m; path = Sources/Sentry/SentryBaseIntegration.m; sourceTree = ""; }; + F8DB94733E03560E5A2C7A94D9CB5C0A /* SentryTraceOrigin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTraceOrigin.m; path = Sources/Sentry/SentryTraceOrigin.m; sourceTree = ""; }; F8DDC460A7A6A031DC330E73B2D07AEA /* MIKMIDIPrivateUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIPrivateUtilities.h; path = Source/MIKMIDIPrivateUtilities.h; sourceTree = ""; }; - F8E7CCCD39DAEF4274E60050DF470324 /* SentryObjCRuntimeWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryObjCRuntimeWrapper.h; path = Sources/Sentry/include/SentryObjCRuntimeWrapper.h; sourceTree = ""; }; - F9049991B084FFDA352B82E541333219 /* SentryBreadcrumbTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBreadcrumbTracker.h; path = Sources/Sentry/include/SentryBreadcrumbTracker.h; sourceTree = ""; }; + F9751428F54E530C5952402C24C65443 /* SentryProfilerState.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryProfilerState.mm; path = Sources/Sentry/Profiling/SentryProfilerState.mm; sourceTree = ""; }; + F9767DDC70218C85369C2B63DB39AC85 /* SentrySpanContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySpanContext.h; path = Sources/Sentry/Public/SentrySpanContext.h; sourceTree = ""; }; + F97689C32B053EC22D6AB6C52E6FB7B4 /* SentryRRWebMetaEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebMetaEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebMetaEvent.swift; sourceTree = ""; }; F9AD2DD70D6E747E8FA93EFC17E50A48 /* DELETEResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DELETEResponse.m; path = Extensions/WebDAV/DELETEResponse.m; sourceTree = ""; }; + F9CFB605F4B51D73F6D831861DE41F5B /* SentryMigrateSessionInit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMigrateSessionInit.h; path = Sources/Sentry/include/SentryMigrateSessionInit.h; sourceTree = ""; }; F9D183F03D10C175042D263972039FCF /* MIKMIDIPitchBendChangeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIPitchBendChangeEvent.m; path = Source/MIKMIDIPitchBendChangeEvent.m; sourceTree = ""; }; - FA14DEC9E802765F82D1A8EDD06A9C4D /* SentrySwizzleWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwizzleWrapper.h; path = Sources/Sentry/include/SentrySwizzleWrapper.h; sourceTree = ""; }; + F9F5EC2C5482AA58B1289D5A60A77530 /* SentryCrashReportVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashReportVersion.h; path = Sources/SentryCrash/Recording/SentryCrashReportVersion.h; sourceTree = ""; }; FA2E06D2969E68D50D464C74ADFA1395 /* MIKMIDIChannelPressureCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIChannelPressureCommand.m; path = Source/MIKMIDIChannelPressureCommand.m; sourceTree = ""; }; FA3158D2A9B45ADDF2C26131EEADB1C3 /* DAVResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DAVResponse.h; path = Extensions/WebDAV/DAVResponse.h; sourceTree = ""; }; - FA3902D62E4AC14B13A57BD9F16725B9 /* SentryRateLimitParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryRateLimitParser.m; path = Sources/Sentry/SentryRateLimitParser.m; sourceTree = ""; }; FA3C1D58E4E6B1F8FBE276BE35800880 /* DDTTYLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDTTYLogger.m; path = Sources/CocoaLumberjack/DDTTYLogger.m; sourceTree = ""; }; FA4E690D2B100C84644FDCAF2781A4C0 /* CocoaAsyncSocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaAsyncSocket-dummy.m"; sourceTree = ""; }; - FA5C8572117BD227C602DAC5FEE82105 /* SentryBreadcrumbDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryBreadcrumbDelegate.h; path = Sources/Sentry/include/SentryBreadcrumbDelegate.h; sourceTree = ""; }; - FAA62DA89FAD7469CE788CF9FDC27DE6 /* SentryMeta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryMeta.h; path = Sources/Sentry/include/SentryMeta.h; sourceTree = ""; }; - FABC3739F60CA36C092CF2C0223ECE29 /* SentrySessionReplayIntegration+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SentrySessionReplayIntegration+Private.h"; path = "Sources/Sentry/include/SentrySessionReplayIntegration+Private.h"; sourceTree = ""; }; - FACA3EE8080865D9EAAC5F613346CD54 /* SentryAsynchronousOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryAsynchronousOperation.h; path = Sources/Sentry/include/SentryAsynchronousOperation.h; sourceTree = ""; }; FB0CD51384346718A36B359D3B12A266 /* MIKMIDIMetaCuePointEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MIKMIDIMetaCuePointEvent.m; path = Source/MIKMIDIMetaCuePointEvent.m; sourceTree = ""; }; + FB2B5123344E3450B3DE3F5ECDDC16BC /* SentrySamplerDecision.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySamplerDecision.m; path = Sources/Sentry/SentrySamplerDecision.m; sourceTree = ""; }; + FB469720391151A2908B891E2D0EB27B /* SentryCrashString.c */ = {isa = PBXFileReference; includeInIndex = 1; name = SentryCrashString.c; path = Sources/SentryCrash/Recording/Tools/SentryCrashString.c; sourceTree = ""; }; + FB603C3EAF7E3528B9B23815FEE3209C /* SentrySessionReplay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentrySessionReplay.swift; path = Sources/Swift/Integrations/SessionReplay/SentrySessionReplay.swift; sourceTree = ""; }; + FB8EC01BA0C474B16B4C1A4C057605AE /* SentryTraceContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTraceContext.m; path = Sources/Sentry/SentryTraceContext.m; sourceTree = ""; }; FBA686097CC7BAC119F4E818023BFC63 /* MIKMIDIErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MIKMIDIErrors.h; path = Source/MIKMIDIErrors.h; sourceTree = ""; }; + FBA7B2B47B008EC3B8F9BCE63A5EEF6C /* SentryCrashMonitor_MachException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMonitor_MachException.h; path = Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_MachException.h; sourceTree = ""; }; + FBDEBD17883145566C04C70792D10BC6 /* SentryDateUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryDateUtils.h; path = Sources/Sentry/include/SentryDateUtils.h; sourceTree = ""; }; + FC12DB2166C48A428920120E76AED97B /* SentryNSFileManagerSwizzling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryNSFileManagerSwizzling.m; path = Sources/Sentry/SentryNSFileManagerSwizzling.m; sourceTree = ""; }; FC52D0AA13F7B55147A72C1F11F68B7C /* MultipartFormDataParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipartFormDataParser.h; path = Core/Mime/MultipartFormDataParser.h; sourceTree = ""; }; - FC7FEC1648CBA3A851001FA6A2C67D3E /* SentryCrashCachedData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashCachedData.h; path = Sources/SentryCrash/Recording/SentryCrashCachedData.h; sourceTree = ""; }; - FCDEB86F6EB2160712E4BD9C37FE239C /* SentryNSDataTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSDataTracker.h; path = Sources/Sentry/include/SentryNSDataTracker.h; sourceTree = ""; }; - FD311DB3AF8C9C7B280C86F38679DDC8 /* SentrySpan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySpan.m; path = Sources/Sentry/SentrySpan.m; sourceTree = ""; }; - FD551AD7F7BAE8AF38530092ABA46B34 /* SentryRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryRequest.h; path = Sources/Sentry/Public/SentryRequest.h; sourceTree = ""; }; - FDC27871CEE396D712089FAEF715D347 /* SetMetric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SetMetric.swift; path = Sources/Swift/Metrics/SetMetric.swift; sourceTree = ""; }; + FD5B32494BB6A7E0732E8E034D0EBFC7 /* SentryCrashCPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashCPU.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU.h; sourceTree = ""; }; + FD69AF300313A982FD0653873C5DD202 /* SentryClientReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryClientReport.m; path = Sources/Sentry/SentryClientReport.m; sourceTree = ""; }; + FD6A10FD3DBBD95204783545F7E92E42 /* SentryProfilerTestHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryProfilerTestHelpers.m; path = Sources/Sentry/Profiling/SentryProfilerTestHelpers.m; sourceTree = ""; }; + FD760758EC90E5B840F414265CF91A19 /* SentryLevel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryLevel.swift; path = Sources/Swift/Core/Helper/Log/SentryLevel.swift; sourceTree = ""; }; + FD87772C2442EFF67AAC22A28D5384EE /* SentryTraceHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryTraceHeader.m; path = Sources/Sentry/SentryTraceHeader.m; sourceTree = ""; }; FDC8135C80BF7A9563BFF3CF908BEB69 /* ORSSerialPacketDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ORSSerialPacketDescriptor.m; path = Source/ORSSerialPacketDescriptor.m; sourceTree = ""; }; - FDD7376EA4D90FEADEB356AB2F4105B4 /* SentryCrashCPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashCPU.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashCPU.h; sourceTree = ""; }; - FDD7CCBF9EF842DF06EBAB229F630430 /* SentryCrashDefaultMachineContextWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashDefaultMachineContextWrapper.h; path = Sources/Sentry/include/SentryCrashDefaultMachineContextWrapper.h; sourceTree = ""; }; + FDCFBC3FB42F10C63DC2479E301672FE /* SentryCrashNSErrorUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashNSErrorUtil.h; path = Sources/SentryCrash/Recording/Tools/SentryCrashNSErrorUtil.h; sourceTree = ""; }; FDDE5C1FA0BAD805D5EA880C4524FC3D /* DDContextFilterLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDContextFilterLogFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDContextFilterLogFormatter.m; sourceTree = ""; }; - FDF5B751E4E7E5D35CDEC8E4F4D16C8F /* SentryAppStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryAppStateManager.m; path = Sources/Sentry/SentryAppStateManager.m; sourceTree = ""; }; - FE330B03F9BC6E475FC6D3953AC3303E /* SentryRRWebSpanEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryRRWebSpanEvent.swift; path = Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebSpanEvent.swift; sourceTree = ""; }; FE5C43517361D54BCA00CBC47B2637BA /* DDContextFilterLogFormatter+Deprecated.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DDContextFilterLogFormatter+Deprecated.m"; path = "Sources/CocoaLumberjack/Extensions/DDContextFilterLogFormatter+Deprecated.m"; sourceTree = ""; }; - FEE334FD066A7AEE1B4DDD62559DE8AB /* SentryCrashExceptionApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashExceptionApplication.m; path = Sources/Sentry/SentryCrashExceptionApplication.m; sourceTree = ""; }; + FEDA4CB82BECFB01B2F039AFA1AA62DB /* SentryCrashMachineContextWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCrashMachineContextWrapper.h; path = Sources/Sentry/include/SentryCrashMachineContextWrapper.h; sourceTree = ""; }; + FEF64A10A0E6C53C68112EDC4760DA1E /* SentryNSNotificationCenterWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryNSNotificationCenterWrapper.h; path = Sources/Sentry/include/SentryNSNotificationCenterWrapper.h; sourceTree = ""; }; + FF0C274C930CE18FE5E126F2264578DF /* SentryViewRendererV2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SentryViewRendererV2.swift; path = Sources/Swift/Core/Tools/ViewCapture/SentryViewRendererV2.swift; sourceTree = ""; }; + FF25162D473D23E31D743B900E3537AC /* SentryCrashReportConverter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryCrashReportConverter.m; path = Sources/Sentry/SentryCrashReportConverter.m; sourceTree = ""; }; FF3E1FE10A4237F180D820E914F31342 /* ORSSerialRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ORSSerialRequest.m; path = Source/ORSSerialRequest.m; sourceTree = ""; }; - FF7BAF8D55ABC56552423146B4547A0D /* SentryCoreDataTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryCoreDataTracker.h; path = Sources/Sentry/include/SentryCoreDataTracker.h; sourceTree = ""; }; - FFB1E131ED2C84E1C502868C39278700 /* SentrySwizzle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentrySwizzle.h; path = Sources/Sentry/include/HybridPublic/SentrySwizzle.h; sourceTree = ""; }; - FFCDDE03523027AA4AED83D01BD42A9D /* SentryWatchdogTerminationTrackingIntegration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SentryWatchdogTerminationTrackingIntegration.h; path = Sources/Sentry/include/SentryWatchdogTerminationTrackingIntegration.h; sourceTree = ""; }; + FFAE18C8793F04E16D66A3A645503499 /* SentryMechanismMeta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentryMechanismMeta.m; path = Sources/Sentry/SentryMechanismMeta.m; sourceTree = ""; }; + FFAEA1F05A0658B4A0B5CEEDDA89D765 /* SentrySwizzle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SentrySwizzle.m; path = Sources/Sentry/SentrySwizzle.m; sourceTree = ""; }; FFE1F3C6787410906BB83D9ADF8C8EE2 /* SUVersionDisplayProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SUVersionDisplayProtocol.h; path = Sparkle.framework/Versions/B/Headers/SUVersionDisplayProtocol.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 17DBC7A203C8A826D395E7E0CB5EF793 /* Frameworks */ = { + 02BE7F305D2856468EC54D732AF172B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 48292EF123AE931B0632BE33AE7E71FE /* Frameworks */ = { + 26F00B14B424A825B2C6D3642696314D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 4EA19649AE2AF56CA09CEC0C7C5EB4A4 /* Frameworks */ = { + 27E868056810CBBF36CC78BD87A92840 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 722A4319A2C8A74EA6A92FE0F7C2F281 /* Frameworks */ = { + 3FB7FA4CDA730DD4E9272A3E57A54A74 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 7A549640EE09CF96C9F2E67D2A5823CA /* Frameworks */ = { + 59745BF1689E6E98A419935DDC8BA8C5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - AC6AE91EABF3B31396292F4586873909 /* Frameworks */ = { + 72B333EA405429CDC03DCC333535BAE4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B29AF0B85C2C2B5DF2B5D2D90D89BD61 /* Frameworks */ = { + 8D108A3DD1BC34C1390AF747657C1D07 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - C7DBCAF4E3F5D00A1A2FA02116406E4E /* Frameworks */ = { + BE4777BD0902CD39BA471443DA1F903B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D61AAE72DF06659CDA618D8A406C4BC9 /* Frameworks */ = { + D23D3BFAEA23596583DB1D8166742B42 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - DCC05848E9EF784448C090953AA6581E /* Frameworks */ = { + EA0061044EC4426DE47CC33DF78E145F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - E79C69E7388C12578289C9BDC2EEBF3D /* Frameworks */ = { + EC81E28E0E01191FE59623D0CECD57D5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - ECA104863245D2CEEFC99A32F4541BF8 /* Frameworks */ = { + ECEBBE126BF3E7FDEFC788FD97D14F97 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -2307,6 +2439,21 @@ path = "Target Support Files/Pods-Hammerspoon"; sourceTree = ""; }; + 6B8711BA296A994C2F8A42543B148BB2 /* Support Files */ = { + isa = PBXGroup; + children = ( + 436F2922BFBB9EBD25814927623FBB7E /* ResourceBundle-Sentry-Sentry-Info.plist */, + 8FDF7638A90D4B5527FC4418EC946D24 /* Sentry.modulemap */, + E976ACA64E92D8B5567B2DF9D4CC5085 /* Sentry-dummy.m */, + 0A46F01EC6E740E242847DD04D6C3A07 /* Sentry-prefix.pch */, + 866AB42A14F3AA83F5CCB0D431EFA9DF /* Sentry-umbrella.h */, + 1AC3A001C7140AC553441ED14700B82E /* Sentry.debug.xcconfig */, + AED3FF866171BE6D1B84822B6AD1D03C /* Sentry.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Sentry"; + sourceTree = ""; + }; 716F74032F1797D0C9DBED1C0B2CA492 /* Support Files */ = { isa = PBXGroup; children = ( @@ -2319,6 +2466,687 @@ path = "../Target Support Files/CocoaHTTPServer"; sourceTree = ""; }; + 75B9B682E0A4F4D07346728ECB69B45F /* Core */ = { + isa = PBXGroup; + children = ( + 3176F06FFFF10AF7105AD2AA38B09181 /* Data+SentryTracing.swift */, + 53597F7AC2AEF3EF5D07C8035E5FBA9A /* DecodeArbitraryData.swift */, + 31662AC140EAB71ADE4F22051918EF76 /* FileManager+SentryTracing.swift */, + B9039BCB072659E5080CF899BF027D8C /* HTTPHeaderSanitizer.swift */, + D11D7A8CB26839CE3D0D488A84519F5C /* Locks.swift */, + 8685F2D00E2938BDB0EE0F8821012911 /* NSArray+SentrySanitize.h */, + 4C42F0634096933ECEB25CA80F635342 /* NSArray+SentrySanitize.m */, + 84A9B133D6CCBF73D42C4AC6FFC8C3C7 /* NSLocale+Sentry.h */, + 6D4C9354E0B789A3F43108EB67B8D3D5 /* NSLocale+Sentry.m */, + 53145BFCB99835D4A526D1BE4F34E7F1 /* NSMutableDictionary+Sentry.h */, + 71EEF02F06471E5DF11E077D1E87A062 /* NSMutableDictionary+Sentry.m */, + 886D98EC2DACD7E9BB813F7239EFAAAB /* NSNumberDecodableWrapper.swift */, + 8A12BB6450CB713A25FC31E05608F6FF /* NumberExtensions.swift */, + BA461260B836E1856DD2B51049D06618 /* PrivateSentrySDKOnly.h */, + BEA5AB62CCE589AE5F7C3ABB35E84D2A /* PrivateSentrySDKOnly.mm */, + 39923169280D94DC64CB6FD71BBCD5FE /* PrivatesHeader.h */, + 651FC660333B7E155A3F1DF14F8EFE3B /* Sentry.h */, + 028D527FCC2C66E74D481F5EC3F77793 /* SentryANRTracker.swift */, + 9B6215BF2862BE54E30D103E810503CF /* SentryANRTrackerV1.h */, + C1993EEEA8310DAF1EDFB9DD5D060C7A /* SentryANRTrackerV1.m */, + C4BBB13FB47AE7ABC026F4407FCD7DD3 /* SentryANRTrackerV2.h */, + 3F0C1CCE4B558F1279E802EE852EC994 /* SentryANRTrackerV2.m */, + E645006E8D8EA853F704FC02A697714B /* SentryANRTrackerV2Delegate.swift */, + B2C45863BCD0D25D16453728AE2F4064 /* SentryANRTrackingIntegration.h */, + F06AFF0B6CB2017451A3DBD7A62F0404 /* SentryANRTrackingIntegration.m */, + 93B884D749F216BDA2A699DBE3FC1D5A /* SentryANRType.swift */, + 7B05F7340C216792A8C5D1776111E7A8 /* SentryAppStartMeasurement.h */, + 94D32381EBFB62DFBDCD427E9E04D6A7 /* SentryAppStartMeasurement.m */, + 9B67152F73302D1D194D66B13AECB3ED /* SentryAppStartTracker.h */, + 0B36053CFFD2CC74E756799F68DD1E21 /* SentryAppStartTracker.m */, + 9A6E96F9686CED11A83C8CF2B199428D /* SentryAppStartTrackingIntegration.h */, + ADA3453AE613ED13A83F04EE0B1EE04E /* SentryAppStartTrackingIntegration.m */, + 81FB4ED6990EF83BB240340C11A01284 /* SentryAppState.h */, + 18DF647FE820E68B8D1BF9BCB8EE36AB /* SentryAppState.m */, + C115A9F676A6B8E2F92A53A09EAD3091 /* SentryAppStateManager.h */, + 335A3440400FC1A549AEA4C1BFF24F37 /* SentryAppStateManager.m */, + 1E273F3CEAB5477293E0BE3F3A2C3288 /* SentryAsynchronousOperation.h */, + 48E014C597F8503F3B805C5BEB3188CD /* SentryAsynchronousOperation.m */, + 618BA3247A099BAAF9854B99AEF2D19F /* SentryAsyncSafeLog.c */, + E29C5F3E023FA7648ECD69C2AF03B8A2 /* SentryAsyncSafeLog.h */, + F53B771770FB3F228A246488E0BEB0AA /* SentryAttachment.h */, + 8DEF41D9B59330B53F10BBF26B0D4971 /* SentryAttachment.m */, + 5B1C36E4DF7987DAB8302D8EF1DF518A /* SentryAttachment+Private.h */, + 986E4537FEEC81A4A92BB801CC5F32B8 /* SentryAutoBreadcrumbTrackingIntegration.h */, + 96F9E586137C66364ED6A0E3E9EDE5CD /* SentryAutoBreadcrumbTrackingIntegration.m */, + EC3925F70F53982E830A02382C273600 /* SentryAutoSessionTrackingIntegration.h */, + 58E6C8B30EB4F8596E89D4FB0FA66901 /* SentryAutoSessionTrackingIntegration.m */, + 013372DE237CA0C2353B5BCBA2415F09 /* SentryBacktrace.cpp */, + F3A56A23F6EFD3EFBD6A052CA289D192 /* SentryBacktrace.hpp */, + 72F0A7A9FD76E7239DF27262BBD31705 /* SentryBaggage.h */, + CB5C1A8C47AA551F58EC39F9B5BDD214 /* SentryBaggage.m */, + 4AF7CE801491B786152F529FE0DD007B /* SentryBaggageSerialization.swift */, + 77CEC4A4F173A75CC4169BF407C46F97 /* SentryBaseIntegration.h */, + F8B3CB1CD10B710358F24273B2E5D334 /* SentryBaseIntegration.m */, + E2CE64E628BAFEF98C3765D2594305AB /* SentryBinaryImageCache.h */, + E3EAE18F63ED8BB6C897E0F72506E6C8 /* SentryBinaryImageCache.m */, + EA95EB854533E791CBC83372272BA2ED /* SentryBreadcrumb.h */, + B9989CED3E978FD838B8906F4484F0E6 /* SentryBreadcrumb.m */, + 89D24D0894702DF1776C05B5E0EF59BC /* SentryBreadcrumb+Private.h */, + 4867757319AC6662D5CB9107F231ECA4 /* SentryBreadcrumbCodable.swift */, + CD7F2CFB8DB56B7F548A712102E76789 /* SentryBreadcrumbDelegate.h */, + 284B6CD9B01AB8911497ABA822DBAA46 /* SentryBreadcrumbTracker.h */, + 6DCB6A9CF59CB3C19BA6FD767AE6FA14 /* SentryBreadcrumbTracker.m */, + E9B1828181C49FA6C359B80A417C8A6B /* SentryBuildAppStartSpans.h */, + 536AE9255874B3EE4CF493D8694B55F5 /* SentryBuildAppStartSpans.m */, + 6ED19E4EE016DE9514B8B1AE8519B346 /* SentryByteCountFormatter.h */, + 48C45256924956809E4091ADDF1A3A9E /* SentryByteCountFormatter.m */, + 8FD01BCFEFF8D3DD043FA95A330D38FD /* SentryClient.h */, + 2D49E26FDEA0EDE4F3D63B6F1E3B3793 /* SentryClient.m */, + AE6C15F539BEE4CFF8462F8C4C1F539B /* SentryClient+Private.h */, + D5D0C26AFCD97907D6F50B415AC6FB63 /* SentryClientReport.h */, + FD69AF300313A982FD0653873C5DD202 /* SentryClientReport.m */, + 31B995DE34CCFCF5DE8B1F6AB7D05486 /* SentryCodable.swift */, + 14CF687B759F72FE41D6E71F3A497585 /* SentryCompiler.h */, + D509789FAAB3D35278CEC34975C1AC73 /* SentryConcurrentRateLimitsDictionary.h */, + D47E5153895B6B7A14604DABF446B044 /* SentryConcurrentRateLimitsDictionary.m */, + 4C0AAD32EA78A0C2DBBB0286C2CE2A46 /* SentryContinuousProfiler.h */, + 816878C82AAB045C22EB363A94907871 /* SentryContinuousProfiler.mm */, + CF0D45FE32476F1A1BC9CB244CF750D2 /* SentryCoreDataSwizzling.h */, + 9D7A56DDC91677E82BCA78612D8B6B9E /* SentryCoreDataSwizzling.m */, + 1431BA8DEB4E4CA7127C1CFC41D57E98 /* SentryCoreDataTracker.h */, + 25C1954C2CCE80895772DCDBD072BCCF /* SentryCoreDataTracker.m */, + 9A47CD6102F516A4E7022AF905006C88 /* SentryCoreDataTrackingIntegration.h */, + 3C57C827E9D9379B1CB7C8A6BF78F51A /* SentryCoreDataTrackingIntegration.m */, + 61A750D5ADB197562FFF3E10262A9BFB /* SentryCPU.h */, + 2F330A5304CD73E2EB40FB043576762E /* SentryCrash.h */, + 0AB407DBDE81E8C64B22BA37E69216E8 /* SentryCrash.m */, + 5D9326E03577B623C1AC1B0387909AA4 /* SentryCrashBinaryImageCache.c */, + F70D5524E23EF0358766F8ADEDB31419 /* SentryCrashBinaryImageCache.h */, + 4B93D92D41E4FC4CE881A8F256A2B8C0 /* SentryCrashBinaryImageProvider.h */, + 69213797A356DF8976DD7F1F04E08C83 /* SentryCrashC.c */, + 2EBD7244F2BC8F0C99E45AF1D5057468 /* SentryCrashC.h */, + 9F7210EFFBF686CD251D5A1B4427B08B /* SentryCrashCachedData.c */, + 9FA1A20CDB46FFB92641EC76FD79B2FC /* SentryCrashCachedData.h */, + 1D9AD3508FB5D236DC14882B18CEF9FB /* SentryCrashCPU.c */, + FD5B32494BB6A7E0732E8E034D0EBFC7 /* SentryCrashCPU.h */, + 052C710A729B965AECEC546BF9942B0E /* SentryCrashCPU_Apple.h */, + AA883C425153F298787046063BC18C7C /* SentryCrashCPU_arm.c */, + 5F2C1817E4A1C97BDF0BC4097291FF52 /* SentryCrashCPU_arm64.c */, + B18BF0A45152AE67AD7CCB3B1B2D9459 /* SentryCrashCPU_x86_32.c */, + 394A9C321CBC68C8D29496EC6670DFAF /* SentryCrashCPU_x86_64.c */, + DD50C1A63AB5540BE015C11A47A7D319 /* SentryCrashDate.c */, + 06B99B03C274E9A595B31BFBFD7D0E1C /* SentryCrashDate.h */, + 90AAB05173D10F905323830BBD3002D7 /* SentryCrashDebug.c */, + B3D46ABFCAEA12066A55E4802173859B /* SentryCrashDebug.h */, + BD3511636338F6815546F70E8554408C /* SentryCrashDefaultBinaryImageProvider.h */, + 860CA4F7747B83DC0277AED809DD45BF /* SentryCrashDefaultBinaryImageProvider.m */, + 3434547D607D12E91702F4301342CB10 /* SentryCrashDefaultMachineContextWrapper.h */, + D10C154DCC4EB4534D4CC64FC1750F16 /* SentryCrashDefaultMachineContextWrapper.m */, + 6EF8FFF4E82EC52DC0981A0AE8A13E09 /* SentryCrashDoctor.h */, + 3B16013CA9FBDBE5FD667A0613F0AE6B /* SentryCrashDoctor.m */, + 529BD936C9CA23DDB0ADE2706EE53592 /* SentryCrashDynamicLinker.c */, + EDE09D1A76FBED0D1AC8C6F2A4339EE8 /* SentryCrashDynamicLinker.h */, + C65029C2756339F4165691E5C7F116EC /* SentryCrashExceptionApplication.h */, + CC5BF7FF018EDD63174F884B0299AA74 /* SentryCrashExceptionApplication.m */, + 6B5E158AED0B2C7CAF5B5945C4D54925 /* SentryCrashFileUtils.c */, + 73AB4DDC65DEBE301AF3FAB0EA7D01DF /* SentryCrashFileUtils.h */, + 6ED8126E44539AD06EE44B2225B50C8E /* SentryCrashID.c */, + 637A79839224131C565D604C2DC3FCDD /* SentryCrashID.h */, + 8AD573609C4DD4D53E4FDCCA8D3C9BF3 /* SentryCrashInstallation.h */, + 5E3C2ADFA10F7F852AEEF7A8DE9EEA83 /* SentryCrashInstallation.m */, + 23EA7DC598BF1CD7109055D7FC36CAAE /* SentryCrashInstallation+Private.h */, + 7E2EB4EF0AA177EA07CDA3A4AA91622C /* SentryCrashInstallationReporter.h */, + 4BFF15B851B2A7FC1CC6A5D740D06724 /* SentryCrashInstallationReporter.m */, + 962C790D313BC9CD6D3795CD05661781 /* SentryCrashIntegration.h */, + A8B05C33F5F838187210EE0090C8CBF9 /* SentryCrashIntegration.m */, + EA27E5AA16C18B31FA6F0E5F3E0E6CD2 /* SentryCrashIntegrationSessionHandler.h */, + E8D8CEB0BF30CF4C289F3D5EF6932490 /* SentryCrashIntegrationSessionHandler.m */, + E3E9BBD3D4A8A0CDF9A463B13B6A4DE0 /* SentryCrashIsAppImage.h */, + E041B25B21D227873A96BDE132DDFBBE /* SentryCrashJSONCodec.c */, + 822F0A7C7BF1AE03A84912103DD54E72 /* SentryCrashJSONCodec.h */, + 4B0272FEEA151065EC6D0602290A4ECC /* SentryCrashJSONCodecObjC.h */, + 99DA03A4F6DB9555424E94484A8B3639 /* SentryCrashJSONCodecObjC.m */, + A916BA304F5A9005B5D0FAF7776AE362 /* SentryCrashMach.c */, + B8EDF710824EDFA7FCBDFC684A1751BC /* SentryCrashMach.h */, + 9A993FFD99C1A626733F459F61F8C910 /* SentryCrashMachineContext.c */, + D3FD570912E77AB7BCCBB5C3A6E8F7F7 /* SentryCrashMachineContext.h */, + 1BB4F7FD2FF745EF831C1D3DDB30782E /* SentryCrashMachineContext_Apple.h */, + FEDA4CB82BECFB01B2F039AFA1AA62DB /* SentryCrashMachineContextWrapper.h */, + 55B226C7054BEAECF5C271CABC1131B4 /* SentryCrashMemory.c */, + 777B437606ADECC1E4624CE8A33BC112 /* SentryCrashMemory.h */, + 3EABE42A9BDBE5DA7D9FD19EBEB1552B /* SentryCrashMonitor.c */, + 8DD887A0050B4A72475E9A589CEF0F89 /* SentryCrashMonitor.h */, + F73937115036161B539916F5B1B13E50 /* SentryCrashMonitor_AppState.c */, + 2776C41D22848733563DFB32582D1201 /* SentryCrashMonitor_AppState.h */, + 276C4BE1B5F22F7CB6FC184CB06622CC /* SentryCrashMonitor_CPPException.cpp */, + CDE2799EC60774AF37D6EE071244A705 /* SentryCrashMonitor_CPPException.h */, + 06F3584AC84A12B554C65FA97E890322 /* SentryCrashMonitor_MachException.c */, + FBA7B2B47B008EC3B8F9BCE63A5EEF6C /* SentryCrashMonitor_MachException.h */, + C1F87D6C0D33933FE6DCFFD0A7105E4A /* SentryCrashMonitor_NSException.h */, + 869A0000ED64E788FC7A510588EEE58A /* SentryCrashMonitor_NSException.m */, + 8450784D7958893BC52C171399D38969 /* SentryCrashMonitor_Signal.c */, + F45B7DE827E13E28A3AE4A7445A790F4 /* SentryCrashMonitor_Signal.h */, + 9E54BA06A5ED36D17D78302114356BFE /* SentryCrashMonitor_System.h */, + 7B08C2CC0B3396AEE5254F033FF77095 /* SentryCrashMonitor_System.m */, + DC466DC7111241D7B7EC3144EEEB8302 /* SentryCrashMonitorContext.h */, + E3DCDA102369CBCD7C8D59D754E876BF /* SentryCrashMonitorType.c */, + 852032663E4A7D45316C9EDD5CFFC96F /* SentryCrashMonitorType.h */, + FDCFBC3FB42F10C63DC2479E301672FE /* SentryCrashNSErrorUtil.h */, + 86B5524E4BF6E6FAF2E5040F120D7DCD /* SentryCrashNSErrorUtil.m */, + ECAF569749A4EAF9881B2B361470A4C0 /* SentryCrashObjC.c */, + 4CBAB854066F69496EB0245AEFB9F8A3 /* SentryCrashObjC.h */, + D4D42B04022071057D472D6A697EF9BA /* SentryCrashObjCApple.h */, + CCD5A1E882F2F945A406879F94E539E7 /* SentryCrashPlatformSpecificDefines.h */, + 3F04E49972C94BB40E3470AEA96076A2 /* SentryCrashReport.c */, + 3DA0945F044E57FC4CE6EEC35A93D13A /* SentryCrashReport.h */, + 430652E45105CAFD41539D0566D1445C /* SentryCrashReportConverter.h */, + FF25162D473D23E31D743B900E3537AC /* SentryCrashReportConverter.m */, + DC7E77EC1685B63E80F5B84300084065 /* SentryCrashReportFields.h */, + 59824770943737B3409AC9C6DFB353AF /* SentryCrashReportFilter.h */, + 0D05DF185968A60037D48FD1D96378BC /* SentryCrashReportFilterBasic.h */, + 0E451E243AAA1FC8E8A6366EBFB0916D /* SentryCrashReportFilterBasic.m */, + 992514C828A3C923EF053BA67001F382 /* SentryCrashReportFixer.c */, + 766EF1FD4797B6AE9B3270D760A9EDDE /* SentryCrashReportFixer.h */, + 6858EAD1428B271AD06FE1828D2E4924 /* SentryCrashReportSink.h */, + E22A100EE9161E47FFDECB474D0DDF5A /* SentryCrashReportSink.m */, + 0013D56BADDF79F078E56D7D1608765C /* SentryCrashReportStore.c */, + B4B51596D6FEA1B245A3E64A6B90B049 /* SentryCrashReportStore.h */, + F9F5EC2C5482AA58B1289D5A60A77530 /* SentryCrashReportVersion.h */, + E423319C60D2FD4826987354FD55AFA5 /* SentryCrashReportWriter.h */, + 231DDA31B0FD020205630FDF53855B3B /* SentryCrashScopeObserver.h */, + 7854A8E688C6F9AFEFB2DC1F553A3A36 /* SentryCrashScopeObserver.m */, + A5CCFEC704FA755C8CE5B212BD31D8AC /* SentryCrashSignalInfo.c */, + C9EA8DFF457592E0521C7DAF988E0AE5 /* SentryCrashSignalInfo.h */, + 21B8F0B5D1D07D21B6B362F88AADDD0F /* SentryCrashStackCursor.c */, + 17706ABCFF2B9D6491443187EFE9D6A4 /* SentryCrashStackCursor.h */, + 8C2AF0ED5678F26A199D1187DF622757 /* SentryCrashStackCursor_Backtrace.c */, + 1D1574FE7064E811BA1B58710A68881D /* SentryCrashStackCursor_Backtrace.h */, + 2A810B627FDA462FCDFBFB1A545F216F /* SentryCrashStackCursor_MachineContext.c */, + 579C1987961701C3DC34E4669A1ACAFB /* SentryCrashStackCursor_MachineContext.h */, + 31C5457FF8ADE708DFF7EFB02311DB60 /* SentryCrashStackCursor_SelfThread.h */, + 69A366A6EF1278B84BF0FC8317B22279 /* SentryCrashStackCursor_SelfThread.m */, + 5ED352D192C63D0CF0253B4AB24C6C66 /* SentryCrashStackEntryMapper.h */, + E00A5FD6AA293963D41721191843BB41 /* SentryCrashStackEntryMapper.m */, + FB469720391151A2908B891E2D0EB27B /* SentryCrashString.c */, + B1EC6104EB05DF5001CE063BDC2968A9 /* SentryCrashString.h */, + 49641AC5B3D706F8CF1FE35CB2399AAF /* SentryCrashSymbolicator.c */, + DC13C47D74A1189A7E3D992AB90CB201 /* SentryCrashSymbolicator.h */, + 9D1F0EC48B392EAE9559B50CAE05D675 /* SentryCrashSysCtl.c */, + 769C10C5440726870C9566A393FB330B /* SentryCrashSysCtl.h */, + 84615395DA31A84C51F94A99094E69AE /* SentryCrashThread.c */, + 3D31F565F26C3E8DE6E116F9CB27D589 /* SentryCrashThread.h */, + 35E8F22E89E5AE0BF8B33125B9E34560 /* SentryCrashUUIDConversion.c */, + B100F93931218F4CCC7AA0F468B65B27 /* SentryCrashUUIDConversion.h */, + 82A8708C9020A49A576D394A78F672DF /* SentryCrashVarArgs.h */, + B21740BEE120420515F88CB36EB4E7B2 /* SentryCrashWrapper.h */, + 87F5310C509B09820467AEA5E83F6CF8 /* SentryCrashWrapper.m */, + 07610E46341931ABB56277836339F2E0 /* SentryCurrentDateProvider.swift */, + 57C7410D5636DE4AF21AC08BFEB8627B /* SentryDataCategory.h */, + 36FCFEE797CF5B39D2CA3BEEB8344416 /* SentryDataCategoryMapper.h */, + 80ED7A4FDB50A475C8FBC673A4906C89 /* SentryDataCategoryMapper.m */, + 607EADC16855B1A779A3991C3A0EBFD6 /* SentryDateUtil.h */, + 29A677004F9648AD355A23D448EE6FD5 /* SentryDateUtil.m */, + FBDEBD17883145566C04C70792D10BC6 /* SentryDateUtils.h */, + EC217681D4187EC5D6A5D0653005F9C1 /* SentryDateUtils.m */, + C0C717F70AAC5FD32FA303A355692468 /* SentryDebugImageProvider.h */, + 8742C2399745ECC8D043A3E221FC7A8B /* SentryDebugImageProvider.m */, + 49A605666CA85583E29E08A36EB170A8 /* SentryDebugImageProvider+HybridSDKs.h */, + C8F4F614F87D25048167240FF1310A1C /* SentryDebugMeta.h */, + 7AE0C65C5CF4751EABA0AD5D22AE848B /* SentryDebugMeta.m */, + 83EF69E0F85672AAD70D4BACA3CC92DB /* SentryDebugMetaCodable.swift */, + B5A63DCE4981065611C31C7EEDE8BD21 /* SentryDefaultMaskRenderer.swift */, + A0BE50811C81F94CA06D0BF50EAAA391 /* SentryDefaultObjCRuntimeWrapper.h */, + 3814EB66727ED77A2067142A97224796 /* SentryDefaultObjCRuntimeWrapper.m */, + 971EFB9F42CC92340CFA0E717BD61903 /* SentryDefaultRateLimits.h */, + 1714F00193A1476C02AD85B8AD41F18E /* SentryDefaultRateLimits.m */, + B507ED4338B1FC568FACFD979A642CAD /* SentryDefaultViewRenderer.swift */, + 80FC9CF001523AF3C6DEFD61CF069029 /* SentryDefines.h */, + 0275EEFB092C3971B7C75A9A34DB7296 /* SentryDelayedFrame.h */, + D290C44BD1A044F8C5EFBE02E3B262CB /* SentryDelayedFrame.m */, + A5007C5E09BF8160EC9C14A0FD651801 /* SentryDelayedFramesTracker.h */, + A6F64F8B24B4B2BCA7A20B23A598C9F3 /* SentryDelayedFramesTracker.m */, + 899A467E33D23B3C4851C216969A646F /* SentryDependencyContainer.h */, + 28A397C7EC43828883494A2BC44A7C2B /* SentryDependencyContainer.m */, + 77725C1A8C7C9731D6A9DFD472EE792F /* SentryDevice.h */, + ABC9ECB062E169D711AADAD1B4338F85 /* SentryDevice.mm */, + F3FC80C3ADCA7662387A1DD3DD181EB2 /* SentryDictionaryDeepSearch.h */, + 3046CF312C54D83F1BF1B011E53368EA /* SentryDictionaryDeepSearch.m */, + 270072B02CEC084041BDFF3F0A1E34D1 /* SentryDiscardedEvent.h */, + 7B64F313D3588C5DBFC21BE76C0FBBC9 /* SentryDiscardedEvent.m */, + B84B3AF41AD3E766A8BDE34F66A1D4F3 /* SentryDiscardReason.h */, + 31B0FEAEE80615E6DB6CC8F99175C4D3 /* SentryDiscardReasonMapper.h */, + 8A157016CFDCE8B69F5D9AC8243F7463 /* SentryDiscardReasonMapper.m */, + C9CB2432A7085A0A304B9D1C0C5FA4D4 /* SentryDispatchFactory.h */, + 50040FF2187CE4DE3EA62225BEFF4234 /* SentryDispatchFactory.m */, + E470ABE640336B2AF754A739775CDC74 /* SentryDispatchQueueProviderProtocol.h */, + B98C7CD492E48CAA488CDB124B649F1B /* SentryDispatchQueueWrapper.h */, + 83BF24CE9E15C64AC6AD96BB7167FEE1 /* SentryDispatchQueueWrapper.m */, + 2B197A91F7D0C4150426ACD0206DC628 /* SentryDispatchSourceProviderProtocol.h */, + 0C38EFCEBA8BE2A8CDC50438F91FF27D /* SentryDispatchSourceWrapper.h */, + 5F7BC1BF1CAFE7DDAB2B8CE66385058B /* SentryDispatchSourceWrapper.m */, + CE4EBEEC29172F3F0BC6746337521897 /* SentryDisplayLinkWrapper.h */, + E1BDAC9EEC45CC939068731F85353694 /* SentryDisplayLinkWrapper.m */, + 329823FCF83AECFFBADBD6558C83247C /* SentryDsn.h */, + E90D0D2273EE786D76AFCDF55C520EAA /* SentryDsn.m */, + 7CF79A70E491771CAA0F27C87186FD64 /* SentryEnabledFeaturesBuilder.swift */, + 54988B1CBC287D434B40E55EB0F67563 /* SentryEnvelope.h */, + B93A05C04A80D55F1AC0267A538409EF /* SentryEnvelope.m */, + C1F18BD9D2EDB8D81CF9CF6796E591E4 /* SentryEnvelope+Private.h */, + 001F7086DC38609BA43D840DA7572E9B /* SentryEnvelopeAttachmentHeader.h */, + B73F79C8DF2CF94E0A214C93BE0C8AF7 /* SentryEnvelopeAttachmentHeader.m */, + D296C27301789D3757AB682A2CF42968 /* SentryEnvelopeItemHeader.h */, + 3C80EAE42EB587D68B56A5C4CED3B876 /* SentryEnvelopeItemHeader.m */, + CED63A8241CEBFABCA543D7386B56B0E /* SentryEnvelopeItemType.h */, + 551BB35E3C712DDA178DACCABFA43A21 /* SentryEnvelopeRateLimit.h */, + 9802EE34E6F9FFD1811AF78199EBDCBF /* SentryEnvelopeRateLimit.m */, + EDE839CBA122178697484BEF9BECF4FA /* SentryError.h */, + 689B54FBFF07967EF1A404CF0316B242 /* SentryError.mm */, + 52A19E71F98BD2CAA84B502AB5867449 /* SentryEvent.h */, + EAFF0A1D72037928F26DBD4A5F15241D /* SentryEvent.m */, + 50320404BFF01F18A129183B0C337CCC /* SentryEvent+Private.h */, + C192767F2A4AB5D9C5EE41EBA673F032 /* SentryEventCodable.swift */, + B35A0966B65DB16054066AA015E1677D /* SentryEventDecoder.swift */, + 868B71843A3A0C5871F81E441D659711 /* SentryException.h */, + C16FB91F92FCF7EE5B278BB9AAD6DDB1 /* SentryException.m */, + 1D997B67763BC563D2DD7967BE28BAEA /* SentryExceptionCodable.swift */, + 09F479A31F0BD78425CDCB47E749CF74 /* SentryExperimentalOptions.swift */, + 2E700A685FD8EBECBCF26E1AFD0B2EED /* SentryExtraContextProvider.h */, + 3ABA2E4A6693FE9390380ED94ADB6F3F /* SentryExtraContextProvider.m */, + AE74D23E7EF85AE415B3A683D9CC5C31 /* SentryExtraPackages.h */, + C58494212C3114ECFC538790B00F3137 /* SentryExtraPackages.m */, + D7EF38338515091AA4C76946C8DDD9DE /* SentryFeedback.swift */, + A6AB562B89B46DFF4A53F7436A71C1EF /* SentryFeedbackAPI.h */, + EBE1B49B10F91FE9F03486DAA142F4B7 /* SentryFeedbackAPI.m */, + ABE9A4F7047B5CA0F0E9DFAFB201D181 /* SentryFileContents.swift */, + 44E6965C31564C8CC1589C2C4ED6F9CD /* SentryFileIOTracker.h */, + 680D25FC1D1C2516EB078E63F646D141 /* SentryFileIOTracker.m */, + 470BF913F7D53019E3A526D3E9B05899 /* SentryFileIOTracker+SwiftHelpers.swift */, + 450C9712F3582C5F6928D190E5A22E0D /* SentryFileIOTrackingIntegration.h */, + 9FBA08D83020FDFD54F1C1ADC2A0B1E5 /* SentryFileIOTrackingIntegration.m */, + 26CF693CEF73453AA3CCAF5340A0A14D /* SentryFileManager.h */, + D792184A9AB8B9AA1AAE185E026E65D1 /* SentryFileManager.m */, + 948029A4730DA2DAAB70595E08A0DE26 /* SentryFormatter.h */, + 93B1AA9C2546C314F065772764262F6B /* SentryFrame.h */, + 35C63915FADE137DBADEE5E26D32588E /* SentryFrame.m */, + 753F54012FFFFD42AFABF656AB79C7A5 /* SentryFrameCodable.swift */, + 801359890C957E05995C5A9DE3F23D73 /* SentryFrameRemover.h */, + 0825C4A23F176C3FC423A6783054EB9E /* SentryFrameRemover.m */, + 7534924A5060AD1CC67934DDD8990953 /* SentryFramesDelayResult.swift */, + DCBF273CCEDE27D8C56FA3A8250A33BC /* SentryFramesTracker.h */, + 6BE4BDA822AE557976822765F2B7B83D /* SentryFramesTracker.m */, + 552B32C071B7653D45542DD29EA3802E /* SentryFramesTrackingIntegration.h */, + B46ED8FE1059606448A598FAFA916B0D /* SentryFramesTrackingIntegration.m */, + 19E2621A1FA98E207D7A07A698FD91B4 /* SentryGeo.h */, + B6342F723012AF8852AC4F1966C63194 /* SentryGeo.m */, + EB661E0A7D8C236E2E5D89538E42DA92 /* SentryGeoCodable.swift */, + 1938DED383B67FD8F637FEEBAE7F430F /* SentryGlobalEventProcessor.h */, + 671F9382A4126D5A55576E24D47C5F2D /* SentryGlobalEventProcessor.m */, + A130B05C92B391BDAF34E51CDE1940A5 /* SentryGraphicsImageRenderer.swift */, + AB3602E5F6455132F4E292E10674FA06 /* SentryHttpDateParser.h */, + 767046EE68FEA336E72AB909244174BD /* SentryHttpDateParser.m */, + A52ECA8F50A2C63943F1ADC8FBB3E32D /* SentryHttpStatusCodeRange.h */, + CADDE9A9647F91E7D151ABF1EAAB7037 /* SentryHttpStatusCodeRange.m */, + 10B7B1F0F9E63C5395855656C702BB9B /* SentryHttpStatusCodeRange+Private.h */, + E2DDE768164BFBBE68483A76040892BD /* SentryHttpTransport.h */, + 043E6A45053C7F61725ACA8110E89FFE /* SentryHttpTransport.m */, + 1C239FE55905A818D4817477466EF2DC /* SentryHub.h */, + 972D0DDFFD016B086F9E12707D142036 /* SentryHub.m */, + 93A9BB91031482A7585D5BC11375A453 /* SentryHub+Private.h */, + DB16E9474E3B42771CBCD73DEAD9F9BB /* SentryIconography.swift */, + B03D0F765739BABC924DB4163592AD11 /* SentryId.swift */, + 942CB785F10EF5D302CBEE0B17B22874 /* SentryInAppLogic.h */, + B45463C44779423861F8CC9A10EC1DE3 /* SentryInAppLogic.m */, + 761BE105A5AA23C0EF4E77730748BEBE /* SentryInstallation.h */, + 7BB7055F6886355C95341A84A5DA036A /* SentryInstallation.m */, + 8A4AC60D34897EE4A2A1817B03B8BDFE /* SentryIntegrationProtocol.h */, + F0BCFCD2AC19D74D9D1469678961B4A6 /* SentryInternalCDefines.h */, + 14B7AACFF2F231309B1CC3F0E79F9220 /* SentryInternalDefines.h */, + F7A1D95754B6C14BA494052EE52F8FE0 /* SentryInternalNotificationNames.h */, + 3397846B7AA2F27310F47D9DADD93BDD /* SentryInternalSerializable.h */, + 50A1CC7B949AD3F3057926529ED016B3 /* SentryLaunchProfiling.h */, + D42942DBAC112680AC9219076B4DD29E /* SentryLaunchProfiling.m */, + FD760758EC90E5B840F414265CF91A19 /* SentryLevel.swift */, + 2B8E5A0AF65B2B2E00649D8467C40419 /* SentryLevelHelper.h */, + 0F149CC719361878E22B89970F9BDE9F /* SentryLevelHelper.m */, + 00F335B1294D313270A41CD72CEF2145 /* SentryLevelMapper.h */, + 60C2F6EAD8D037871381A8650AEADA79 /* SentryLevelMapper.m */, + A1A30C9B714366214F409090EDE145BC /* SentryLog.h */, + A6B888DAA0B8319F95350F577A34A962 /* SentryLog.swift */, + F60FB99184606DA379E83532E1C074CF /* SentryLog+Configure.swift */, + D9AEE7B904B6F822F4823028C45E48BD /* SentryLogC.h */, + 8431CD8C532A8DEEB662E2FE721C23E0 /* SentryLogC.m */, + 9C960815AF5A9CC36433E8014FAE64E8 /* SentryLogOutput.swift */, + 80112564CACA3F1A4BE3CC98B0CFA186 /* SentryMachLogging.cpp */, + 8882043BE2E81AC642F94108FEB6E661 /* SentryMachLogging.hpp */, + 70FD76A2796E90020984F5AD24587BA1 /* SentryMaskingPreviewView.swift */, + DB2F3271F4566C0BDFB4196FF1C9919D /* SentryMaskRenderer.swift */, + 2F896A2723E86A8500CA7B550BB64E1E /* SentryMaskRendererV2.swift */, + B8EF53651663A34C25FC46C6814C0A26 /* SentryMeasurementUnit.h */, + 70B7135B7DF46A00145AAFE936274ACC /* SentryMeasurementUnit.m */, + 78D92A19F8C2D52A0F66E8B6429A147E /* SentryMeasurementValue.h */, + 5D6107FADD7A4D6A02EB83A93A57348A /* SentryMeasurementValue.m */, + BC8EC61D3FC344869A3B369946567D11 /* SentryMechanism.h */, + B78012F8184B73CD5BA07D024CD7C475 /* SentryMechanism.m */, + 712D1C0F77040989841F4CDDAFB51A39 /* SentryMechanismCodable.swift */, + A3BCD36EF9F7213689C999CEFEEB289D /* SentryMechanismMeta.h */, + FFAE18C8793F04E16D66A3A645503499 /* SentryMechanismMeta.m */, + 0C106F8A28B9FF9192772B0A8787F7A1 /* SentryMechanismMetaCodable.swift */, + 274B1CED1B8D4CD6287750407D5E4D63 /* SentryMessage.h */, + 9E001A62F25B7B7A9B650A3091AE334C /* SentryMessage.m */, + CF2359FFBE6F63197FB962A1D32CC764 /* SentryMessage.swift */, + 5B7308025EB333D2B55A98C7A0FC1E5F /* SentryMeta.h */, + 6338BB028CB4769B232401C32BAB3B35 /* SentryMeta.m */, + 23E2D18CC0B28AAB2C4650DD4E7EBF71 /* SentryMetricKitIntegration.h */, + 0FDB48DACB41173A07478A764B92A88A /* SentryMetricKitIntegration.m */, + 48991D9FBE861B5B206864421C37BFF9 /* SentryMetricProfiler.h */, + 99DE7F77081A82AE48E64A4BCA50341F /* SentryMetricProfiler.mm */, + F9CFB605F4B51D73F6D831861DE41F5B /* SentryMigrateSessionInit.h */, + 2A80A7A13984B16A5017326FC28E37A4 /* SentryMigrateSessionInit.m */, + 68C767D29AFECF17502A88634DA84F85 /* SentryMsgPackSerializer.h */, + 49A1639BD3DC7A32C3CA6A797E1E1FB7 /* SentryMsgPackSerializer.m */, + E49D6B49784CF0D1FE93A45D08C27655 /* SentryMXCallStackTree.swift */, + 5FA582CB637004BC96A3D1A091653C33 /* SentryMXManager.swift */, + 61D0FBF0FB9B0DD0B15F5A65A023A765 /* SentryNetworkTracker.h */, + 79E62D0B9B9FA0F42403B8F79461611C /* SentryNetworkTracker.m */, + AB5AF804AE8846C9CD01A4E07FC50E56 /* SentryNetworkTrackingIntegration.h */, + 978B9A6D4D3166EA514062544A9156E6 /* SentryNetworkTrackingIntegration.m */, + EB98D830E8E41543E535AB98411B20FD /* SentryNoOpSpan.h */, + 0A9C1914CC63892717E2CB8478F876A1 /* SentryNoOpSpan.m */, + 0D573D5060C8E9CC37160B21F5E892EA /* SentryNSDataSwizzling.h */, + 37C9372E625140AF98A56AC71B1DC432 /* SentryNSDataSwizzling.m */, + EF77AAB993822801A86A4FAF11D57CD0 /* SentryNSDataUtils.h */, + 626A731139D310F97A71D6B1461DA7F3 /* SentryNSDataUtils.m */, + CE986B0045E01CEBF67692FF3AAE6D94 /* SentryNSDictionarySanitize.h */, + 9B410C510F3D3ABF7D884FFBC40A4457 /* SentryNSDictionarySanitize.m */, + 54FF28980D7924C6E4835108FD3E219B /* SentryNSError.h */, + 21F3C8C2EB62EFEBD3CAE9816B2EC59B /* SentryNSError.m */, + B7B3627211F504E596A425413F11F97A /* SentryNSErrorCodable.swift */, + 16493FC5B7C0AC5D3788D851B54CDFDD /* SentryNSFileManagerSwizzling.h */, + FC12DB2166C48A428920120E76AED97B /* SentryNSFileManagerSwizzling.m */, + FEF64A10A0E6C53C68112EDC4760DA1E /* SentryNSNotificationCenterWrapper.h */, + AFDAAC10BE35358D509B630C8414DDF7 /* SentryNSNotificationCenterWrapper.m */, + A1ACDED416CB68F5EAB3AD0C1A53DE8C /* SentryNSProcessInfoWrapper.h */, + 0B4C97CBB8B50F85E6A7E9EB1DE1D182 /* SentryNSProcessInfoWrapper.mm */, + 5CBDD576DAD0CDB871620E3828CD761F /* SentryNSTimerFactory.h */, + D872FB48215B27841F868DB140428098 /* SentryNSTimerFactory.m */, + B398234C45BBBDEEF37448D697DF91A9 /* SentryNSURLRequest.h */, + 71A8569DECA10EFBD288BB23D7146FFC /* SentryNSURLRequest.m */, + 78205A92F2839CDC4A1C28F0B7B7F6CD /* SentryNSURLRequestBuilder.h */, + 4CD6F99BE0B6E03B6B649725645C0B0D /* SentryNSURLRequestBuilder.m */, + 39EFEC74A4F6F18F91E7272FB3627AD5 /* SentryNSURLSessionTaskSearch.h */, + 0F2C22B83D91632FEE29FC7C9BCE0D19 /* SentryNSURLSessionTaskSearch.m */, + 5474B4DCA2758234891C7C33F4150D85 /* SentryObjCRuntimeWrapper.h */, + 151525B4A0622A06FC999E601AC07B74 /* SentryOnDemandReplay.swift */, + 3A4DB2B88278CCC63A35AFF04CD01C39 /* SentryOnDemandReplayError.swift */, + F451BDBC211EF22CA3D935AF49D0E393 /* SentryOptions.h */, + 9448B8D33A8B8886752785AD18161DF1 /* SentryOptions.m */, + 92D72DCE8B696F2B887D26F23A9F6C13 /* SentryOptions+HybridSDKs.h */, + 4B3CE00499D0DC4D8CD0444C39AAE976 /* SentryOptions+Private.h */, + 7B5B51C125C702370ADCAF158ABCD3EF /* SentryPerformanceTracker.h */, + 3CAE2FCC3E4271135530031AB7E5D8D8 /* SentryPerformanceTracker.m */, + 049E23F5B81F0F22B9FA86B657E1BBC2 /* SentryPerformanceTrackingIntegration.h */, + 791BB305952470D5437C5B53ADE67EA2 /* SentryPerformanceTrackingIntegration.m */, + 316236D9C173411539F7E7F4A637842F /* SentryPixelBuffer.swift */, + 0A75E814B2BB31AEBA39926C9406663F /* SentryPredicateDescriptor.h */, + 630A4D35030DB487DB342C88474FB58A /* SentryPredicateDescriptor.m */, + 593751EA69F36F6172EA650E840CF54F /* SentryPrivate.h */, + 9F8668C520399BA6040828B01D2D0DB6 /* SentryProfiledTracerConcurrency.h */, + C4D6EFB2B1362021F1D712F86CF33CEF /* SentryProfiledTracerConcurrency.mm */, + 3BFA36DAFE25C26848B65D5B9546792C /* SentryProfileOptions.swift */, + 2641BD78E03439DE79614893EF6BE10F /* SentryProfiler.mm */, + 68E8C41B49F81031BD965867BD9FEA99 /* SentryProfiler+Private.h */, + 1DDE95EC68375C1B66CB9573441844D9 /* SentryProfilerDefines.h */, + 985518D47F23D213ED423113D40FE92B /* SentryProfilerSerialization.h */, + 9AF02E3E80A14C3AB15F7F1941ABFF37 /* SentryProfilerSerialization.mm */, + 653D91BC0ABA78E68D1ED49B2D755DEF /* SentryProfilerSerialization+Test.h */, + B0DEAD6A40976ADF39177FF5C3368ECE /* SentryProfilerState.h */, + F9751428F54E530C5952402C24C65443 /* SentryProfilerState.mm */, + C88092370104A9779634B014B6CFC897 /* SentryProfilerState+ObjCpp.h */, + 524E182F82AEB8CD9194A07F1BB027E8 /* SentryProfilerTestHelpers.h */, + FD6A10FD3DBBD95204783545F7E92E42 /* SentryProfilerTestHelpers.m */, + A279C443C60B1D2BCEC66CB27950153A /* SentryProfileTimeseries.h */, + DC9AD2CB1B51FEB4E6E5F500A12B8369 /* SentryProfileTimeseries.mm */, + 5DBC18A079049AE86C045E2A6F3913B8 /* SentryProfilingConditionals.h */, + 96F36B319C20D9CCECB8380DAF1D0E43 /* SentryPropagationContext.h */, + 5910F46B3D41DBDA7CB13B4C14C3CF92 /* SentryPropagationContext.m */, + 2F25F3CE7B1A0BBC43D6EC09C657694D /* SentryQueueableRequestManager.h */, + BE391DB4728D2CA5CEC5C03EA5E17122 /* SentryQueueableRequestManager.m */, + D1EF3BDAAC4CA8F686FDF7887BF26532 /* SentryRandom.h */, + 00F35667B0A3D2412ECC5172862CC3F7 /* SentryRandom.m */, + D8C0E7D478EAD9ED8B1713A1FF92DF9D /* SentryRateLimitParser.h */, + F05B10FD20805229FA5603F07372AB8B /* SentryRateLimitParser.m */, + F83A5CF950B53A27A5D17222EF446777 /* SentryRateLimits.h */, + 2A5502C1BB41C9CB48FC04B0AA902541 /* SentryReachability.h */, + EDDD2760E0F22210874A3DCB8C6223F9 /* SentryReachability.m */, + 2723DF245A3E8BD4D7727FD8CAC6C354 /* SentryRedactOptions.swift */, + F4DADCFF9AD9131B6560FF74219F2EFC /* SentryRenderVideoResult.swift */, + 92AFDBA9D5CC855EA00FB21CDCD61E55 /* SentryReplayApi.h */, + 1DB22B97642F1FD219E44FBE2BE4C5A5 /* SentryReplayApi.m */, + A42039A24680DB263DDCB2E0BC8A9F0E /* SentryReplayEvent.swift */, + 790E56B0AC092A74B4E24B29B36EFA61 /* SentryReplayFrame.swift */, + 6F6606D384C7504B41F7E421FD83752E /* SentryReplayOptions.swift */, + F49B408433BFA6CB28661256C630D5CC /* SentryReplayRecording.swift */, + 6F3075B9EFB5A520D04DE0B8930B7FB1 /* SentryReplayType.swift */, + 879DC3AEC1FE349460CCF05A0E44311F /* SentryReplayVideoMaker.swift */, + D210B554E20E4A035B2898D255F0A365 /* SentryRequest.h */, + A0095ED28923BB433C6936C719EF5BF8 /* SentryRequest.m */, + 8787C7AD08C4D777BB7FC083F3099E0E /* SentryRequestCodable.swift */, + 20B81C9973FFA15370060C4E472BA317 /* SentryRequestManager.h */, + A0420ED2F06C298E891E27608911A133 /* SentryRequestOperation.h */, + D796B4EABFA42393A5836CAA14AD6FA6 /* SentryRequestOperation.m */, + 56B0382EE064056D6F3A2E9B182CB2AC /* SentryRetryAfterHeaderParser.h */, + 152C2563896D6BC7DE77128922674517 /* SentryRetryAfterHeaderParser.m */, + 22AB0FEDA7EAD5C85C1FDE15ED1A9120 /* SentryRRWebBreadcrumbEvent.swift */, + 25800E26608878D462E3E6D61075B16F /* SentryRRWebCustomEvent.swift */, + 11617A193A6E07D8C0F5EDD6B18C9EAE /* SentryRRWebEvent.swift */, + F97689C32B053EC22D6AB6C52E6FB7B4 /* SentryRRWebMetaEvent.swift */, + 4368713B1FE88AF5DA10E9243D722F26 /* SentryRRWebOptionsEvent.swift */, + 41BBB46D1FC26E9A9EEE21EAD0AF902A /* SentryRRWebSpanEvent.swift */, + 8F545D7F8B2046D3F801B76E41366D28 /* SentryRRWebTouchEvent.swift */, + 3811493C5079B9277374661C1B287BE6 /* SentryRRWebVideoEvent.swift */, + 6994371A271453DE37CF3696D10832D3 /* SentrySample.h */, + 8E1205EF093247098739F118D081AC02 /* SentrySample.m */, + 0D479123FFF32CFAE54A474073412A73 /* SentrySampleDecision.h */, + 692EE743E6B42DEF470106A9BE2480C9 /* SentrySampleDecision.m */, + 23698092F85C73C0B4783BA0CD4865BA /* SentrySampleDecision+Private.h */, + 49B29681374060812EA7A9A552877F72 /* SentrySamplerDecision.h */, + FB2B5123344E3450B3DE3F5ECDDC16BC /* SentrySamplerDecision.m */, + 485C496F42583F102554E3C3FF0DE554 /* SentrySampling.h */, + 34F40A24EF070935EAB8080FEC19E264 /* SentrySampling.m */, + 85E0C5CEB1BBD25DA922B268963AEC14 /* SentrySamplingContext.h */, + 626D2BE20859CA5A395F1C969F689591 /* SentrySamplingContext.m */, + D091905D5DFC8D1E70DE497E1D01DCCD /* SentrySamplingProfiler.cpp */, + A416897A0822626DBF259384531555A0 /* SentrySamplingProfiler.hpp */, + AC48BBE59A92DDB13D38B820F3F678C9 /* SentryScope.h */, + F866153E81C58FF17A1278AA81319568 /* SentryScope.m */, + 391C2BF6E54F38FEEFC8ECA4CF69623D /* SentryScope+Private.h */, + 5C510B32A1849EFD9BE230E7831DE35E /* SentryScopeContextPersistentStore.swift */, + B5E0D3724E4DDE5EC0334CDA4A188BDE /* SentryScopeObserver.h */, + 253295F694E7890A00F07B7CE7B2D381 /* SentryScopeSyncC.c */, + 779346D5BB5D5727452F040B2C854FF1 /* SentryScopeSyncC.h */, + A7D45B793B8653991E78532EB0E7A687 /* SentryScreenFrames.h */, + 8DC22CECBBE3E67CD8D9359EDC1C1CEF /* SentryScreenFrames.m */, + 66E753CD0477257070A087BD81802C7B /* SentryScreenshot.h */, + 603FFDB6420C6830994B52F4E6633EC5 /* SentryScreenshot.m */, + A33CB6C1BE62CF73171734DD2FABA749 /* SentryScreenshotIntegration.h */, + 803B67F9CE05575013E5ADC8ADB47651 /* SentryScreenshotIntegration.m */, + F407A101E944888391EA94B0FB530C8F /* SentrySDK.h */, + 997616B6DA81D6F3C87407FFF729C3AF /* SentrySDK.m */, + 418EADF1958EC0B72736CF1ACE9AC785 /* SentrySDK+Private.h */, + 237B85ED6F21DC95418B8CC837360902 /* SentrySdkInfo.h */, + 1D9078F0D390FA276D09B7FBD1E1C37B /* SentrySdkInfo.m */, + 3F50E054F032942659168740045E84AE /* SentrySdkPackage.h */, + 1023631B2DDAFDC722D8F521E02CC448 /* SentrySdkPackage.m */, + E5BFFB554D6A95231397D224FCBE6847 /* SentrySerializable.h */, + 39B0FA1FE890CA999B3D2831011107B2 /* SentrySerialization.h */, + E7D040C37DFB42A6B0E036B875FF1959 /* SentrySerialization.m */, + DFE5091698975C1345A5BB944AE573BC /* SentrySession.h */, + 608861AAFB8A9A37D02A662816346B36 /* SentrySession.m */, + 8E7D33B94A1B9DBFC2DCD2DFF44F66DE /* SentrySession+Private.h */, + F67BCCF7FA50880126FC18B5F463485B /* SentrySessionListener.swift */, + FB603C3EAF7E3528B9B23815FEE3209C /* SentrySessionReplay.swift */, + E93EA72DF2CA700E681C64D9FF5F5FCA /* SentrySessionReplayDelegate.swift */, + 1ECF7428D7D48B6B324E1A1B692CEF6E /* SentrySessionReplayIntegration.h */, + 69FC9A493447CC0C47EFDB9709BF76FE /* SentrySessionReplayIntegration.m */, + 7BE2FF0132BDD1ECAA2EDBDDBD62CBEF /* SentrySessionReplayIntegration+Private.h */, + 40D9B4E23D028CC45D6ED68BA88D78D5 /* SentrySessionReplayIntegration-Hybrid.h */, + CF8FF95516B2F152E962F6C71C3ED8FB /* SentrySessionReplaySyncC.c */, + E2F95EB4A673FB421E155C6411A70419 /* SentrySessionReplaySyncC.h */, + EF16DC366ECD6B929DD0A891AC53C431 /* SentrySessionTracker.h */, + C796AADF925BE2B926ABA6BD4279FEDC /* SentrySessionTracker.m */, + 004E9D8F0572D852FBD4217E5F36B340 /* SentrySpan.h */, + 26E98CFCB2D54038D5E16D80413A5E59 /* SentrySpan.m */, + 8DFF64F1A541FA55FB0E0B906D45F16C /* SentrySpan+Private.h */, + F9767DDC70218C85369C2B63DB39AC85 /* SentrySpanContext.h */, + 9CB06B912B54A368FD5987358A227924 /* SentrySpanContext.m */, + A6CCA424894D6D2DE3A103A3AC34D506 /* SentrySpanContext+Private.h */, + 07A1CB7ABC4CB0A39DF6B67D3E17ED3E /* SentrySpanDataKey.h */, + C428B8116EAAA28CD94300AFED41D724 /* SentrySpanDataKey.m */, + 165973CD36A0311D8D356B3626E22174 /* SentrySpanId.h */, + A507AE1FFF1F537AD1D200F9331240B3 /* SentrySpanId.m */, + 4F09EB9964B5FE3C5D6F2365842E27F3 /* SentrySpanOperation.h */, + 1BB65EB30E6B3A338389AB76D4C7C21E /* SentrySpanOperation.m */, + A6E79D678484A20FBE09F8E74060B9AF /* SentrySpanProtocol.h */, + AD92D7F1003AD0C23D2C15B9FC128D72 /* SentrySpanStatus.h */, + A0BF15DF33FD6B2353C4BFF2ABBC0D07 /* SentrySpanStatus.m */, + 00700DAFDF27E96BF9E57ED2F340FA09 /* SentrySpotlightTransport.h */, + E1FDD1A0A32D4A1C67B66E9C27ECD239 /* SentrySpotlightTransport.m */, + 9D326D07867B7B21C8779DB2B151C283 /* SentrySRDefaultBreadcrumbConverter.swift */, + EFC9CCCBA99E17CCBF2B9C9DDAEB2455 /* SentryStackBounds.hpp */, + 4B133E75C9F7EBC7E643723106C3732B /* SentryStackFrame.hpp */, + CB5B404568287168B94D32C501CF7758 /* SentryStacktrace.h */, + 9E00BB3CF3266C62EEFB535D21DC0BE9 /* SentryStacktrace.m */, + 993CF4388221193C6C987F7A3F902399 /* SentryStacktraceBuilder.h */, + 905C379BC198F2746E9035C78DACDA5E /* SentryStacktraceBuilder.m */, + 13E746206C311B3619755484CD786ABA /* SentryStacktraceCodable.swift */, + ED8E8998B575E9D0F374F5EA95BE52A3 /* SentrySubClassFinder.h */, + F15132121431EF0247B64069F0CA9722 /* SentrySubClassFinder.m */, + 902956407F04A8529E31397B44044937 /* SentrySwift.h */, + C0DA99FF20D6602D9E3BE42E87CD38E0 /* SentrySwiftAsyncIntegration.h */, + 077CDD946DE2806683A1D4BE19AE5018 /* SentrySwiftAsyncIntegration.m */, + 737DBCA538EEF16C5CE6DA6F6ED51FC7 /* SentrySwizzle.h */, + FFAEA1F05A0658B4A0B5CEEDDA89D765 /* SentrySwizzle.m */, + 3DAFF5FDBEAD7BA25D4D7B2500CA8B22 /* SentrySwizzleWrapper.h */, + CE73E9AD4131629352FB52E7DA588C11 /* SentrySwizzleWrapper.m */, + 8AEED5DE1B8557ABD0BF34522210EDF1 /* SentrySysctl.h */, + 37E037BE692A1A0CF1878CF5F94EDBB2 /* SentrySysctl.m */, + 429105E10E5496746F1E3568999BBFD7 /* SentrySystemEventBreadcrumbs.h */, + 01B63CA809BEF8900F931C9747D4F055 /* SentrySystemEventBreadcrumbs.m */, + F1B42BBA860B282A2F0AF43C80AAA3C5 /* SentrySystemWrapper.h */, + 349D0679DE687C71E44AF38C213E94BA /* SentrySystemWrapper.mm */, + 9EF723904C58EEEBA7F0FC57E76F60F1 /* SentryThread.h */, + 4BDB86C5FEB06CBC40D536435F0A6253 /* SentryThread.m */, + E191F7C692908966320448D84B64D5FA /* SentryThreadCodable.swift */, + 4A9B972E4B599D01FE20772DD4F8BA84 /* SentryThreadHandle.cpp */, + 1AA62902933987086690BA9DDEBDC798 /* SentryThreadHandle.hpp */, + 8CF6E6C705AB59F50EA0D4AD6BA9F8CF /* SentryThreadInspector.h */, + 6D6B7CA09FB9A842CFCB7952A9C2099B /* SentryThreadInspector.m */, + 033950F001665A8484A9EB48A1B52F12 /* SentryThreadMetadataCache.cpp */, + A3BBA64625A152A56BECC443B01EC490 /* SentryThreadMetadataCache.hpp */, + E5C966A0EC914D5EE46BE39ABE8CBA87 /* SentryThreadState.hpp */, + 379BCAC282AF45EF53C5AB10EFF1381D /* SentryThreadWrapper.h */, + 4BC59CF996A489057C315856409524E7 /* SentryThreadWrapper.m */, + 7338F9FF638CCA8710054E9A1F262E5F /* SentryTime.h */, + 4E05A8E2066D10DF0929835920C1746D /* SentryTime.mm */, + 0B52F4F51D3A10B2D5148EB70139AD24 /* SentryTimeToDisplayTracker.h */, + 1B52AD8B3567709904C6FE56F48D3453 /* SentryTimeToDisplayTracker.m */, + 3B4A0BA061D8447BF292ECB5B6EE7AFF /* SentryTouchTracker.swift */, + A4BAAA8F7F968CA32CC27AFA6CA33C47 /* SentryTraceContext.h */, + FB8EC01BA0C474B16B4C1A4C057605AE /* SentryTraceContext.m */, + DCE90B00255F2927CE141770B326E2F5 /* SentryTraceHeader.h */, + FD87772C2442EFF67AAC22A28D5384EE /* SentryTraceHeader.m */, + 1A1EF8C4703A132FD63BF29BC9036624 /* SentryTraceOrigin.h */, + F8DB94733E03560E5A2C7A94D9CB5C0A /* SentryTraceOrigin.m */, + D418462B04DDDA7D63F4BD1479B611B8 /* SentryTraceProfiler.h */, + 2188E143DDE107B1C5301D66F167D9EB /* SentryTraceProfiler.mm */, + 4560AB5859635E3ACE377AD42C07D96C /* SentryTracer.h */, + 9773F177546E1954F32757DEDB59677C /* SentryTracer.m */, + F0CF2F51A62EFD082A3A49DCAF25C8BB /* SentryTracer+Private.h */, + 0C6769C935F89ECA02D9BD5593B5893F /* SentryTracerConfiguration.h */, + 058190E677CEDCFB61A886E056E82508 /* SentryTracerConfiguration.m */, + C34BC0893A5319CBEDC74F1CF83EFEB6 /* SentryTransaction.h */, + A4B8FA7CA3389D3F77D2A5DC7FA90DEC /* SentryTransaction.m */, + C42A1F14CCFDCD30A11BCF25E8EA144E /* SentryTransactionContext.h */, + 5F4F15C25AF2BF307B81D105E417B9CB /* SentryTransactionContext.mm */, + 4E633D058AB81487F408737C19DFF697 /* SentryTransactionContext+Private.h */, + B592BDDEDC3B796CD7CDA4B41FDB78BB /* SentryTransactionNameSource.swift */, + AABF144E4FECC804C88660851E7404BD /* SentryTransport.h */, + 11006FBB2800F74CE11220FD8E6F9E38 /* SentryTransportAdapter.h */, + 926AA2D4E5E1CED329F2F95CFF5FD2CB /* SentryTransportAdapter.m */, + 04582A5798B98EB4AF71CA40FF4EAE81 /* SentryTransportFactory.h */, + EFC1CB0E264A9C5A2B66D9D149C7016E /* SentryTransportFactory.m */, + 36B2B3792103264900DFCB8E8272902A /* SentryUIApplication.h */, + 5BE193A78A30E6667AB07E47D03C65C4 /* SentryUIApplication.m */, + 102D810320BAED7D73F0F729F69F8E6B /* SentryUIDeviceWrapper.h */, + 1F7E686FD62F8C27530845E92C210C0B /* SentryUIDeviceWrapper.m */, + 4EA7FCD80FE5A77CCF48BBF5C05D6DE0 /* SentryUIEventTracker.h */, + A43554692DE28A726723B5003DB600EA /* SentryUIEventTracker.m */, + 5AA652C709B56A0B405A3467A2B83D3D /* SentryUIEventTrackerMode.h */, + 59EDC34955C504DDBCF8A1AD1297F174 /* SentryUIEventTrackerTransactionMode.h */, + C623F9BD27CF3F02A1CA571BE5BC8D56 /* SentryUIEventTrackerTransactionMode.m */, + 1786C01754EC8C5B78CB5EE6F0768E26 /* SentryUIEventTrackingIntegration.h */, + 0056FAD39DB21391884A09035A6D2260 /* SentryUIEventTrackingIntegration.m */, + C82B4EE1530BCF01766CB046EEF27F35 /* SentryUIViewControllerPerformanceTracker.h */, + DE3CFC8EBFAA9FB970C25D425FCE1A0F /* SentryUIViewControllerPerformanceTracker.m */, + 3BFA2A57FE74C0109751D246FA015350 /* SentryUIViewControllerSwizzling.h */, + 71924EE8FD21994FEC60C7192D798591 /* SentryUIViewControllerSwizzling.m */, + 796356051463C4A0B91272A9A74D6F35 /* SentryUncaughtNSExceptions.h */, + D0179E9161467D79028511F818361982 /* SentryUncaughtNSExceptions.m */, + 021859CFC2B32F8EC80EDFFF4FF61E5C /* SentryUser.h */, + 0FF5016A53C87B7327B6FAD067C8D889 /* SentryUser.m */, + 21F2D2480974F5A56CC0FAF78D6BB097 /* SentryUser+Private.h */, + C78FBA240F2965B3B4E28D3EDDE8995A /* SentryUserAccess.h */, + 38A7C69557DDF773EC87A366583F8B45 /* SentryUserAccess.m */, + B42A3EF716427D6B5B709CD87D5E171B /* SentryUserCodable.swift */, + B67906939A2348172FE9659844C6747A /* SentryUserFeedback.h */, + 6057AFB6E368501A096D36AC5200D8CA /* SentryUserFeedback.m */, + 54E33F6BE33F82C2674E878286B290EC /* SentryUserFeedbackConfiguration.swift */, + A0C4FD24B189D37A784C7FA3A67B7B84 /* SentryUserFeedbackFormConfiguration.swift */, + BF32B9A7EE205072661EFE7A2480EFE2 /* SentryUserFeedbackFormController.swift */, + C2D59258969035EB099022748EA11377 /* SentryUserFeedbackFormViewModel.swift */, + 057AD729AE1188D62A26375A83AC4116 /* SentryUserFeedbackIntegration.h */, + BA57C65239884442883C333375A3C57C /* SentryUserFeedbackIntegration.m */, + E553A9EB4198D14179778FD1BE2007B1 /* SentryUserFeedbackIntegrationDriver.swift */, + C823581AED4553C5C6E46D9AA85B4C48 /* SentryUserFeedbackThemeConfiguration.swift */, + 48CA33A799DE7529D5F98E4C436AB560 /* SentryUserFeedbackWidget.swift */, + 610BB5A8905145D2EE889BB7223C140C /* SentryUserFeedbackWidgetButtonMegaphoneIconView.swift */, + 6A755AB12FF42EC1906EFDC999FD041D /* SentryUserFeedbackWidgetButtonView.swift */, + EB25D52BDCCA8BADA23CDDB732970728 /* SentryUserFeedbackWidgetConfiguration.swift */, + 009C928869658FEE95DB027504142E72 /* SentryVideoInfo.swift */, + BA5942D9455C32587D025AFF9656C9A8 /* SentryViewControllerBreadcrumbTracking.swift */, + 0309089EC7FB1181A7DD80466907B8C6 /* SentryViewHierarchy.h */, + 4A614C469B3A69DBEC8E243609F766B8 /* SentryViewHierarchy.m */, + 5FBDF0C2BA961DE92ADF6FA319B00B20 /* SentryViewHierarchyIntegration.h */, + 65922E3A45166DDCA4173E5BDC28BF83 /* SentryViewHierarchyIntegration.m */, + 2A79989E04584B70FDCF4FB0E6FFC504 /* SentryViewPhotographer.swift */, + D5C2BA3093CA54F9EAA36262AD80B8CC /* SentryViewRenderer.swift */, + FF0C274C930CE18FE5E126F2264578DF /* SentryViewRendererV2.swift */, + C07339D3D8A51AE282986026D39FFE23 /* SentryViewScreenshotProvider.swift */, + 2C4A091BDDB40BA378161CF539D14D11 /* SentryWatchdogTerminationBreadcrumbProcessor.h */, + 4EB507D998AA7F2F2A28634AA05F2537 /* SentryWatchdogTerminationBreadcrumbProcessor.m */, + 9915491130B686F27F2481A44F5A4A06 /* SentryWatchdogTerminationContextProcessor.swift */, + D58D07EE1B2F64368291080C9CE7638B /* SentryWatchdogTerminationLogic.h */, + 1BA37EA8EBDF8452273DABA4B7A44C40 /* SentryWatchdogTerminationLogic.m */, + 2DA940F1554158B255A21A9E225411EB /* SentryWatchdogTerminationScopeObserver.h */, + A059A28870B5D0DFCBE9719234C0FDFC /* SentryWatchdogTerminationScopeObserver.m */, + A139368FACD29D3F545E73A99828C356 /* SentryWatchdogTerminationTracker.h */, + 6A1A6B9A785A451370BCE0D1A30B12A4 /* SentryWatchdogTerminationTracker.m */, + 93823E72A4537D395A60EDB02FBB61A3 /* SentryWatchdogTerminationTrackingIntegration.h */, + C3E4A324E1C9C10A80A3F94A8227322D /* SentryWatchdogTerminationTrackingIntegration.m */, + 23F4CF1FE6BE7A0530D0A1896F8B769F /* SentryWeakMap.h */, + 760534382C7512D529F3B65DE1CAB4DF /* SentryWeakMap.m */, + B7F9C204A84B9AD912DBC085F2A35F07 /* SentryWithoutUIKit.h */, + C2AEC4A7F86D4B04ED290F84C4F3F1A8 /* StringExtensions.swift */, + 16611112816943270A01EE37757D4D25 /* SwiftDescriptor.swift */, + C3D6FEAF72DB40ACDB634885253F02CE /* SwizzleClassNameExclude.swift */, + 5620272E87C0CAC0C9AC2E6B49ABD96A /* UIImageHelper.swift */, + 380720F289D32D2C48334147581D9570 /* UIRedactBuilder.swift */, + F87EB4D917774B89F9474698C8FD5E46 /* UIViewController+Sentry.h */, + 30A8A3DAC173E05B2F0BB40A237D3A21 /* UIViewController+Sentry.m */, + 6D826AB1169755019A7446381B83EC43 /* UIViewExtensions.swift */, + 81E3767A4C7B40C1BC79A72F0D5A95EC /* UrlSanitized.swift */, + 6F2BBF0C74419D0A425C4C44E66854A0 /* URLSessionTaskHelper.swift */, + 8445A8D3E81F7A765483CB1ECA059068 /* Resources */, + ); + name = Core; + sourceTree = ""; + }; 7EA62FAC66764F31FF2E3931ED0F2ABA /* Products */ = { isa = PBXGroup; children = ( @@ -2357,16 +3185,24 @@ name = Core; sourceTree = ""; }; - 867FCA354756169F08AD7A9F37B347D3 /* Sentry */ = { + 826792748E50A4D37C6531107B94C3A0 /* Sentry */ = { isa = PBXGroup; children = ( - B6EB9FDE074F2C204CB52374CC7C4FFB /* Core */, - F361419324831EE58662068E1D7C8A68 /* Support Files */, + 75B9B682E0A4F4D07346728ECB69B45F /* Core */, + 6B8711BA296A994C2F8A42543B148BB2 /* Support Files */, ); name = Sentry; path = Sentry; sourceTree = ""; }; + 8445A8D3E81F7A765483CB1ECA059068 /* Resources */ = { + isa = PBXGroup; + children = ( + F54EF32EF2FE2D4E238B2148553D7C6D /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; 870D4F0EDCAE7EAE968C9A6CF546987E /* Support Files */ = { isa = PBXGroup; children = ( @@ -2449,14 +3285,6 @@ path = ASCIImage; sourceTree = ""; }; - 99BA89E15C26B7454FA95255EA36E3FA /* Resources */ = { - isa = PBXGroup; - children = ( - 1CF4989A7F6983CF4E3BC2E9331D3C61 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; A44CED65C5F2F188A1EBCB57EE12D511 /* Resources */ = { isa = PBXGroup; children = ( @@ -2465,621 +3293,6 @@ name = Resources; sourceTree = ""; }; - B6EB9FDE074F2C204CB52374CC7C4FFB /* Core */ = { - isa = PBXGroup; - children = ( - CBB2C1F5D10BEBE1E6A14A285137D1E4 /* BucketsMetricsAggregator.swift */, - CE4A38DC078003E8E69BA3A210BDC45D /* CounterMetric.swift */, - 15512899988C364C168E70B72C604302 /* DistributionMetric.swift */, - F5C68D304D045C97D23C0F0D2BB3F9CA /* EncodeMetrics.swift */, - EA78382FB58123C1DFD3FDA35DAEF4E3 /* GaugeMetric.swift */, - D56051679D48037350F252332E0CA809 /* HTTPHeaderSanitizer.swift */, - 2737A1251BECEA0E11B80744EBB8B7B2 /* LocalMetricsAggregator.swift */, - 6D9857E7C8B38270B20330F5F9788C6D /* Metric.swift */, - 8A72E88B446CC4FE89F2C74FAE7E744B /* MetricsAggregator.swift */, - 2C8285DF218C57961D66C58B70E3D3D2 /* NSArray+SentrySanitize.h */, - 5BFED552A97F318C920527A79292C078 /* NSArray+SentrySanitize.m */, - 487C769E7266A3462A910FF846140E41 /* NSLocale+Sentry.h */, - 902BCC112991AEABE78136494D482BA0 /* NSLocale+Sentry.m */, - E1A387DC8BF0E02240242ADA0ADDDD2F /* NSLock.swift */, - D4728057230514E522E9B3EE21424811 /* NSMutableDictionary+Sentry.h */, - 92B0C7B5929F085D529E99BB413EBA79 /* NSMutableDictionary+Sentry.m */, - 0DDE50D95A92454E5D369FF2EADFDDBE /* NumberExtensions.swift */, - 66D0B7DE74CC0F6BB0D985B0D2E12499 /* PrivateSentrySDKOnly.h */, - EFAD24B74F9B012A20554D15DA5530E5 /* PrivateSentrySDKOnly.mm */, - 1252BACA64EB5080BCB73AF65E445532 /* PrivatesHeader.h */, - DDF0E35C376AFA8DF8EE725332C50087 /* Sentry.h */, - A76009F81F962EE26C018F3547969E51 /* SentryANRTracker.h */, - B7BBAB530A555954C19FC09FF62364AB /* SentryANRTracker.m */, - EBC8D3D124AF01ECB6C8DE459047F25E /* SentryANRTrackerV2.h */, - 0EB6B9CCF596CF764C4142E1A6360B5E /* SentryANRTrackerV2.m */, - C308E3127DA95097A40019F21A122569 /* SentryANRTrackerV2Delegate.swift */, - 0EA8152475FEE15B6FE5EC1AC42BFBF3 /* SentryANRTrackingIntegration.h */, - CE6EDC7E18E7AEBC9AF4C3A9F4AC51DD /* SentryANRTrackingIntegration.m */, - 560D47C2A849C53E2AF646879CA2260E /* SentryANRTrackingIntegrationV2.h */, - 9D5EB7615C4518DC633202C82F4FB3DB /* SentryANRTrackingIntegrationV2.m */, - 147B7F5CC85430E54956EB11E8C17492 /* SentryAppStartMeasurement.h */, - F148ED6700444C023C6D1688CC450EA7 /* SentryAppStartMeasurement.m */, - 2ACE0EDB752A847C495ECC70D33F8F10 /* SentryAppStartTracker.h */, - 08DB5108D5E258D377397DE8CEF27F0E /* SentryAppStartTracker.m */, - 45F39E50DC59A483ED314FAE0E0D0656 /* SentryAppStartTrackingIntegration.h */, - 205269A9ED2EB2F68381619F1B95743F /* SentryAppStartTrackingIntegration.m */, - E9C3DB60DD7A816B42CD3A98B30CC1F5 /* SentryAppState.h */, - 36DB3F3CE4F488C2E33D99FCCEA4A1A2 /* SentryAppState.m */, - 04BB2B1F108331EA9E29355D76CD4A0C /* SentryAppStateManager.h */, - FDF5B751E4E7E5D35CDEC8E4F4D16C8F /* SentryAppStateManager.m */, - FACA3EE8080865D9EAAC5F613346CD54 /* SentryAsynchronousOperation.h */, - EE4566783FBCA3EA9BC775540E00FCFD /* SentryAsynchronousOperation.m */, - 3BB002B4E1D9B65F4E897CA0FB7A4B36 /* SentryAsyncSafeLog.c */, - D6F6177F7FAFA22A6C7F338309F72960 /* SentryAsyncSafeLog.h */, - E42C47184EEEB774E7E12B9BF7B0AE29 /* SentryAttachment.h */, - 0EF263FD48C8F7F05317ABE1FCDD7975 /* SentryAttachment.m */, - A677BC0259318FAE26742F4AB3B60073 /* SentryAttachment+Private.h */, - 1F2105B47F9F8C88AB59F95F1C674154 /* SentryAutoBreadcrumbTrackingIntegration.h */, - E0C2CBA4FA98212DC9EFDCEA40D485D3 /* SentryAutoBreadcrumbTrackingIntegration.m */, - 7701374A0A4E09CC6B6CBFC6416A01D1 /* SentryAutoSessionTrackingIntegration.h */, - ED8F86ECF84DAA6A3B818DF42492999D /* SentryAutoSessionTrackingIntegration.m */, - 71DE99D8F0C29A1369EF94E43F95E420 /* SentryBacktrace.cpp */, - 0FAE83AB057D97E3311CFDD8CCE13E9C /* SentryBacktrace.hpp */, - 0C3675E74D83886A4BF11E7B90F60322 /* SentryBaggage.h */, - F073A2002AE6CBCE085BF8EFB96FC354 /* SentryBaggage.m */, - 518AFFCFD8120E2F662E84143B688507 /* SentryBaggageSerialization.swift */, - DEABC0B771792792AB178CFB5773FB1D /* SentryBaseIntegration.h */, - E4E03AA1DEA9A0040B4C1CA2DFE7FBA2 /* SentryBaseIntegration.m */, - 248BEF94FE4A65DB0AEF15CEFB59037F /* SentryBinaryImageCache.h */, - D2DF52B986595B4CECC7F4BF64A701C8 /* SentryBinaryImageCache.m */, - 6EADD5D02E4BEE92ADD5C3EE6C804B54 /* SentryBreadcrumb.h */, - F33A08139F6DA0D74D725558DD8AEDC9 /* SentryBreadcrumb.m */, - 7655D11D7A9567233A0450A12A09DC77 /* SentryBreadcrumb+Private.h */, - FA5C8572117BD227C602DAC5FEE82105 /* SentryBreadcrumbDelegate.h */, - F9049991B084FFDA352B82E541333219 /* SentryBreadcrumbTracker.h */, - D8CB058DFCC85223CFAE3D019F022847 /* SentryBreadcrumbTracker.m */, - 1277E8E4CE73DDF6CAB9635A02F4DCD8 /* SentryBuildAppStartSpans.h */, - 2A8244CB203653C9A3DC1B5B2EBF9AB7 /* SentryBuildAppStartSpans.m */, - A6D2097B716EF157FA6D7B87E43DBE27 /* SentryByteCountFormatter.h */, - 0B804911071F4F15412FA71EBDF64CD8 /* SentryByteCountFormatter.m */, - B2FB74BC40327781D5FAC957AA284242 /* SentryClient.h */, - 55B1DE5664ECF76C263A541380A52324 /* SentryClient.m */, - 2A8D9DCCE19363B242DEE9AF8941359C /* SentryClient+Private.h */, - 6CF7FEDFAD1744DA4BB5333CEE706396 /* SentryClientReport.h */, - F33BE47A11BA82438326290199F19337 /* SentryClientReport.m */, - 1EC9ECEC29A57ADCCBB3879ED5D2BADD /* SentryCompiler.h */, - 6CEC1A2F877C5B257C8E8CE0F10E4A9F /* SentryConcurrentRateLimitsDictionary.h */, - E6C750537F82086F752F1CB28A85A5BD /* SentryConcurrentRateLimitsDictionary.m */, - 950F8A353817C1C4137FC38F7641CF8C /* SentryContinuousProfiler.h */, - 5E4AA9BD98548AD9E19C1F22443523B5 /* SentryContinuousProfiler.mm */, - 461B669F0C36F11FE6B3BABD5BA67277 /* SentryCoreDataSwizzling.h */, - 3495B8C94EDB6B1179F5143DB18AC308 /* SentryCoreDataSwizzling.m */, - FF7BAF8D55ABC56552423146B4547A0D /* SentryCoreDataTracker.h */, - 62E1EDB5108C9078E4E19EAAE793CEA7 /* SentryCoreDataTracker.m */, - 42406CE116E1F217BD239B34DE3CC9C2 /* SentryCoreDataTrackingIntegration.h */, - E2B12166AE92031770B8C68ECD920F00 /* SentryCoreDataTrackingIntegration.m */, - 7A0B6C4B8DB728209F5E4EA9D46E95C8 /* SentryCPU.h */, - 149CD8DD36BC0C306C6BB9BDDFBEB1B2 /* SentryCrash.h */, - 234C11EDAB9EE2BDDB59E5AD7FE6F012 /* SentryCrash.m */, - BB64F49CC4970288EEE9D679DB445E65 /* SentryCrashBinaryImageCache.c */, - 21E6E68C83A2B02B7DF22F64227FEBF2 /* SentryCrashBinaryImageCache.h */, - 8B91153A5160B262B00E3A1751F6F83F /* SentryCrashBinaryImageProvider.h */, - 854A083478FB2BA393FF6C2B1F43857B /* SentryCrashC.c */, - 549C94F5C50CDCE888151B266C22FA7B /* SentryCrashC.h */, - 6D0CE7CEF84AD663BDC2CC13DBDC8D13 /* SentryCrashCachedData.c */, - FC7FEC1648CBA3A851001FA6A2C67D3E /* SentryCrashCachedData.h */, - 6E178E7974AB7190576419D248D2DBAC /* SentryCrashCPU.c */, - FDD7376EA4D90FEADEB356AB2F4105B4 /* SentryCrashCPU.h */, - B781C0EFB3D1CAA61B9F9CEB608094DE /* SentryCrashCPU_Apple.h */, - C8204C9DA2015F1DC85B3CEF487DB968 /* SentryCrashCPU_arm.c */, - 31BA31BAA87A658873EED3B63158688E /* SentryCrashCPU_arm64.c */, - 14251523FF255A27A7D140F491A77E37 /* SentryCrashCPU_x86_32.c */, - 0BB0FCB255485DB0F4EBB6ACA9E71123 /* SentryCrashCPU_x86_64.c */, - 6DFDD6EEAAD120EA44EF908DCD53B9C2 /* SentryCrashDate.c */, - 220E531991C8D6E2A53D46DF2863C861 /* SentryCrashDate.h */, - 9B713CA2CD2A320F2ED9F05F8CA69B6E /* SentryCrashDebug.c */, - D06A731A0261566C05CA30BD226EA77B /* SentryCrashDebug.h */, - EBE3653DD3ED38722D6A130AD644E1F8 /* SentryCrashDefaultBinaryImageProvider.h */, - 75F664A425EBBD24E296D0FD68F7769D /* SentryCrashDefaultBinaryImageProvider.m */, - FDD7CCBF9EF842DF06EBAB229F630430 /* SentryCrashDefaultMachineContextWrapper.h */, - CE5DC823D881449DC09DDBC2313419CB /* SentryCrashDefaultMachineContextWrapper.m */, - EBFBF5C4F7E883B0CE1DDC4838A671CD /* SentryCrashDoctor.h */, - 1954C60F88408AE1E27D411C67A64C3B /* SentryCrashDoctor.m */, - 1946C8D2CDA5A2FD24B4A8E7CA7A4248 /* SentryCrashDynamicLinker.c */, - 24E4B7595A7DF47CBF1034A282AEE6EC /* SentryCrashDynamicLinker.h */, - 8E7BE901D79ABAB59E0390AACC282F01 /* SentryCrashExceptionApplication.h */, - FEE334FD066A7AEE1B4DDD62559DE8AB /* SentryCrashExceptionApplication.m */, - EE65FBF3C516C082D871B79A87CFBADA /* SentryCrashFileUtils.c */, - 8FDE677CCBAB7DB9FE026E529F6E4977 /* SentryCrashFileUtils.h */, - A53807FD51EEB03F5DABD4AAAEE94EDF /* SentryCrashID.c */, - C8EA855EDB6A2D904ABC2B9400FC5A87 /* SentryCrashID.h */, - 817F1991AE8BC816D785C6DD04668B18 /* SentryCrashInstallation.h */, - 0034B207B770B243B1D14A71C2DEDE38 /* SentryCrashInstallation.m */, - D2C67CA6D51EF8AA03A69E3981D377F2 /* SentryCrashInstallation+Private.h */, - 05562FBE8AD2925D389EDC231B440475 /* SentryCrashInstallationReporter.h */, - 09D9693761E0BDC8504B183B45C07926 /* SentryCrashInstallationReporter.m */, - 179FE19E81AC0ACC9C0623869C08A9D5 /* SentryCrashIntegration.h */, - 8203B0CC47F1C9B9094641BD32396510 /* SentryCrashIntegration.m */, - 3F40593B21CD780B6EE4C019D318CE67 /* SentryCrashIsAppImage.h */, - 1AF0287951066D2F2EFB23D2493059CB /* SentryCrashJSONCodec.c */, - 236D88238CEC740378901ACAA352EB71 /* SentryCrashJSONCodec.h */, - 679A40BA073FD71482989A141AE62BC7 /* SentryCrashJSONCodecObjC.h */, - AC4E4D72389513804DD8B90CB2EA46DD /* SentryCrashJSONCodecObjC.m */, - E556DE5669F43059D7ED912203951D09 /* SentryCrashMach.c */, - 8AC6775638F38D17B39F7C1C42B0A381 /* SentryCrashMach.h */, - A32D762F11D1189E284D764E3BC047EB /* SentryCrashMachineContext.c */, - 8864375D9EC4EB3F66DF0FC142FA7CF0 /* SentryCrashMachineContext.h */, - 097C8DCA2F473555A3E49BE387BE19C8 /* SentryCrashMachineContext_Apple.h */, - 7D55ADA9FD3B28F05EF59B7505B1050B /* SentryCrashMachineContextWrapper.h */, - 15BF85CE4CCCEA91DF4C59A8BEA880C6 /* SentryCrashMemory.c */, - A270A6AF666BBD8E9740DC8A79919F4F /* SentryCrashMemory.h */, - 7CD611DAEE4A5B7C1561C63761A46133 /* SentryCrashMonitor.c */, - E326348860C69AE8458531DDA058E80E /* SentryCrashMonitor.h */, - 66A229C0D9E692215470C3B9CB63E1A0 /* SentryCrashMonitor_AppState.c */, - E5728A59CC3B61ACC5C6B32C5E1208F3 /* SentryCrashMonitor_AppState.h */, - A9A4C1214FFF63EEAF1FC9801E324AAF /* SentryCrashMonitor_CPPException.cpp */, - 2711E9293E290259FFD7654E696290AD /* SentryCrashMonitor_CPPException.h */, - C62B1FEE1E0EA5939844C3B1CFE86E63 /* SentryCrashMonitor_MachException.c */, - C239CE4E1013EA661055180332FDD86A /* SentryCrashMonitor_MachException.h */, - 96B18F58FD1DD21A1C801F87641C097E /* SentryCrashMonitor_NSException.h */, - 1E9516F87499EBD9F56E18FA69933F3A /* SentryCrashMonitor_NSException.m */, - E007A1325F0132F4B3311F0D79DC2EB1 /* SentryCrashMonitor_Signal.c */, - AE5EA6846998D63671459BD7A261F3D3 /* SentryCrashMonitor_Signal.h */, - B6813A12F575957A167C88033E5FD96A /* SentryCrashMonitor_System.h */, - 64F19A6ABE0AF7A1AB7B9A1D9A77FCD0 /* SentryCrashMonitor_System.m */, - 2ECB70880E77E3CA7EACB5B2067A3ECD /* SentryCrashMonitorContext.h */, - 78BD79B176258E7FEC5FAF6A264ABCB0 /* SentryCrashMonitorType.c */, - 50C6FB1EF2872A99F49A9617B4A08E32 /* SentryCrashMonitorType.h */, - 4DC4DFC0E74DCAF74A19F11778365624 /* SentryCrashNSErrorUtil.h */, - 8397D2B19FDDB426EC98325ED864FA51 /* SentryCrashNSErrorUtil.m */, - 8227C46DBB43CE98E5E9AE4EBBDFA00C /* SentryCrashObjC.c */, - EEC2614B3B8D466D32F1DD952483C351 /* SentryCrashObjC.h */, - 68E057D6AB46081912147BD3BE8082CC /* SentryCrashObjCApple.h */, - B72FB11EB76D7F8AB731A62DDAD10E8B /* SentryCrashPlatformSpecificDefines.h */, - 5B6233CB25C90BD806A74EC8A0CDC6FE /* SentryCrashReport.c */, - 9719074E200FB3095CD0C4D46489A012 /* SentryCrashReport.h */, - D37474B523B58E0E54B0A02036C98ED0 /* SentryCrashReportConverter.h */, - 4434E2058D7BB29344E8826699301693 /* SentryCrashReportConverter.m */, - F059627EB5B6F14D6ADFF7FDF4AD9027 /* SentryCrashReportFields.h */, - C7065D21AEF1F441865BB047177D1ED5 /* SentryCrashReportFilter.h */, - 3FC67A2A48886BFBE95D156012F5F116 /* SentryCrashReportFilterBasic.h */, - 7FD439AAFED38A8FD922D59F40CDCF6C /* SentryCrashReportFilterBasic.m */, - 2F6338A2D362B2FD9BA68A63ADCE1D35 /* SentryCrashReportFixer.c */, - 58CED6652409D2EE4AA8580A35BF3FD8 /* SentryCrashReportFixer.h */, - F465483B6663380CD3AC0B106F2C8A86 /* SentryCrashReportSink.h */, - C9733620410EF3B5782C9A7CFB99A3B0 /* SentryCrashReportSink.m */, - 33B6867B0A50035AB7916B156D4CC953 /* SentryCrashReportStore.c */, - 6497495F631BB324F8FE709B41A518CC /* SentryCrashReportStore.h */, - DEB94ADAB8F47C149D8743DCB40FEFEA /* SentryCrashReportVersion.h */, - 0A8F19CB050A06635F1498140F167DB8 /* SentryCrashReportWriter.h */, - 05644E521E2472BCC80DF06EF85DC847 /* SentryCrashScopeObserver.h */, - 5CF96C2D1602C43299C75888AA2A5B96 /* SentryCrashScopeObserver.m */, - 361A8A768FB0B073B6872EDEB5E96CFD /* SentryCrashSignalInfo.c */, - D122CD1624E8E327CA8210293C36E768 /* SentryCrashSignalInfo.h */, - 3FA1F0852BBD17965FB67AE24D3A296C /* SentryCrashStackCursor.c */, - D981FF04279B99543F7647514D0CD636 /* SentryCrashStackCursor.h */, - F32F0B5CF5DE9568030FF636CD17B811 /* SentryCrashStackCursor_Backtrace.c */, - 351EBB12EB2B6E30EAC0B29EC263DA93 /* SentryCrashStackCursor_Backtrace.h */, - D8178AEB4217BA674D28E2BE452AFA84 /* SentryCrashStackCursor_MachineContext.c */, - B8AD64AE9A8DDC40E008FF384284ECAD /* SentryCrashStackCursor_MachineContext.h */, - 78418E7AFA6B44B2AC426695B690A3E6 /* SentryCrashStackCursor_SelfThread.h */, - CF7E10CC115C08E0CCA0B8C2045D55BE /* SentryCrashStackCursor_SelfThread.m */, - F43F9C227D195871399DBA0FAA39C16B /* SentryCrashStackEntryMapper.h */, - 85C78EA33AD069CD8876D9FBB34B76FF /* SentryCrashStackEntryMapper.m */, - 338019F931CAC4146FEBD9A37C310EA0 /* SentryCrashString.c */, - 607ADF718F5D32C95BA86105ADB2AA51 /* SentryCrashString.h */, - 91A211522E8118B3600505936E8D0F27 /* SentryCrashSymbolicator.c */, - 85C176EE486CB28F40C2536448BC7400 /* SentryCrashSymbolicator.h */, - A21DA63C193D8455569C1695C86B59BB /* SentryCrashSysCtl.c */, - F03CCC135A99036094780C23F708343B /* SentryCrashSysCtl.h */, - ED464F2D1DA0087B603F30746D1DB96B /* SentryCrashThread.c */, - C0767A431A76CC24DF4CDF0F70E33FFC /* SentryCrashThread.h */, - B7786342F5239BB026883A01DB4C2A79 /* SentryCrashUUIDConversion.c */, - F10177534C0AB70F2F8F67E7792808ED /* SentryCrashUUIDConversion.h */, - 0B9B3AF3736B960A7AE46824B3F15447 /* SentryCrashVarArgs.h */, - 824721A438303BD1A058012EA4CC2982 /* SentryCrashWrapper.h */, - 882F2C490C4B281DAEB04392CD181CB4 /* SentryCrashWrapper.m */, - 024A6D1401173777DC06FFE15264E3EE /* SentryCurrentDateProvider.swift */, - 90DFAC13F4502018267E077995C4CC22 /* SentryDataCategory.h */, - ABCBC5E9EC605227E37FD7C331271004 /* SentryDataCategoryMapper.h */, - B6EBF2BDD6C4B322A9071E3EBED06C8E /* SentryDataCategoryMapper.m */, - E58836104DBC75004560BF9A06495ECF /* SentryDateUtil.h */, - 518538B382682C5B6438FBE07470E516 /* SentryDateUtil.m */, - 497FC5C9B7998A38B8F0F623E9B11A30 /* SentryDateUtils.h */, - 6FDE291D1F30B92DC534744B7CFAB8ED /* SentryDateUtils.m */, - 91115B79CA65938B48F0335E98FFC9D4 /* SentryDebugImageProvider.h */, - AE73D62CFFD79A47310DDBA199176C67 /* SentryDebugImageProvider.m */, - DA7CF09828133D665CA31439FFE1D4DA /* SentryDebugMeta.h */, - 93AE0E3BDFFD2D2128943F83878D441B /* SentryDebugMeta.m */, - D8DA09F2482BCB1F2592D0DC0B399B5E /* SentryDefaultObjCRuntimeWrapper.h */, - 5AC81250F6F7558BC4D0408D8607A788 /* SentryDefaultObjCRuntimeWrapper.m */, - E759332A5670070D6E7AA30BF6E6F550 /* SentryDefaultRateLimits.h */, - 0AB4B65671912DD7FB38F6DF7AA21962 /* SentryDefaultRateLimits.m */, - 85A1830896200B5AE63C6003F2AF97B3 /* SentryDefines.h */, - 3204071E149956EE4EDFDA68CEFA1EF0 /* SentryDelayedFrame.h */, - 3E1D97E60FA4B5A68B55DA70032AB648 /* SentryDelayedFrame.m */, - 917F676D916B3C5ECFA038FCFD1889D9 /* SentryDelayedFramesTracker.h */, - BF27D256DE5D7B1EBD7CDEE1379C0FF7 /* SentryDelayedFramesTracker.m */, - 269AF878DFC82DC2FAEE0B531439BDB7 /* SentryDependencyContainer.h */, - 3297F891BE6D98D84E5D1AB5F382AC09 /* SentryDependencyContainer.m */, - A6A1E52C149597FBF16108B4D3758BFD /* SentryDevice.h */, - EE9F4F84F0AA8532D84ADA0EA5BC134E /* SentryDevice.mm */, - 807367F8CEDD722A42F3AED730471390 /* SentryDictionaryDeepSearch.h */, - C7C92457ADA8E86703615DEEEE2EC502 /* SentryDictionaryDeepSearch.m */, - 3BC79C707030930C0BEB9E2493247685 /* SentryDiscardedEvent.h */, - F31D1EFD7F6C45B0039EFC170CE770DC /* SentryDiscardedEvent.m */, - 53336B94ECDDAEE4BECE906CE1B32E0C /* SentryDiscardReason.h */, - B2E9730523C6D811F54C48AA80470EA0 /* SentryDiscardReasonMapper.h */, - E079D98F3D78BF502A659DF0A95E8127 /* SentryDiscardReasonMapper.m */, - 201C53EE3DC316F4610491C045F88D2C /* SentryDispatchFactory.h */, - 078810D0AADB156D6BEA27E4F0E1DBFD /* SentryDispatchFactory.m */, - F30662254B5249C452761DBEADF88AEB /* SentryDispatchQueueWrapper.h */, - 1852941F36151E5DE5DEA90D4F931711 /* SentryDispatchQueueWrapper.m */, - A6411CA17A6C1D4C3EDD3D36D8DC49B3 /* SentryDispatchSourceWrapper.h */, - EB7A19F404A0BC1FF96C79F25BC88CDC /* SentryDispatchSourceWrapper.m */, - 3473B11BCEC727EDC9EE47EA72638864 /* SentryDisplayLinkWrapper.h */, - 9EEBAD0326FAEC21EC9407537EAA8155 /* SentryDisplayLinkWrapper.m */, - 7580006A9D51A26EBDE8EEB546A11A15 /* SentryDsn.h */, - DBFE0503F38113C24E4BD42FD5E0AE0D /* SentryDsn.m */, - C0566BE5446E14D02EF3166D8742A54E /* SentryEnabledFeaturesBuilder.swift */, - 6776B2F6DC9AB3B93E362AFFD2C994BD /* SentryEnvelope.h */, - C249610D89B6543D6AE0CCE7384171F1 /* SentryEnvelope.m */, - F47EA5EA4204821A3101B46E12CDF103 /* SentryEnvelope+Private.h */, - A592989F329AC2BF22F7E5AB68655B73 /* SentryEnvelopeAttachmentHeader.h */, - 5C3F4712B197746775AA105B07E7090C /* SentryEnvelopeAttachmentHeader.m */, - 51F2ADAF8E55E7B5F2A237884DAA54A0 /* SentryEnvelopeItemHeader.h */, - 1713B557EA810ADD424919743E429AC2 /* SentryEnvelopeItemHeader.m */, - 1767E9FBEE9E9138E9C58E611DF847A8 /* SentryEnvelopeItemType.h */, - CE56D423CA52273FA1E301F5D877E103 /* SentryEnvelopeRateLimit.h */, - 8424AD41362FB5AEF19608A7CBC810C3 /* SentryEnvelopeRateLimit.m */, - 3F281F38CB8BF28E0D23E111E741B8E5 /* SentryError.h */, - F1695452E621BE3466055F9F805C6429 /* SentryError.mm */, - F206047DBF883008D889B1B81126B59D /* SentryEvent.h */, - 6E7E06865F2251D770DC5D6793CDD8A7 /* SentryEvent.m */, - 19528B16C8468503A93F4A4AE567FAA7 /* SentryEvent+Private.h */, - 1DDC0A87FE1C27050FEA4510A865E954 /* SentryException.h */, - 142FE559BC21B1CDE3FD83CFAE6F7D58 /* SentryException.m */, - 5E902F0B7F1248A6F5CB16290E8E1F6E /* SentryExperimentalOptions.swift */, - 16D7FD3C5ACD54B0A93837D009A0EAC6 /* SentryExtraContextProvider.h */, - 11A520C1D2AC3E07DE1662A0E8FFCEEF /* SentryExtraContextProvider.m */, - 08C2325851FE0BA93E7AF658B64A6053 /* SentryFileContents.swift */, - 4EBDADCACC51D8D607DCD7647C7F5590 /* SentryFileIOTrackingIntegration.h */, - 6DD606BDA81DCB58B6267FD417D3C849 /* SentryFileIOTrackingIntegration.m */, - A39CB8EA3CBC6F2CDC535C59D576E0F7 /* SentryFileManager.h */, - E60E4FF781588BDFFBE2070AFE28A979 /* SentryFileManager.m */, - A0F1C8387B9F711513BC694C1257A76A /* SentryFormatter.h */, - 54B118A0EA78DC2A4F7845485D3C7F59 /* SentryFrame.h */, - 2503880FB867E3E343795BC7316BBCFF /* SentryFrame.m */, - 2222A734DA950BD5F2A1BC4798B6DEE7 /* SentryFrameRemover.h */, - 8BED14EE0EE2F8C4B5680F589B113B78 /* SentryFrameRemover.m */, - 6DD2DEE4A55ED09898535824250A2FF5 /* SentryFramesDelayResult.swift */, - 53EBFB214FF0139C28586E10C83144DC /* SentryFramesTracker.h */, - 6891CDE6A252B6339E14FFD435C573A9 /* SentryFramesTracker.m */, - 0A40443DAD3018E0D9D575E69AFB45A2 /* SentryFramesTrackingIntegration.h */, - 91416C4E1B3ABA3F34D11AC4F3FA6529 /* SentryFramesTrackingIntegration.m */, - E9E7DA61D49DBEDC25D0D54AF713F75C /* SentryGeo.h */, - 3C74B24FB5704C924583B5804B9DA3E7 /* SentryGeo.m */, - 35A4FCE928F67C274EDA444289DEBAD1 /* SentryGlobalEventProcessor.h */, - 16A8E83987C6DFD3128CAD4B0B44D928 /* SentryGlobalEventProcessor.m */, - 2E33FD9E0B047A63DFBACC460099C7A8 /* SentryHttpDateParser.h */, - 9136E7315992B6E961F99494784E423F /* SentryHttpDateParser.m */, - 7AAFAB2B41EBA5E53C207ED48DAF341F /* SentryHttpStatusCodeRange.h */, - 61D86C08FA0C01A65B7277011E1005FF /* SentryHttpStatusCodeRange.m */, - E1DFABC1136E834A9B80BA8506BD552F /* SentryHttpStatusCodeRange+Private.h */, - 9837682E38F6D905DFE0CF4C429F933B /* SentryHttpTransport.h */, - 6B62F0D9B84A3AE71635C731B2867731 /* SentryHttpTransport.m */, - 1DEAB65D147E8FC5F02ACBFC8A31789B /* SentryHub.h */, - F419D6863CDA4C6ECF96457926C672AC /* SentryHub.m */, - D81A93A6C1979D3A1FC2159770837FDC /* SentryHub+Private.h */, - 83399FD92E465650EE055AE23ACE178F /* SentryId.swift */, - C6B94D8169DB9B1DE0E0A3A75EF42CDC /* SentryInAppLogic.h */, - DDE9E9132D62DCEDA4C9293D51719908 /* SentryInAppLogic.m */, - D288E2BAB78EE1922C20BB1E84892D65 /* SentryInstallation.h */, - 58EA2E9934DEBA053B68AB628755B6FE /* SentryInstallation.m */, - 30BCDDA889B1220E6908312CF1762A6F /* SentryIntegrationProtocol.swift */, - 71ADCAE3D90BD309CE2A9062CABA944B /* SentryInternalCDefines.h */, - 798F9E5E508E14C83383B975FA26C485 /* SentryInternalDefines.h */, - 1749A707387498C3AC9334CF2D7769EF /* SentryInternalNotificationNames.h */, - C0C3CC1F137AA503251BD2AA1E6F778E /* SentryInternalSerializable.h */, - EA99648975F943639502A5C133C72BF5 /* SentryLaunchProfiling.h */, - 19F69D29E945CBDE24E2DFE354BAE198 /* SentryLaunchProfiling.m */, - F7D12B0B93EA4E49F18847C1344218D4 /* SentryLevel.swift */, - 3BAB7C40BFD9AC1502BCCC1B1D0E607F /* SentryLevelHelper.h */, - C2F0BB4D3CAC40E54F995CE1A1CFE38B /* SentryLevelHelper.m */, - 6432131DACBE51AB900E90C31E26BD93 /* SentryLevelMapper.h */, - 440BFF887B8FEBEA78D7FE02916A1E97 /* SentryLevelMapper.m */, - 3CAD40E9A685469EA227DFEE4E12C4D3 /* SentryLog.h */, - 91CC390493C9DD5E9F2C4D6DEE838E00 /* SentryLog.swift */, - 9637024B7B86F4DFE1C3BC3EFF72683C /* SentryLogC.h */, - 51C2B6DB8237282F4AB7577802DE9598 /* SentryLogC.m */, - 24BA5427931D705341FE19C9993470B5 /* SentryLogOutput.swift */, - B8E7355FA8FE038F157474DC6648B349 /* SentryMachLogging.cpp */, - 91110C940CF3E0DC5177395FE6D1BDE7 /* SentryMachLogging.hpp */, - 5CCC3B2EF658FC6D3DAE769975D61502 /* SentryMeasurementUnit.h */, - 4DB222E7B5F9A8C6793DCB60DD6425F0 /* SentryMeasurementUnit.m */, - B919C4EC7E2F5568D545C90A10C7044A /* SentryMeasurementValue.h */, - 6ABC81ADE3E3B166D9286FB1E51E358C /* SentryMeasurementValue.m */, - 82E7A3C8BC259E827062E2CE81E8167A /* SentryMechanism.h */, - 17D320EBDEAF874E4AC66A7087B8B355 /* SentryMechanism.m */, - DDC5B14755BA6FCA06A597FC3AFA195E /* SentryMechanismMeta.h */, - F7F453D2DDCD6E7682FF8C9A7C61930B /* SentryMechanismMeta.m */, - F5ED5CD2338ED5D09AA4A870F61CE73B /* SentryMessage.h */, - 322924C6AE953800AA28C13FDF607F10 /* SentryMessage.m */, - FAA62DA89FAD7469CE788CF9FDC27DE6 /* SentryMeta.h */, - 7EA98A1FF0DDA53FCDD0A62FDD17EDC5 /* SentryMeta.m */, - 5D37CE0EF3FFB199E5E799E3F969914E /* SentryMetricKitIntegration.h */, - 002E8EAB517053DB5B6AB6B346CEB89F /* SentryMetricKitIntegration.m */, - 02EFB13CF25F49237182708DE2CA401B /* SentryMetricProfiler.h */, - 53E9399903D1343C659402FF1604DB9A /* SentryMetricProfiler.mm */, - 01F93A081B338C43E430DB9A88B0CEB6 /* SentryMetricsAPI.swift */, - 84DC54FF392AEAB4E910F569D2D1736D /* SentryMetricsClient.swift */, - CC072351C6CC94FA790ABD3D97327DF9 /* SentryMigrateSessionInit.h */, - 3D185E9BE30A18B4159AEE5B24E6FF2F /* SentryMigrateSessionInit.m */, - EDC0943F9037C31E4BB345DB0519464F /* SentryMsgPackSerializer.h */, - 8C01CC40D7A45F5F3E4CBF4171CC5464 /* SentryMsgPackSerializer.m */, - 6BA39AC292CEE58F9EAC157C60849237 /* SentryMXCallStackTree.swift */, - DF70139B0265F43C0F3FBF882396DF88 /* SentryMXManager.swift */, - 00C5F4359E73A5445CB4E22E374C49EC /* SentryNetworkTracker.h */, - 46381AD6F5BDC8515672C8B29828B1D4 /* SentryNetworkTracker.m */, - 76ADCF0C7441A2A659A6E5A421F9BF42 /* SentryNetworkTrackingIntegration.h */, - D5F106B2971AA1D20AAC0C7A34E7D760 /* SentryNetworkTrackingIntegration.m */, - 5BCD84DF38C9DAD868654B80C1B208A4 /* SentryNoOpSpan.h */, - 95BE0CBAD3FFF9C6E9C2FBB26C7A2FEA /* SentryNoOpSpan.m */, - EA154F8B9FE418FCEAC98B05895FA850 /* SentryNSDataSwizzling.h */, - 90ABA8BA9BC696677D0D28784125D7DB /* SentryNSDataSwizzling.m */, - FCDEB86F6EB2160712E4BD9C37FE239C /* SentryNSDataTracker.h */, - 4BFE958E69086FB4D75DDD48346E5AEA /* SentryNSDataTracker.m */, - 67CC0210F6E9F782324580A7B015C0A7 /* SentryNSDataUtils.h */, - A047CA69288F77F6485DF86D21CAAB1D /* SentryNSDataUtils.m */, - A4C38AF18350D688C18C717305352D13 /* SentryNSDictionarySanitize.h */, - 50B2B367A1A2B99E2372107ACB0077C2 /* SentryNSDictionarySanitize.m */, - 5FCD2D8780D89C918F224760D4CDD736 /* SentryNSError.h */, - 476C98F025039310163818F921A55D38 /* SentryNSError.m */, - 60C9088A32AB6A50F44E9155C67AE6A1 /* SentryNSNotificationCenterWrapper.h */, - CA2114D14C475781B89A8C1390ECD686 /* SentryNSNotificationCenterWrapper.m */, - 49A96E1C940808696DE22F968540B651 /* SentryNSProcessInfoWrapper.h */, - DA638962BEEAC8342C9B8D5084536D61 /* SentryNSProcessInfoWrapper.mm */, - 33FCBB7E384DD90E7D270977DDEB7D1D /* SentryNSTimerFactory.h */, - BB16E5BCFA8E07C4717EA91099C9BC4A /* SentryNSTimerFactory.m */, - 2AE7CC1AE6D8DE973B5DB086C36C459F /* SentryNSURLRequest.h */, - 2B11242E13E96FC3D96938A5BBBF91D4 /* SentryNSURLRequest.m */, - F4CFA0BD325A5CC11B091B5EFB6E8FE4 /* SentryNSURLRequestBuilder.h */, - 03FC114E9FB08EAC5A4C35179F007AB2 /* SentryNSURLRequestBuilder.m */, - 08CC2C52612145A3377EC4CD53360C5B /* SentryNSURLSessionTaskSearch.h */, - 825AE5C17E90640280B1F2580683162C /* SentryNSURLSessionTaskSearch.m */, - F8E7CCCD39DAEF4274E60050DF470324 /* SentryObjCRuntimeWrapper.h */, - 3F40417670FFF525FEAADD3B4DC01127 /* SentryOnDemandReplay.swift */, - B7D631357B9671D5C06D222EEC51B8F4 /* SentryOptions.h */, - 0FE65B5511B56E70F945BAD4655164D7 /* SentryOptions.m */, - 4FACA5BBEC82074BC615BCC18C33EF74 /* SentryOptions+HybridSDKs.h */, - 07E6C4356625256612499FEED3B91C44 /* SentryOptions+Private.h */, - 54D13411BEFB6D1F745DA9A7EA459A40 /* SentryPerformanceTracker.h */, - BAA26206547391D1E4720208789500AA /* SentryPerformanceTracker.m */, - E50A7E05D86AEC2614C76F94DF56CF83 /* SentryPerformanceTrackingIntegration.h */, - E5D4109FA871DF4BCF84BC15D7D6F2E4 /* SentryPerformanceTrackingIntegration.m */, - C22B6113525CAE7948EB1F4363FA4FC5 /* SentryPixelBuffer.swift */, - A73F2F47F8E99F38D5C1145AE392DB0C /* SentryPredicateDescriptor.h */, - 682F2D5987BA5F7BFDC3215B50A6908C /* SentryPredicateDescriptor.m */, - E017B86B2E26554305CB855F95B4C9FA /* SentryPrivate.h */, - F6777E422A5A3A95147DBA36CFA2A078 /* SentryProfiledTracerConcurrency.h */, - D2DAAD32527B05E5F93B4F504ECA4B48 /* SentryProfiledTracerConcurrency.mm */, - B3B6A92FBB2385DF304038245C985969 /* SentryProfiler.mm */, - 2B227D03F34D001264F4931343C3CFDF /* SentryProfiler+Private.h */, - 5B716D891F8A7A134A4C30F6D1EB6697 /* SentryProfilerDefines.h */, - 32F181CC70B00BA24D837331622C011A /* SentryProfilerSerialization.h */, - 6037D4B49CF5C089489CECFB8CFBBD87 /* SentryProfilerSerialization.mm */, - 1F75AE9C76D7E728BE37B8DAAA9B8A41 /* SentryProfilerSerialization+Test.h */, - 90FB191DFF25E58F5AD7C2973E729417 /* SentryProfilerState.h */, - 5E8CC9B12E73421758F811C467391775 /* SentryProfilerState.mm */, - C6EBB9F015607F3132DD89A8A4739B3B /* SentryProfilerState+ObjCpp.h */, - 1C22C468A1B8C61CE66E850C1E336E62 /* SentryProfilerTestHelpers.h */, - 2931A045971125F75C762F489D173152 /* SentryProfilerTestHelpers.m */, - BD05C0B2FD5A930246BDFE9D3DB3B37E /* SentryProfileTimeseries.h */, - 9C7B72EFCA520A3F9774C14C668FBAB3 /* SentryProfileTimeseries.mm */, - 32DF25CCCF77CF0E1C1D910FE39CAF8B /* SentryProfilingConditionals.h */, - 38B96878D2F4FD366FEF8BC6E86C35DA /* SentryPropagationContext.h */, - 263B61AF5ECBD38D798965F9F036CA7B /* SentryPropagationContext.m */, - 3302139AC3FF756332BA39058CAA2092 /* SentryQueueableRequestManager.h */, - E97943931DA666D19A31C626A71CE7B5 /* SentryQueueableRequestManager.m */, - 3D680C891D3BD3CF2030A2B756AB4E23 /* SentryRandom.h */, - 1585C0E7D2609A5BF0DEE8A53A3125AF /* SentryRandom.m */, - 10FA5F34FCB3EFB59CB5DE4C37E5A733 /* SentryRateLimitParser.h */, - FA3902D62E4AC14B13A57BD9F16725B9 /* SentryRateLimitParser.m */, - 7849304ECC4BDB534EBA46A7E14E9E8C /* SentryRateLimits.h */, - 19DC19184CBAA26ACD42DE9A4197B3D3 /* SentryReachability.h */, - F6BAC88C16ED7B2B88D5A116E36C7695 /* SentryReachability.m */, - 8990502F713E1FCD895CF70754BB17D8 /* SentryRedactOptions.swift */, - 2294F5AFC0F79C4BE69D51501D022ECF /* SentryReplayEvent.swift */, - B53C405E80F37BC880FACE2AB1597AB2 /* SentryReplayOptions.swift */, - ED5523D4F5988DE5E3BB8F6C2B2F6C78 /* SentryReplayRecording.swift */, - 602783FB47616AA7AC2CE4219CA024B5 /* SentryReplayType.swift */, - 484625B3B8EEE502C5E32EDCFBFCCB80 /* SentryReplayVideoMaker.swift */, - FD551AD7F7BAE8AF38530092ABA46B34 /* SentryRequest.h */, - 5353873D8213E327E58BB3DE44224D07 /* SentryRequest.m */, - 4C999F593F438C1388269C15ED67DDF8 /* SentryRequestManager.h */, - D6678A60DA665A0E90E8708C65270670 /* SentryRequestOperation.h */, - 2D52FB8E23C078DD53DAE19331258A22 /* SentryRequestOperation.m */, - 917BC1D2BBF2675CC1CF9239AB8FBB35 /* SentryRetryAfterHeaderParser.h */, - CED24D58E07D4230C56147FFC1BAAA77 /* SentryRetryAfterHeaderParser.m */, - A52B1C534D0B5EB541222E6CAFE0413E /* SentryRRWebBreadcrumbEvent.swift */, - 0AD492D3A7847D0F7B7A5507EFB0AD00 /* SentryRRWebCustomEvent.swift */, - B2DD1CA88D6299A643B84406A4D04DD7 /* SentryRRWebEvent.swift */, - 8C83786CBE45FC058901FC5261CB12F8 /* SentryRRWebMetaEvent.swift */, - FE330B03F9BC6E475FC6D3953AC3303E /* SentryRRWebSpanEvent.swift */, - B6AE3F999716A927636D5C9486818CDD /* SentryRRWebTouchEvent.swift */, - DB309AC3FBF0822DACB4B505EBDD2C10 /* SentryRRWebVideoEvent.swift */, - EBA60827BC3DAF72A33E3FE7FEBB2D70 /* SentrySample.h */, - 964AC0C64EB02F4290FFC5987106ED8E /* SentrySample.m */, - C8317A0D0EF05D69F1DADE6ACC7A0E6A /* SentrySampleDecision.h */, - 5CD172316CB9D69CED6FBB7CDE8341EB /* SentrySampleDecision.m */, - 5F4AF1DFD69E838813C79B42D0AFE39C /* SentrySampleDecision+Private.h */, - BEB12B16B65038501D6EB7D96A36391B /* SentrySamplerDecision.h */, - 74F8739DF31C10AC2B4D347992BA8EE5 /* SentrySamplerDecision.m */, - B5989B4C5A785355A33EF2AABB3FED42 /* SentrySampling.h */, - AB1E2063BDBCF3FB40EC018AED4CF019 /* SentrySampling.m */, - D549A908ECDBE0BB33C7DC5E539A6ACA /* SentrySamplingContext.h */, - F484B464B4FCE9F2E997BBF2252E9D42 /* SentrySamplingContext.m */, - 150CE280A40A2ED8A311981DB72D7A76 /* SentrySamplingProfiler.cpp */, - 7223CC1D887C2F20620C75D7B5795F27 /* SentrySamplingProfiler.hpp */, - 02B1EFABBB5C13B065CF5B4EC2FC9225 /* SentryScope.h */, - 0AC7EA8325DF01716D0C3E62EF49D932 /* SentryScope.m */, - 5E365316AEDAD33A3CA186A6B525D811 /* SentryScope+Private.h */, - AE07DAD02640ED755F69139357FE9802 /* SentryScopeObserver.h */, - 7AB11DDB076F6FC08820F145088F7FA0 /* SentryScopeSyncC.c */, - DB030BC8488CE21D50F024172EE2629F /* SentryScopeSyncC.h */, - 2F9D6B8960C5E4C52013192512A8E2FA /* SentryScreenFrames.h */, - B8BBDF85CF1F94AC96F3CDE4A1D8A741 /* SentryScreenFrames.m */, - 50B19D46059777D27D66F8A8DE37C02E /* SentryScreenshot.h */, - B460381718BE835C1B59647AEF517C41 /* SentryScreenshot.m */, - C961A787FB2361ADF25E9732AE6B6ABD /* SentryScreenshotIntegration.h */, - 8A33BF02CCF7D216DBBFBB0BA777834D /* SentryScreenshotIntegration.m */, - 81F5C766B2045D009E0ABB3FD3FD6E45 /* SentrySDK.h */, - ACD00B7E5C0BCB430CB82D4C142061FE /* SentrySDK.m */, - C98440DA8D164B0F0C57A3856ED8D8F1 /* SentrySDK+Private.h */, - A477EC39035EC38453C3083C439FCF17 /* SentrySdkInfo.h */, - 689A48F516AF161D0C9E87999E7183FA /* SentrySdkInfo.m */, - 48D9322EA020FBDDC47783CE1485F9AC /* SentrySerializable.h */, - 1414E843B7F3A392F17CDE6B1B1545E4 /* SentrySerialization.h */, - 9452FC54CB524C7233E630215BDA616F /* SentrySerialization.m */, - 1083B2215EEC660EC3CD6117056A0CF8 /* SentrySession.h */, - F8A5F6AD94DDC763ADCCFEF62916A082 /* SentrySession.m */, - 34C34F80F098AB0FE5966769EB95AFB2 /* SentrySession+Private.h */, - 17D1F4CADD1526956E9C3D0EC9F185CA /* SentrySessionCrashedHandler.h */, - 4E37DE56638D8C8CA4EC981C5B6135CE /* SentrySessionCrashedHandler.m */, - 33E62911AE1376A5100B834A3F2514EA /* SentrySessionListener.swift */, - 1A0B613C59D1494EC7CB6148A3CB19D6 /* SentrySessionReplay.swift */, - A2E16A73DAE220CD1B7E560B08776026 /* SentrySessionReplayIntegration.h */, - 1C99035927A765B80123B45F9170A53E /* SentrySessionReplayIntegration.m */, - FABC3739F60CA36C092CF2C0223ECE29 /* SentrySessionReplayIntegration+Private.h */, - A9BF69708826D7B366F0FA218140968E /* SentrySessionReplayIntegration-Hybrid.h */, - 05EF9B0A21C9A4534E6368A0EFFBBD8E /* SentrySessionReplaySyncC.c */, - A9E5DE78DD79E203ACA7E997D4A338F6 /* SentrySessionReplaySyncC.h */, - 8EF6D9E83F9FDA4407E1E07B6FD07EE6 /* SentrySessionTracker.h */, - 28B04C61DFD85D943F2939F6C2B83DF1 /* SentrySessionTracker.m */, - A8F565F82675C906821D6FC3CC12F1DD /* SentrySpan.h */, - FD311DB3AF8C9C7B280C86F38679DDC8 /* SentrySpan.m */, - 4F24DBFD966AD61608D15CE3BB599255 /* SentrySpan+Private.h */, - 6C9C3BAD2D822378BC8F20D0B7F1A297 /* SentrySpanContext.h */, - 7214EC8C4207BCF9E5B70D150AD5006E /* SentrySpanContext.m */, - 14228DE9772125B484F08529B4BF3D8A /* SentrySpanContext+Private.h */, - B8C97C11EBA352B28EAE1EB5796C4BE9 /* SentrySpanId.h */, - B19BC58FBEC2863E71C2862FDCD72983 /* SentrySpanId.m */, - 6BFDD53367D50C36D6597EB3B5D1F44F /* SentrySpanOperations.h */, - E5F6B485DF6D918B24F3AF358483B380 /* SentrySpanProtocol.h */, - E6AEC779ACD655FF28BFE4738AB05740 /* SentrySpanStatus.h */, - 388AE3DF38CAF85A745A190B1499A0F3 /* SentrySpanStatus.m */, - 80400492C24E095114263D5800CB5BC2 /* SentrySpotlightTransport.h */, - F4304BFC958A368DAACA1629E8146947 /* SentrySpotlightTransport.m */, - A56A272A4B695313852FC2AD0284C79F /* SentrySRDefaultBreadcrumbConverter.swift */, - CCA342C607AFB7558FC0346EF59594DE /* SentryStackBounds.hpp */, - 5AC24B8BE5EC6E0E2A51E0126426344D /* SentryStackFrame.hpp */, - 34A3BB5BA8E9818AEACCB1BD6DD07585 /* SentryStacktrace.h */, - 00E7A0FD17A79CB0D4D3D8BBFF451534 /* SentryStacktrace.m */, - 43668C08A60CD18FE2AB42F0078E97C9 /* SentryStacktraceBuilder.h */, - 3A9B7CDE009191229E1CE9C10BBD252B /* SentryStacktraceBuilder.m */, - D466BF7FC2664A3BD7974FE422AC5E51 /* SentryStatsdClient.h */, - 29EC4AA8259DE1DCAEBC10450888D132 /* SentryStatsdClient.m */, - B092B48DF9CEABE76B08122C6C9C5A65 /* SentrySubClassFinder.h */, - 6D5E7A7A6D41259F2D94ECD16EA3DD5B /* SentrySubClassFinder.m */, - 778C9EAC13121729CEB33B10C0019EBD /* SentrySwift.h */, - 0D96288E857160E31C20E7AE2C1FC09C /* SentrySwiftAsyncIntegration.h */, - D01DEA6A488A5DD484B36D8E7915579B /* SentrySwiftAsyncIntegration.m */, - FFB1E131ED2C84E1C502868C39278700 /* SentrySwizzle.h */, - 321C61AC56386B600A495E1B2162C865 /* SentrySwizzle.m */, - FA14DEC9E802765F82D1A8EDD06A9C4D /* SentrySwizzleWrapper.h */, - 545E170C74561D2E68A33C354A2A7E0B /* SentrySwizzleWrapper.m */, - 44213F5DA0BF41B164907076C128BB7C /* SentrySysctl.h */, - 622C97E1EB283492A3DA70E0D0BA1278 /* SentrySysctl.m */, - A0530EBEDFB6DF1385B3B2402D249C0E /* SentrySystemEventBreadcrumbs.h */, - 000FD6662207B7B9FE7ADD0446A98A8A /* SentrySystemEventBreadcrumbs.m */, - CF9FE4589744B663482372C4DC4C5DED /* SentrySystemWrapper.h */, - BF62C2E79B23C4ACEB7B0B22408309CD /* SentrySystemWrapper.mm */, - 21532A82DA33D97522525266DA6FD77D /* SentryThread.h */, - 7FAA6C03AB3AF97C7ECEFCB826269031 /* SentryThread.m */, - 2D50C68EFFF553446A7C787BEE9E1273 /* SentryThreadHandle.cpp */, - 19AFAFE4C0EDE77CD00B2F3B4B3E6C60 /* SentryThreadHandle.hpp */, - EAB1A60DE10EFF5905590581794E3C00 /* SentryThreadInspector.h */, - 344B186FD0AC9E600E9A074894687420 /* SentryThreadInspector.m */, - 296BB14511DF73B7F8CAF2AAF001225F /* SentryThreadMetadataCache.cpp */, - AECAF574D8039358F508D7760C619A96 /* SentryThreadMetadataCache.hpp */, - D2296DE30F2F287E47237776F2A4987F /* SentryThreadState.hpp */, - 80E20135DB15D00DBE0A2C3331037FDB /* SentryThreadWrapper.h */, - 19A8504D81B069DF346AF1EA572D3164 /* SentryThreadWrapper.m */, - 58A09D3F0B008C9C53C0AD3BB1459AB9 /* SentryTime.h */, - 00319DDC9C74F375944A8E25FE81903E /* SentryTime.mm */, - 6729B55F9C55EDECCD1D2BFADB8DD826 /* SentryTimeToDisplayTracker.h */, - 62C02C2854B1E46006A0EB8867BEF867 /* SentryTimeToDisplayTracker.m */, - 2FE92B3044EA5408E8C91A67FA4EDAC6 /* SentryTouchTracker.swift */, - B700B370455A4388251774BCCB5DE117 /* SentryTraceContext.h */, - CA3491F9FB1375C03F8DDC73930BF1D6 /* SentryTraceContext.m */, - DD2B9F34DFCFDB4FD4513D109607BE8F /* SentryTraceHeader.h */, - BAA87EED89345DF05E322A1CA8DFCD9D /* SentryTraceHeader.m */, - 0438035740F3520A5F4840E1B0EB6914 /* SentryTraceOrigins.h */, - 3AA0B27EDB7D51C38B986804EC5216C3 /* SentryTraceProfiler.h */, - 9AF86F1F9721DB639D4919C559B31FFB /* SentryTraceProfiler.mm */, - 9A227909B32E001649C6040DD7E41405 /* SentryTracer.h */, - 430F021FD0317357DB30A3675FDD0E38 /* SentryTracer.m */, - F3E9F6A236C7AC41C336A3EAFCEDDE7C /* SentryTracer+Private.h */, - 4CF8E357E7B9DEAFE50F387C635D081A /* SentryTracerConfiguration.h */, - 0D4A8B60F7AD8946C1560D2FC9B1E5EA /* SentryTracerConfiguration.m */, - CE40D474002E563A7719600E2768FB4E /* SentryTransaction.h */, - 5D908CE206B7EE8AAB43125D9079070E /* SentryTransaction.m */, - B731B7DD93C355641B6D8EA4107E08A0 /* SentryTransactionContext.h */, - ECE33D86D66035EDDA76AC63CC903026 /* SentryTransactionContext.mm */, - 36A34F53638D44A63BCCCAD23B2DA812 /* SentryTransactionContext+Private.h */, - 0A9023D2AEFD8E126A51F1404D7F1412 /* SentryTransactionNameSource.swift */, - BDBE3DDC57B0A43545CE597515074570 /* SentryTransport.h */, - 2B0EDEBD51E8273444486EC30BC21871 /* SentryTransportAdapter.h */, - 0BACE33FF8E5CD9FB1552DE0B25FB514 /* SentryTransportAdapter.m */, - 85A76E534888F5A3FD1D2817C3F4A4AB /* SentryTransportFactory.h */, - 5C90193720FC96FE63CF773E1F182187 /* SentryTransportFactory.m */, - C17007F1F4F3542FA3D644E0C07DFF4B /* SentryUIApplication.h */, - CA1D0C8F1DAC9BC7FD78C68101956EF6 /* SentryUIApplication.m */, - EC6DA11B76FE08F15D71FF41970330F0 /* SentryUIDeviceWrapper.h */, - CEB0EF668E09C209F3F88C334AAE9856 /* SentryUIDeviceWrapper.m */, - 8E7C8BFB8928EBE3C195C73DD76A4DEF /* SentryUIEventTracker.h */, - F6A176F71A427EBF188A2DC915C2915E /* SentryUIEventTracker.m */, - B28238865833B36D3ED8E6ADC5884B96 /* SentryUIEventTrackerMode.h */, - 9ED304949BB09ED912DAFC70A43FFE67 /* SentryUIEventTrackerTransactionMode.h */, - BA6B9607AB207FAE0B320D45203DD324 /* SentryUIEventTrackerTransactionMode.m */, - AED8A3DEE4D565E5211CD39359F289AB /* SentryUIEventTrackingIntegration.h */, - 70C8FA1A03695A7097E60136D152165A /* SentryUIEventTrackingIntegration.m */, - DADB8CA53656E2267D3D4E94B75DE12F /* SentryUIViewControllerPerformanceTracker.h */, - 418B8FBB65E29272B3461A075B60B027 /* SentryUIViewControllerPerformanceTracker.m */, - D7C0906529547454269F43C72A7886D7 /* SentryUIViewControllerSwizzling.h */, - 8B86EC3596906650F1A3D0A569BB7679 /* SentryUIViewControllerSwizzling.m */, - CAF0D754B1FFB8825EA1443E4DBF9316 /* SentryUser.h */, - 7CA38BF6D44290DD7D4CC46F72C0FBDD /* SentryUser.m */, - C4BBE5B53EC30700D1B42981485562B5 /* SentryUser+Private.h */, - EE167B3ACC02085EC7BAF7F8CDA098C4 /* SentryUserFeedback.h */, - 18E514F51D260A11D56F40DDCD336A63 /* SentryUserFeedback.m */, - 1D82218FCAE57B7717C49FFA4F270EB2 /* SentryVideoInfo.swift */, - 3D2F693048237AC1DAFF856384FD18E3 /* SentryViewHierarchy.h */, - D111501CA55B0511CC10065E04546EC8 /* SentryViewHierarchy.m */, - 9CD5A1C1CE36A5F69F77F9F7ACCF27EE /* SentryViewHierarchyIntegration.h */, - 1758F7998742EB6637EDAA0F0298CF33 /* SentryViewHierarchyIntegration.m */, - BF3FB0C6807A650937FD75BBBFA85AC1 /* SentryViewPhotographer.swift */, - BFEE70C887CB1F71071471128E4A27CA /* SentryViewScreenshotProvider.swift */, - 1862C4ED07B24352D1DD1A069782D87A /* SentryWatchdogTerminationLogic.h */, - 00CDAD423E0615A5F1B73567AAE45AEC /* SentryWatchdogTerminationLogic.m */, - F1107A10A5376382F9C36065A8831980 /* SentryWatchdogTerminationScopeObserver.h */, - DD9B764125F67A90E6640AEFA593B4EC /* SentryWatchdogTerminationScopeObserver.m */, - 977B851A58428EB952FF0D119072B3FA /* SentryWatchdogTerminationTracker.h */, - 5BBF982D611A40D45949D5887F6A49BF /* SentryWatchdogTerminationTracker.m */, - FFCDDE03523027AA4AED83D01BD42A9D /* SentryWatchdogTerminationTrackingIntegration.h */, - A5BDC79C7380C040B578F1A826EACC71 /* SentryWatchdogTerminationTrackingIntegration.m */, - 1C05F86890CCB7B682705B4DC318DC76 /* SentryWithoutUIKit.h */, - FDC27871CEE396D712089FAEF715D347 /* SetMetric.swift */, - 6BAED9229E045CA3C902E4EAEB308724 /* StringExtensions.swift */, - 6A67969A7FD464AADDA4EBA8FDE652F8 /* SwiftDescriptor.swift */, - B361147BC7C979EB189D29E3C9759832 /* UIImageHelper.swift */, - 93803DAF93725B5980811976380C1D54 /* UIRedactBuilder.swift */, - D1570417C9CCBF8CF1C9495525E81020 /* UIViewController+Sentry.h */, - 43E7360C1E797D7734623EABE3825A14 /* UIViewController+Sentry.m */, - D912F9286CA59E3B581072F9C4B2B839 /* UIViewExtensions.swift */, - 8572D02BB0DF5598CB21671E08EFB5CD /* UrlSanitized.swift */, - 7E3C7205887FF01B002CC8B3102E585D /* URLSessionTaskHelper.swift */, - 99BA89E15C26B7454FA95255EA36E3FA /* Resources */, - ); - name = Core; - sourceTree = ""; - }; B9B39DB771A86DAFBB64225992748490 /* CocoaHTTPServer */ = { isa = PBXGroup; children = ( @@ -3164,7 +3377,7 @@ DF88356BB124F204848D5171C80AA9F7 /* MIKMIDI */, D1B575410F440F479D9F9515CC75EF58 /* ORSSerialPort */, BAF0D0B2D74CD956D93DF840F8A82B54 /* PocketSocket */, - 867FCA354756169F08AD7A9F37B347D3 /* Sentry */, + 826792748E50A4D37C6531107B94C3A0 /* Sentry */, 8B471778455AB6F6A1F21DAF11772D33 /* SocketRocket */, 166B519C96EA53CA79157935929CA592 /* Sparkle */, ); @@ -3393,21 +3606,6 @@ name = Client; sourceTree = ""; }; - F361419324831EE58662068E1D7C8A68 /* Support Files */ = { - isa = PBXGroup; - children = ( - 3EEFAB7EA8C025BF5E3F6214A5F6C577 /* ResourceBundle-Sentry-Sentry-Info.plist */, - 7EB072B27362A517BCB63D5633AED711 /* Sentry.modulemap */, - 540CFA7719FDD2443BB971E4788581B5 /* Sentry-dummy.m */, - D193BD18EF13A1C4DD75CAEBD2ADD7A4 /* Sentry-prefix.pch */, - 4FB82215239D51E779DB14364BF0D5B8 /* Sentry-umbrella.h */, - 16A6A10301EC58EDE0CC9CE0D9DC20D4 /* Sentry.debug.xcconfig */, - F694C933B6EA4B00D70FB167F8452D36 /* Sentry.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Sentry"; - sourceTree = ""; - }; FD8E0230BB283AFFEF70482914409695 /* Support Files */ = { isa = PBXGroup; children = ( @@ -3423,549 +3621,562 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 3CF38777F45CBA2D9D901F9AF2780FE6 /* Headers */ = { + 12644A2A4F62C1441FF0FAD17B41C2FC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 9D1AA5F1DA67CD995B2E73B257521635 /* MIKMIDI.h in Headers */, - 901376628675C4789FB24499AA13A42F /* MIKMIDIChannelEvent.h in Headers */, - 58315DB4AE002F6F3FDE386221FFC031 /* MIKMIDIChannelPressureCommand.h in Headers */, - 53B192A7CAA7B9E2CBAA358BB8FC192E /* MIKMIDIChannelPressureEvent.h in Headers */, - A66982E2B8CC71618D36E9D902C811CC /* MIKMIDIChannelVoiceCommand.h in Headers */, - 5A7BAB0A326224C9055839685A0AF3D8 /* MIKMIDIChannelVoiceCommand_SubclassMethods.h in Headers */, - 9B37708C7533BA54BD3C15F1F4489112 /* MIKMIDIClientDestinationEndpoint.h in Headers */, - DCC7775733355B6512DBDAFF57E88182 /* MIKMIDIClientSourceEndpoint.h in Headers */, - 19D2E69646B35E9AC43D1978599CAA96 /* MIKMIDIClock.h in Headers */, - 9D1F598CCEB3995DB06E04B1F762414E /* MIKMIDICommand.h in Headers */, - 0C1F1A5802404313605202394453A284 /* MIKMIDICommand_SubclassMethods.h in Headers */, - 18EDA1590BFD70111A0E98599502D1F0 /* MIKMIDICommandScheduler.h in Headers */, - 73722DFEE77473B438342638F58265B7 /* MIKMIDICommandThrottler.h in Headers */, - 5BDC706E357AEA11522A81570ECF753E /* MIKMIDICompilerCompatibility.h in Headers */, - 127871DE4227C19D3987601B8741C8EA /* MIKMIDIConnectionManager.h in Headers */, - 75550DF0706CC24A72C4F1A4258169E1 /* MIKMIDIControlChangeCommand.h in Headers */, - 4705D74E70ECCDD5F235C740FB64AD53 /* MIKMIDIControlChangeCommand+Private.h in Headers */, - E967E850588D2B98679E6E1C4FA09D83 /* MIKMIDIControlChangeEvent.h in Headers */, - 89DDE22209DCA09A4A984F64BE70386A /* MIKMIDIDestinationEndpoint.h in Headers */, - C5FE9DCD9087BEA6E32C4B97B38D162E /* MIKMIDIDevice.h in Headers */, - 5EEA59FD0F230CBAD84C84F46A4A1BEE /* MIKMIDIDeviceManager.h in Headers */, - 1C9BCA46DF6D56A11FE299C8DD1D2453 /* MIKMIDIEndpoint.h in Headers */, - AD61D71B8AAE5FC2DA652C8849D5AD00 /* MIKMIDIEndpointSynthesizer.h in Headers */, - 30C4CA27974308DA67BC93FB27790CCF /* MIKMIDIEntity.h in Headers */, - 93BE2E78DFE82A352A8DFFE1CCDEEC7F /* MIKMIDIErrors.h in Headers */, - 14DBBE6DDDB560E350F978A1F8DFA97E /* MIKMIDIEvent.h in Headers */, - 1814C2CBBA5A0F014A767B807A9F60FB /* MIKMIDIEvent_SubclassMethods.h in Headers */, - C124C3A55D239A1282DD82E31EA3A69F /* MIKMIDIEventIterator.h in Headers */, - 940455238435381D4A94ABC6AFF0F830 /* MIKMIDIInputPort.h in Headers */, - C23B55F32EB55B2EEDF9FC885903B3BD /* MIKMIDIMappableResponder.h in Headers */, - BB4110BBB48B992CD809578A6EB98097 /* MIKMIDIMapping.h in Headers */, - AAAA8A9DAAC9BD2E9867F3DC1565FA41 /* MIKMIDIMappingGenerator.h in Headers */, - E5C86C69C8C17083D5736B0CBF0ED1AB /* MIKMIDIMappingItem.h in Headers */, - C13541659C50B69C1389070088284A3B /* MIKMIDIMappingManager.h in Headers */, - 7A74B0E91DEDF90FFF8CD421FED59753 /* MIKMIDIMappingXMLParser.h in Headers */, - 4B29600070D094285162A5571E5AD237 /* MIKMIDIMetaCopyrightEvent.h in Headers */, - D59DD88BFE033CA35A3920954702F71B /* MIKMIDIMetaCuePointEvent.h in Headers */, - 2FB275F4E3DF0872E8D6076011896344 /* MIKMIDIMetaEvent.h in Headers */, - 987AEEFD5483A55EBEFA7EAE0DE5E5BD /* MIKMIDIMetaEvent_SubclassMethods.h in Headers */, - 5D6168F39D7FE503C5A47E38917EA3F3 /* MIKMIDIMetaInstrumentNameEvent.h in Headers */, - 80A694EA4EC5749125EE05F9AC38DCEC /* MIKMIDIMetaKeySignatureEvent.h in Headers */, - C31653D2DBFF5F499B96AB271301892E /* MIKMIDIMetaLyricEvent.h in Headers */, - 704C17F38726156DC7D586FAEC85540E /* MIKMIDIMetaMarkerTextEvent.h in Headers */, - 7555279AF0DBBB727C33D76EDF1A86CB /* MIKMIDIMetaSequenceEvent.h in Headers */, - FA24EAB7BFFD71A4B8C0A8BEAA45FEDC /* MIKMIDIMetaTextEvent.h in Headers */, - 5336F6850F52CE9185866D0D3590CABF /* MIKMIDIMetaTimeSignatureEvent.h in Headers */, - 095C53E8C7E76200D1C91509ED1CAFBB /* MIKMIDIMetaTrackSequenceNameEvent.h in Headers */, - 29A6CDAB307C310D5D7595820B4BA845 /* MIKMIDIMetronome.h in Headers */, - A03A0691433A9FA80F4196F1B3EF872C /* MIKMIDINoteCommand.h in Headers */, - CA632F8BDB8576CBE197E2065448C54B /* MIKMIDINoteCommand_SubclassMethods.h in Headers */, - 4299B1D77F292AE60AA550460E8F9791 /* MIKMIDINoteEvent.h in Headers */, - 23F912E4D51D3B950D95164734BEA929 /* MIKMIDINoteOffCommand.h in Headers */, - AD2EE563082F019D68C30DEC8482EB60 /* MIKMIDINoteOnCommand.h in Headers */, - B8D1493085BD89A441035929326A9CA1 /* MIKMIDIObject.h in Headers */, - 183FCAAE5122DD522ECE4F7A6565BD4B /* MIKMIDIObject_SubclassMethods.h in Headers */, - 3D0BBED5F720ACB840F0D50648792930 /* MIKMIDIOutputPort.h in Headers */, - 8A54B16C9C1FBF94D56EB1494A606452 /* MIKMIDIPitchBendChangeCommand.h in Headers */, - D09E7760A3BF9CA168178136F946C7B3 /* MIKMIDIPitchBendChangeEvent.h in Headers */, - C3F8183452FA49DEC456C49FD42FE9B0 /* MIKMIDIPlayer.h in Headers */, - 94878AC91EF3488FF3395E1B5D72E5E7 /* MIKMIDIPolyphonicKeyPressureCommand.h in Headers */, - BAF223813E598E5DB72128610DC61305 /* MIKMIDIPolyphonicKeyPressureEvent.h in Headers */, - 446ABC3C9828846621EA75F07743F4EC /* MIKMIDIPort.h in Headers */, - 06553FFA94F9A909AC26E81BCFCFB11F /* MIKMIDIPort_SubclassMethods.h in Headers */, - C9379F78CD2FC55A1DB6C3C5B735DB0B /* MIKMIDIPrivate.h in Headers */, - 7BF70DE8ABF21F074934D5BFA371FE3A /* MIKMIDIPrivateUtilities.h in Headers */, - D7A51FEC896E8CF2AC48CBAAB38FDBE2 /* MIKMIDIProgramChangeCommand.h in Headers */, - FF254B5A51C78C7746526501F64C550F /* MIKMIDIProgramChangeEvent.h in Headers */, - 6C7C8E92468D8267CAB64229B65B5707 /* MIKMIDIResponder.h in Headers */, - 5CD15C74F470F2896AA2CB03442CBCC4 /* MIKMIDISequence.h in Headers */, - B9B6D208C68AED38A5325A1703063D1C /* MIKMIDISequence+MIKMIDIPrivate.h in Headers */, - 4CAA6759C13788930A54F780D7F73C1E /* MIKMIDISequencer.h in Headers */, - 94E366711DB82403414A6CCFBE5046C1 /* MIKMIDISequencer+MIKMIDIPrivate.h in Headers */, - 2EB397D5FF3362950C0CB87D7BBFF157 /* MIKMIDISourceEndpoint.h in Headers */, - B4DBE2BB46673218DD678B5C2D2A3109 /* MIKMIDISynthesizer.h in Headers */, - E7B11761D2E066405C8CF4AA9E23202A /* MIKMIDISynthesizer_SubclassMethods.h in Headers */, - 6522197B9C3D2D594CA3B49DF9CE98AB /* MIKMIDISynthesizerInstrument.h in Headers */, - EFC4E2B7517C2019AAB2AD6345E3CBCC /* MIKMIDISystemExclusiveCommand.h in Headers */, - DC20B5511C80BA2732A393F405CAE427 /* MIKMIDISystemKeepAliveCommand.h in Headers */, - 90653ADD4B5219833A664DE09DE5D448 /* MIKMIDISystemMessageCommand.h in Headers */, - CABD890F820954F8B70AA917B64D7FCD /* MIKMIDITempoEvent.h in Headers */, - 4B78E08882A6D336CC284B1536A14589 /* MIKMIDITrack.h in Headers */, - 9D13129BBE5476F59D286E8045EDBF4E /* MIKMIDITrack_Protected.h in Headers */, - AE8C88F6129581B32AB259FD83C26DDA /* MIKMIDITransmittable.h in Headers */, - 3C5720C02BCAF845B87DF5C59A3CE80F /* MIKMIDIUtilities.h in Headers */, - 087788B1337C4A3E84E99368F10E9140 /* NSUIApplication+MIKMIDI.h in Headers */, + 10E0AA36C9AAD0EF6316B27751929CA5 /* MIKMIDI.h in Headers */, + DD7EBB938DEA250F9ECFF379C1D71064 /* MIKMIDIChannelEvent.h in Headers */, + 680C3EA1C264B63649D9DA58C3002EB8 /* MIKMIDIChannelPressureCommand.h in Headers */, + 4DB3EF8DDB1C9480E817A51EA23B84F4 /* MIKMIDIChannelPressureEvent.h in Headers */, + E0FFD7B85FB104FDB3D25AA36D6E8D65 /* MIKMIDIChannelVoiceCommand.h in Headers */, + A04877121E53A7BD1274EF6514DAE5E6 /* MIKMIDIChannelVoiceCommand_SubclassMethods.h in Headers */, + 197C87DD72CF2A4362933EA10AB0EE3A /* MIKMIDIClientDestinationEndpoint.h in Headers */, + 1A3C6848CFF52F5EB1742A208E59BFDA /* MIKMIDIClientSourceEndpoint.h in Headers */, + CB707A3FA1E1447910AC22E11C2768EF /* MIKMIDIClock.h in Headers */, + 5BAA8681DB79F37952A5C24AD3CBD23E /* MIKMIDICommand.h in Headers */, + 9BF1579A313D14FE24DF4B224F06EA2B /* MIKMIDICommand_SubclassMethods.h in Headers */, + B22C9587150510B368957239A795D9A2 /* MIKMIDICommandScheduler.h in Headers */, + 79954EFEA4833B949D6148D9A278B22B /* MIKMIDICommandThrottler.h in Headers */, + 17BB5BB4C458E818FA2F9F75B67962DF /* MIKMIDICompilerCompatibility.h in Headers */, + 1D90673E3CABFD003D93644F84A8F96B /* MIKMIDIConnectionManager.h in Headers */, + DE139F0119F4CCB6F9B1747189B34B03 /* MIKMIDIControlChangeCommand.h in Headers */, + 1E24520B951107DB604F5BEDC4392442 /* MIKMIDIControlChangeCommand+Private.h in Headers */, + 8AC8F959DBA5217960C09F2125376934 /* MIKMIDIControlChangeEvent.h in Headers */, + 8C9ECFE161EAABFEFE5E2DF9D28AABA0 /* MIKMIDIDestinationEndpoint.h in Headers */, + 028DB6B59E21035FFAD210F28E7C2926 /* MIKMIDIDevice.h in Headers */, + 338319DB044603D7F0EE29DC6D759C82 /* MIKMIDIDeviceManager.h in Headers */, + C054D89491B225B47C57417F9B0AFD21 /* MIKMIDIEndpoint.h in Headers */, + B8C2A4F8285D15DE39D45327D74AA602 /* MIKMIDIEndpointSynthesizer.h in Headers */, + 2631CF97F0A2FEA2C8FB589DA615047F /* MIKMIDIEntity.h in Headers */, + A7FA68D5238CB6902921A520B927BA77 /* MIKMIDIErrors.h in Headers */, + B448B87D620897F13C169886A2060A4F /* MIKMIDIEvent.h in Headers */, + 2ACAAAEEDFC51BAFDA1B8024E4074588 /* MIKMIDIEvent_SubclassMethods.h in Headers */, + 02D2372D5B1F4E355BA2825559582472 /* MIKMIDIEventIterator.h in Headers */, + 952CEEBD967E29644FD24008B5BE7116 /* MIKMIDIInputPort.h in Headers */, + 04FB9E78FEA1FCB8AD3CDC13A382FBA0 /* MIKMIDIMappableResponder.h in Headers */, + 9B94014DA16A962917DA7C52702EF839 /* MIKMIDIMapping.h in Headers */, + 723A548F857E46CA2295DDDA9A3B5FBE /* MIKMIDIMappingGenerator.h in Headers */, + FDE0B4F2C979CB8C32820B66E51DD20E /* MIKMIDIMappingItem.h in Headers */, + 7485F686B1AD019F0CB734A6AE0E05EA /* MIKMIDIMappingManager.h in Headers */, + CDB9CE0362D878D130A1A74A1D07DA46 /* MIKMIDIMappingXMLParser.h in Headers */, + F1E7118A30249E1B62AA898801267246 /* MIKMIDIMetaCopyrightEvent.h in Headers */, + B7C311049C73859D22C54974AE8C3083 /* MIKMIDIMetaCuePointEvent.h in Headers */, + 89703597C5115A9B09976CE628C2BF13 /* MIKMIDIMetaEvent.h in Headers */, + 75917C9B7FD49C31D4A27477ACAABDA6 /* MIKMIDIMetaEvent_SubclassMethods.h in Headers */, + 4CC76D57708D57F29242DD18FB0D613F /* MIKMIDIMetaInstrumentNameEvent.h in Headers */, + CF13857ACF6DB179B9B766F365E449B3 /* MIKMIDIMetaKeySignatureEvent.h in Headers */, + 5394FEAC8A59769CA4963EA48BDF342D /* MIKMIDIMetaLyricEvent.h in Headers */, + D3D9FE1C6993A1BF524E5A0D93B0A6A9 /* MIKMIDIMetaMarkerTextEvent.h in Headers */, + 51FAD1611EF36C8A6E739C430CEED406 /* MIKMIDIMetaSequenceEvent.h in Headers */, + 211952C85B8C5E12B47D4C6AB311EE29 /* MIKMIDIMetaTextEvent.h in Headers */, + 6E9BAC7146680E56D286CD2EB60F93D6 /* MIKMIDIMetaTimeSignatureEvent.h in Headers */, + C9C6E1D7310347FFB7532BE02ACF5E3B /* MIKMIDIMetaTrackSequenceNameEvent.h in Headers */, + B11000625AB894ADAC44CD625D15C388 /* MIKMIDIMetronome.h in Headers */, + B8E1900112C571D6F2F68264D1A46275 /* MIKMIDINoteCommand.h in Headers */, + F833F543456648495294A136397C3DF0 /* MIKMIDINoteCommand_SubclassMethods.h in Headers */, + ABFD35D4D4134E544423E563A1836A96 /* MIKMIDINoteEvent.h in Headers */, + D4940D15E5A69A4145CE01ABF508A781 /* MIKMIDINoteOffCommand.h in Headers */, + 8AD9E152A0094613610ED99DB8E5B0D8 /* MIKMIDINoteOnCommand.h in Headers */, + DBF2D9A520E92FC33481FF4E6AC2703C /* MIKMIDIObject.h in Headers */, + AEF9BB4B823BDF77B3D309FADEF09A57 /* MIKMIDIObject_SubclassMethods.h in Headers */, + 375F1AD6C519D526D029B09C58B30915 /* MIKMIDIOutputPort.h in Headers */, + 7E61C110A235BC1F546F5F26C8F19DC0 /* MIKMIDIPitchBendChangeCommand.h in Headers */, + D47F36B7B71C9C9A864564732C62DEAF /* MIKMIDIPitchBendChangeEvent.h in Headers */, + 0D7A2F5F28053B6610F81F19113D3B90 /* MIKMIDIPlayer.h in Headers */, + BAC80AA1F157C589E5419CCBA6EC675F /* MIKMIDIPolyphonicKeyPressureCommand.h in Headers */, + 88947F2F6166DF0D259FC5CB00C9DE50 /* MIKMIDIPolyphonicKeyPressureEvent.h in Headers */, + 392FD12D939910DD01B777F10548A33A /* MIKMIDIPort.h in Headers */, + 2752BA5F431F1EC6645CE608833C6A6D /* MIKMIDIPort_SubclassMethods.h in Headers */, + 9380A78CCE2FB8AFC6E0E2FB917CA1C5 /* MIKMIDIPrivate.h in Headers */, + E08D77FEF51EAC8B129845D0E39FF58E /* MIKMIDIPrivateUtilities.h in Headers */, + 530CCA47660BF96C104146392069C3C7 /* MIKMIDIProgramChangeCommand.h in Headers */, + 5DA7AD7B2578090D81023B1BDB3BEF8A /* MIKMIDIProgramChangeEvent.h in Headers */, + 7B1166FA08499A5AE0D42F34528E091E /* MIKMIDIResponder.h in Headers */, + F0FE1D343F3DE57FC5187C07551C88C5 /* MIKMIDISequence.h in Headers */, + 5F6060210E7AE96D78DDE36B423D1FED /* MIKMIDISequence+MIKMIDIPrivate.h in Headers */, + 167DFBA9259EA750F4659AE082718F90 /* MIKMIDISequencer.h in Headers */, + 1F7FC95B6747578A4C8C5A8B68857F8E /* MIKMIDISequencer+MIKMIDIPrivate.h in Headers */, + 1E8A4C2ABDE953AFAC3721EDEA3E6CA7 /* MIKMIDISourceEndpoint.h in Headers */, + F633EF09172038406D097682DD9A6E71 /* MIKMIDISynthesizer.h in Headers */, + 70EC8DFDC86C4D54414CDAB6BAA5BD22 /* MIKMIDISynthesizer_SubclassMethods.h in Headers */, + 0978158142308BB746CA32652DF45BD3 /* MIKMIDISynthesizerInstrument.h in Headers */, + 9A87B4CE5A18F4C0FC83DE315F9274FF /* MIKMIDISystemExclusiveCommand.h in Headers */, + CD70633E2AE8B57A954808179509528E /* MIKMIDISystemKeepAliveCommand.h in Headers */, + 8BB8F0120FFB945E23D50032840279B3 /* MIKMIDISystemMessageCommand.h in Headers */, + 9EE113403FA74A9B777FAB7484807B76 /* MIKMIDITempoEvent.h in Headers */, + F4876372024448E43D28CA900A40BE4C /* MIKMIDITrack.h in Headers */, + B7E06D96D9B0E99735270612F9F69D6B /* MIKMIDITrack_Protected.h in Headers */, + 87CCE98BF330D500282C9A7BE96F32E8 /* MIKMIDITransmittable.h in Headers */, + 5198B5EE6E28908502B767C6CD4B4799 /* MIKMIDIUtilities.h in Headers */, + 0C8DDA939CDA3E0262A9676EFE3B3D3F /* NSUIApplication+MIKMIDI.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BAEF1108B3880D0DFC9543CDB2927CD /* Headers */ = { + 27B18008EAB1E4DD5E741CF371FDE1B8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0A1E967CE906250DCC2606E2990F78DE /* GCDAsyncSocket.h in Headers */, - 94B258F624A5031EE3499F1AA8580FD2 /* GCDAsyncUdpSocket.h in Headers */, + B05FCDC5904D1C9FD75F258A652086C1 /* PARImage+ASCIIInput.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5C65D7DCF00C236039E8E3CF3C98D861 /* Headers */ = { + 53A599DF3FDF256634580FCA742BF7EC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 71B0BCBFB86A1993D88773DBB6D2049B /* NSArray+SentrySanitize.h in Headers */, - 691FA2CE633A93E300D8C230BA1EFD95 /* NSLocale+Sentry.h in Headers */, - 1366015E4B6D1A61ECA83CBC4584C9FE /* NSMutableDictionary+Sentry.h in Headers */, - 3028D68976DE32FBFDD71F5975ED2707 /* PrivateSentrySDKOnly.h in Headers */, - 90AB3E04148A843A72221F46B3BF5E0B /* PrivatesHeader.h in Headers */, - 4276263A402F089AC1F93F812F0D342D /* Sentry.h in Headers */, - F1B099BDCF830ECDFDC4D28858AA56DC /* Sentry-umbrella.h in Headers */, - 846EE47763082B34D913C2B7C66B8C3F /* SentryANRTracker.h in Headers */, - 10F26E89793966DBD769145985519CA3 /* SentryANRTrackerV2.h in Headers */, - 644534C23BEB6D45A83286DBA31D6D8A /* SentryANRTrackingIntegration.h in Headers */, - 97E42A4AF1BF8C99D0517D8D7D646045 /* SentryANRTrackingIntegrationV2.h in Headers */, - 556A520803671D96A53BFBED08BC1965 /* SentryAppStartMeasurement.h in Headers */, - 5044B2E1EC2A3E6D17FC56F8B0932549 /* SentryAppStartTracker.h in Headers */, - D187307BF1437D631ED9B0C6E39792EB /* SentryAppStartTrackingIntegration.h in Headers */, - 4FBA47E32EED3B7C17DB8769B9DA29C6 /* SentryAppState.h in Headers */, - 8C7F8295AA3BB165B00C62F62D7F137D /* SentryAppStateManager.h in Headers */, - 011DFDD2A844417233EC19D18CB75C2D /* SentryAsynchronousOperation.h in Headers */, - 117B01B262FB0BFDA01374B7F7B15790 /* SentryAsyncSafeLog.h in Headers */, - 95DF2B86BA0C7CF4C683662BED6F8F10 /* SentryAttachment.h in Headers */, - 9939EA41F170F5A8754DE8866B552212 /* SentryAttachment+Private.h in Headers */, - D278215607E32819094A43F695EE962B /* SentryAutoBreadcrumbTrackingIntegration.h in Headers */, - F27DF7F6E5AE718151609712BCB19AE5 /* SentryAutoSessionTrackingIntegration.h in Headers */, - 13165EB93DCD52515D9C32F65AFC410A /* SentryBacktrace.hpp in Headers */, - E31E174B7355D316A5A7BBE53196FF98 /* SentryBaggage.h in Headers */, - 9C41E8BB47816FE5F62E84C164E453D9 /* SentryBaseIntegration.h in Headers */, - 2F7ADCE232792F05EE8452424920B2F4 /* SentryBinaryImageCache.h in Headers */, - 1B204F33F33295B2876D491B45321338 /* SentryBreadcrumb.h in Headers */, - 4C27273A6D2C46BCCE63AEFC30EE2D75 /* SentryBreadcrumb+Private.h in Headers */, - 831336F244DF178EF56D596830D0CBE4 /* SentryBreadcrumbDelegate.h in Headers */, - 83DDC77B93E45AFB197877511597BC5D /* SentryBreadcrumbTracker.h in Headers */, - D98367A341B32E28A6C9955875033D9D /* SentryBuildAppStartSpans.h in Headers */, - 7B97F26A4D2A3A43D0F571622C2132C6 /* SentryByteCountFormatter.h in Headers */, - D6FD1847C05B1E2184F5810F4A45AF61 /* SentryClient.h in Headers */, - CA049DCF679AEB8FE48B56C674D7361F /* SentryClient+Private.h in Headers */, - 38DA89771F93CE41FA55B4F74CD26D86 /* SentryClientReport.h in Headers */, - 20DA35E1F84D5ECADE13716D02AEE7A4 /* SentryCompiler.h in Headers */, - 7D8DA2E2DA3A6053570DAA19071A252A /* SentryConcurrentRateLimitsDictionary.h in Headers */, - 1652C8525649554826AD4B094BF454F5 /* SentryContinuousProfiler.h in Headers */, - 3F91961A71464B602F55E5A5C53CA206 /* SentryCoreDataSwizzling.h in Headers */, - 79521F7C7724293BEB92A25D97AB33DC /* SentryCoreDataTracker.h in Headers */, - FE8C356F8A64A1561775AE6C2C4F18B3 /* SentryCoreDataTrackingIntegration.h in Headers */, - 3D8841A37FA6EBD982F152A49AC455A5 /* SentryCPU.h in Headers */, - 21DD886043AE2F4B0446350C675FBE91 /* SentryCrash.h in Headers */, - 279295278EA94649FBE8CF87EAD9E429 /* SentryCrashBinaryImageCache.h in Headers */, - 6CCEDAA8F771DB0FD15BF361F3AF61EE /* SentryCrashBinaryImageProvider.h in Headers */, - E25484914ACEEA6194B8868FBDC94C16 /* SentryCrashC.h in Headers */, - 8F7B95925D0E62C1C36BDEA6EA479DC5 /* SentryCrashCachedData.h in Headers */, - 78DDAE2C630FD974CBF0F35A90D0E6F1 /* SentryCrashCPU.h in Headers */, - DE33527A013E7EF998FFE4F3DFD44084 /* SentryCrashCPU_Apple.h in Headers */, - F0C96F8121644BEA0386E3EDF8AB8107 /* SentryCrashDate.h in Headers */, - 7336A20562E1C8AA80BE21C1EDE97A47 /* SentryCrashDebug.h in Headers */, - 20C67B6FBD4E342F7A64038DDB41B268 /* SentryCrashDefaultBinaryImageProvider.h in Headers */, - 355FB8E39686DC38132F7C357D367612 /* SentryCrashDefaultMachineContextWrapper.h in Headers */, - 62652961CA53D5B29FE6694DA6B44EAF /* SentryCrashDoctor.h in Headers */, - D0661FD3AFF75F1895370601506195AF /* SentryCrashDynamicLinker.h in Headers */, - 1AC53EC2581D9090498273CBF1193791 /* SentryCrashExceptionApplication.h in Headers */, - DC4F1721515067BB700AEA474A451F42 /* SentryCrashFileUtils.h in Headers */, - BF2D7D69E86AB4C1D77C7882E09B2400 /* SentryCrashID.h in Headers */, - 46C26EE6A0720C8251F4C2B9970A45A6 /* SentryCrashInstallation.h in Headers */, - 4A41D30D563213DC8A7C485A0D42FE65 /* SentryCrashInstallation+Private.h in Headers */, - 1F0F04229C317CE461B0ED86AD7A0DD5 /* SentryCrashInstallationReporter.h in Headers */, - F999E09790CC383637CE54E4DD62DC31 /* SentryCrashIntegration.h in Headers */, - F816A9B53568519F567AEF3B0541632C /* SentryCrashIsAppImage.h in Headers */, - E5EC795FCBD8F9A2FF8FFE98EC03EFCC /* SentryCrashJSONCodec.h in Headers */, - B6EAB9064814C3AE52E81D96E1F6C06D /* SentryCrashJSONCodecObjC.h in Headers */, - AB26977C3E057D1B3EE8075B6969F916 /* SentryCrashMach.h in Headers */, - 7685AA765609F6EE6EE040DC0203F03D /* SentryCrashMachineContext.h in Headers */, - 2829D79769B2A9DDF8D6BA5C4CA81286 /* SentryCrashMachineContext_Apple.h in Headers */, - 38B795FE680033F973545BE87FC75864 /* SentryCrashMachineContextWrapper.h in Headers */, - 40B046DC6DD323CAFCFEB096D723008B /* SentryCrashMemory.h in Headers */, - E666DB54982791891B8A889AFBE7B8EF /* SentryCrashMonitor.h in Headers */, - 8692257BACC6EF76D64A9A5B4608C2A2 /* SentryCrashMonitor_AppState.h in Headers */, - 8C5033CF668D87ABE4B57725306093C0 /* SentryCrashMonitor_CPPException.h in Headers */, - 9C0394BFFC85CAEA02504FDE6EF02192 /* SentryCrashMonitor_MachException.h in Headers */, - 6F6D8966C4F652236C3592083138FFE8 /* SentryCrashMonitor_NSException.h in Headers */, - 54976AB53D61B390A03D38464EB6804E /* SentryCrashMonitor_Signal.h in Headers */, - 52861AE79E46B0BC384599830C6E0B38 /* SentryCrashMonitor_System.h in Headers */, - 87A85C0B66A7B4FBE1930A930A639894 /* SentryCrashMonitorContext.h in Headers */, - A470093B7160A9E9978D3F6F1A56F114 /* SentryCrashMonitorType.h in Headers */, - 6589F5E462A777D1BEC072FA91DB645D /* SentryCrashNSErrorUtil.h in Headers */, - 97FEA33F26EF0F62A3EBB28EBED35A4F /* SentryCrashObjC.h in Headers */, - 42301A3E31F1D7F391257CC45302D4BB /* SentryCrashObjCApple.h in Headers */, - 3FF75857ABC1C8A00F5B04D44B1FA128 /* SentryCrashPlatformSpecificDefines.h in Headers */, - BAE094C048C777C8B83BDC69EDD97477 /* SentryCrashReport.h in Headers */, - E9D5F6444AF779F8D528122321B60FEC /* SentryCrashReportConverter.h in Headers */, - A26E477022D7BAD793BC195BA78CC9FF /* SentryCrashReportFields.h in Headers */, - E6C56B78F18315CA23A1962098966FFE /* SentryCrashReportFilter.h in Headers */, - 444F4C7BD92D06EBEA7FE17F115A7C09 /* SentryCrashReportFilterBasic.h in Headers */, - A393F07D9673F724AFB1EAAA86FA867E /* SentryCrashReportFixer.h in Headers */, - 0D0BC86B963C9E020BEEC619AF3343F7 /* SentryCrashReportSink.h in Headers */, - 9E793F6C4F67A177A4A38D9841D586DF /* SentryCrashReportStore.h in Headers */, - 650F3B24B2D08790CD8318488044B1D7 /* SentryCrashReportVersion.h in Headers */, - C5FDB08DF0BA68D68E2DF700943257FC /* SentryCrashReportWriter.h in Headers */, - DD846DF37EE91BA96FE3D6C70C65436C /* SentryCrashScopeObserver.h in Headers */, - BE624E761A7C1DE6FA47FD0A063A5695 /* SentryCrashSignalInfo.h in Headers */, - 1C54B4D3B104E35D6349474B9ACE3BEC /* SentryCrashStackCursor.h in Headers */, - 8DD4F027A53BBE1AAB42B91199F54DDA /* SentryCrashStackCursor_Backtrace.h in Headers */, - 2C8C31954A79337FA1D2A0CFA9C19F50 /* SentryCrashStackCursor_MachineContext.h in Headers */, - 54C83FD183A9A28C4FF7F5B61267BFFB /* SentryCrashStackCursor_SelfThread.h in Headers */, - 923CE0D307D3A3A8E70E9E571747A09F /* SentryCrashStackEntryMapper.h in Headers */, - 9465E7C6E3DAD1A56159D11D3EDF8EB1 /* SentryCrashString.h in Headers */, - 8542DDB4340F5CEAC4BDA74D01671A1E /* SentryCrashSymbolicator.h in Headers */, - C0BFC985F5EF24C85B3B447136B074A8 /* SentryCrashSysCtl.h in Headers */, - 6412EFB5942AE8EA26ACE3B5C1252C0A /* SentryCrashThread.h in Headers */, - 3A9FE191F30082EF8971DB8908A20107 /* SentryCrashUUIDConversion.h in Headers */, - 45B7D589ED4A61553D00C9E5FDE5ACC0 /* SentryCrashVarArgs.h in Headers */, - 83EED6FDB282EEE371F7E4DA332F56FC /* SentryCrashWrapper.h in Headers */, - 05527C0943AA4CAD91DA3C71DF9CB082 /* SentryDataCategory.h in Headers */, - DA17BB33E04356FAA398DF672AB9845C /* SentryDataCategoryMapper.h in Headers */, - 741BFB06BF1752919A5629CD1571B714 /* SentryDateUtil.h in Headers */, - 5E38B9E73B69405B1F3A1B5E46BC8F09 /* SentryDateUtils.h in Headers */, - 4A976797C517EDE120AE17F16C2E6DAF /* SentryDebugImageProvider.h in Headers */, - 667E914A86E7FD86815AC10D9CB23F2E /* SentryDebugMeta.h in Headers */, - 40355FEAAFE48CFC7572967F4B224B21 /* SentryDefaultObjCRuntimeWrapper.h in Headers */, - 2494B472EC618B1195A7EE8D6BC2D126 /* SentryDefaultRateLimits.h in Headers */, - 324E6FD730533B546238862DD4F08EDD /* SentryDefines.h in Headers */, - 28A8094CC8ED7A3A2771CF4537129B47 /* SentryDelayedFrame.h in Headers */, - B4EAB76C1FECCEDFD41AE10E5B270320 /* SentryDelayedFramesTracker.h in Headers */, - 8718BD9A7D6EE279FC594BF78D0CDBEA /* SentryDependencyContainer.h in Headers */, - 4387B076E6C751E1C806CB2DA0A226BF /* SentryDevice.h in Headers */, - 647EF6BF971F05551994745FD638EE3C /* SentryDictionaryDeepSearch.h in Headers */, - 8DE5E089120E52614F819B8058C42F6B /* SentryDiscardedEvent.h in Headers */, - C44EADDBFFF9F6764C0A299A127B4CEC /* SentryDiscardReason.h in Headers */, - 8C7A55908EA721EB41A9A1643B754C4A /* SentryDiscardReasonMapper.h in Headers */, - 6FF8E6399842EAF3AAC862A67DB209DA /* SentryDispatchFactory.h in Headers */, - 848C1B81AC0F6BFC4DDC1A01A7F783D4 /* SentryDispatchQueueWrapper.h in Headers */, - 078CE4E6F2CA0C1623684A1BB97AE618 /* SentryDispatchSourceWrapper.h in Headers */, - D90F71614661ACE774937F7E76EE13FC /* SentryDisplayLinkWrapper.h in Headers */, - 3A94D45FDBB6261A7D2093CA21AA07A9 /* SentryDsn.h in Headers */, - 4A4BB752FEA15C56C82E452AB57330CC /* SentryEnvelope.h in Headers */, - BF89FB16B5B0F10CA85780E6CB8E82DF /* SentryEnvelope+Private.h in Headers */, - 63A4D09A1DE04D7592B7DE2006ED01FE /* SentryEnvelopeAttachmentHeader.h in Headers */, - D73229DCD8865ECEB47FA5F4952C1D47 /* SentryEnvelopeItemHeader.h in Headers */, - 7A72CA0611C2565B999DEF8DF1F68DAF /* SentryEnvelopeItemType.h in Headers */, - 98B8E5E66A6AE0ED4E0CD51330A0D1F5 /* SentryEnvelopeRateLimit.h in Headers */, - C3ED941A7527F6B1CE9037952D003063 /* SentryError.h in Headers */, - F59B6DE61EA3C273CD0C0251B1B7C220 /* SentryEvent.h in Headers */, - 9B243442E91FB29C05539E11D21FFD3B /* SentryEvent+Private.h in Headers */, - C000070DDF3D09471F83ACBCA131BB08 /* SentryException.h in Headers */, - BF4C31CBC58DF9E50D187D9E8EC14737 /* SentryExtraContextProvider.h in Headers */, - 191153B2DCCE2A32220BE252DC0F9B41 /* SentryFileIOTrackingIntegration.h in Headers */, - 9948FD6C99688D16B9DA8B3785FE294B /* SentryFileManager.h in Headers */, - A78110B581DFE9747E75E9D713F8704D /* SentryFormatter.h in Headers */, - 0BA68252B05882909F8271A85ADB4CF2 /* SentryFrame.h in Headers */, - 2EA081C64281BB843C05E181A673F8AF /* SentryFrameRemover.h in Headers */, - FEC50DCEB784568CF50B58C1CFE0119F /* SentryFramesTracker.h in Headers */, - 947DF1CDD00E75BECADFB0AF0E40AE56 /* SentryFramesTrackingIntegration.h in Headers */, - ADAE43EDEBFFD59AA57142A1FA9F7924 /* SentryGeo.h in Headers */, - D51873CDBD026C7CB2680F7E5F53338F /* SentryGlobalEventProcessor.h in Headers */, - B8ED1606FE46D3DE376E5DAD0383145F /* SentryHttpDateParser.h in Headers */, - AE649BAEC0C9CF228FEC045A3D861D85 /* SentryHttpStatusCodeRange.h in Headers */, - 60138211F88A2D8EE0E4405D689E1CCB /* SentryHttpStatusCodeRange+Private.h in Headers */, - C3A6E6F4CAA9FBD608F41E7F58AE843E /* SentryHttpTransport.h in Headers */, - 192C098CB6B01A45B083F7C157177C06 /* SentryHub.h in Headers */, - 18D8812A452D30A371CD4A5927F039F0 /* SentryHub+Private.h in Headers */, - 855C019B07A0840D621AB030217C8BE1 /* SentryInAppLogic.h in Headers */, - 89F8483389EB3F63F9AEE57CBE72AEF9 /* SentryInstallation.h in Headers */, - A1797FA8DC8B5CBFC7627DCCF932E522 /* SentryInternalCDefines.h in Headers */, - 597508F924752320C385ADB5AFC2F814 /* SentryInternalDefines.h in Headers */, - B79998FF0A519637E396B2717C0C25B5 /* SentryInternalNotificationNames.h in Headers */, - AB86E6ECB40478ECD0EE565E1B1D5F09 /* SentryInternalSerializable.h in Headers */, - 92DB7C81B3F97400CF177B0A3B9A0A8F /* SentryLaunchProfiling.h in Headers */, - 5A6FD8CE67015D0EE95FAFAC0ADB5177 /* SentryLevelHelper.h in Headers */, - EE4DE6F76C479E71D316DDD1D035AB78 /* SentryLevelMapper.h in Headers */, - 574C5029F3E3E40696E630C181E32AFB /* SentryLog.h in Headers */, - 69DFA8B1F1EC68D15BF60318C104D1CA /* SentryLogC.h in Headers */, - 26B9B841446D52C5DCAB1FEE0832F419 /* SentryMachLogging.hpp in Headers */, - 12927CED4D6D7FED0E6A9FC27AB05136 /* SentryMeasurementUnit.h in Headers */, - 0AF241400EAA9C4F8DFB618CAF940EBA /* SentryMeasurementValue.h in Headers */, - E12807496D37E3713185A8B4B1E6E556 /* SentryMechanism.h in Headers */, - 6E4AFB0A40628D9FA2798975E5F52381 /* SentryMechanismMeta.h in Headers */, - 284AC68336A9D2D5763E683B6D546D9F /* SentryMessage.h in Headers */, - 329D86134DB41FA3C2268C7129185A88 /* SentryMeta.h in Headers */, - 669125B4C98548E1A3B10D274465DBB3 /* SentryMetricKitIntegration.h in Headers */, - F99BE6D54A42AB91A1EF0959337E7480 /* SentryMetricProfiler.h in Headers */, - 8249B7BD7EC8914EE2E23BFFB6BC8990 /* SentryMigrateSessionInit.h in Headers */, - 84881E7CDC2031B3BE915535C0DD3790 /* SentryMsgPackSerializer.h in Headers */, - 3C0335486AAC2E7ACE27B0ADC2F5C5DC /* SentryNetworkTracker.h in Headers */, - 41CCD67DD308972FB4750100DD5DA80B /* SentryNetworkTrackingIntegration.h in Headers */, - 0A1671002890E4433501B412126CFF03 /* SentryNoOpSpan.h in Headers */, - F9FBA4C26C1FE7B1FB61725CC20A6FF2 /* SentryNSDataSwizzling.h in Headers */, - B1EE06DBCADFB469F22F6A3E748E9111 /* SentryNSDataTracker.h in Headers */, - 7BD1E496976C4CE5A68E70C5E7E1AD86 /* SentryNSDataUtils.h in Headers */, - BE4CEA3B07CA2D2584C8E33C13A96FCC /* SentryNSDictionarySanitize.h in Headers */, - 91779607AD01FB55B4B5A2E4E20EF59B /* SentryNSError.h in Headers */, - 8FDE1A05F3BD179213E10C7D20701CE9 /* SentryNSNotificationCenterWrapper.h in Headers */, - F000ED7B4CC033147825CA51ECC89EC8 /* SentryNSProcessInfoWrapper.h in Headers */, - E5DD361F77DEEAFF5F023AC28110346D /* SentryNSTimerFactory.h in Headers */, - 04468E4085A63F4B649EA98E5AC1A88E /* SentryNSURLRequest.h in Headers */, - FBE5E02CB9AFA135FED55C4C6B6D46AD /* SentryNSURLRequestBuilder.h in Headers */, - 181BB3A4AE34E47984253DD5DD28799B /* SentryNSURLSessionTaskSearch.h in Headers */, - D9F189B3751A4B87BA4CE88D92A6FA62 /* SentryObjCRuntimeWrapper.h in Headers */, - 6B2B062F505489EE60F609DF4C3AEA5D /* SentryOptions.h in Headers */, - CC34C8DD1776936DF3C75A672B14A0FB /* SentryOptions+HybridSDKs.h in Headers */, - 9C4EFFB7152DB9C1DCDF4F80A21877BF /* SentryOptions+Private.h in Headers */, - 7E0A57EA69BD8EB2B5A22ABB663F8B11 /* SentryPerformanceTracker.h in Headers */, - 2BD433F75B320826097A54D36BA6474D /* SentryPerformanceTrackingIntegration.h in Headers */, - CC8A1372A96DA193D857327074506C24 /* SentryPredicateDescriptor.h in Headers */, - 6575175333C20857353FB757E77243C4 /* SentryPrivate.h in Headers */, - 2089C6EA3F40C9F9A6A8A387F5F9EB30 /* SentryProfiledTracerConcurrency.h in Headers */, - 61015DDD4C5E8CEB14788B047FBA7C4E /* SentryProfiler+Private.h in Headers */, - E6FA7C73B7E03A6D76833EF47DC46B71 /* SentryProfilerDefines.h in Headers */, - AF34FCBB6E67A30AA9FC7BA164F555D0 /* SentryProfilerSerialization.h in Headers */, - 5A966C52DA8DFFD4F940E45542B63B8C /* SentryProfilerSerialization+Test.h in Headers */, - A87B808BC358D3CF036CFE7D999A7BF8 /* SentryProfilerState.h in Headers */, - 4AF3866C1FD39D834CCBE10F05C5DAF7 /* SentryProfilerState+ObjCpp.h in Headers */, - 8BA14EC86BEE75C51075FDAE45A69F34 /* SentryProfilerTestHelpers.h in Headers */, - 72B2AF45220B59FA340E6707F1B53296 /* SentryProfileTimeseries.h in Headers */, - 6A73EDF12B8CDDBDB1404F793EF25BE7 /* SentryProfilingConditionals.h in Headers */, - B6FEDFCFC1D08665DD309ACEFDF52FBA /* SentryPropagationContext.h in Headers */, - 1CD7CFB4879AD004DB7868A4144694A4 /* SentryQueueableRequestManager.h in Headers */, - 9FA8D81BD6325236CACD09AFEEA99184 /* SentryRandom.h in Headers */, - 611C71BE50FECC1A394EE650D9EFFC47 /* SentryRateLimitParser.h in Headers */, - 50B2088ABAA246179B146F0459F203D8 /* SentryRateLimits.h in Headers */, - 0DD62AEE2C64D66904E4741E1FFBDAEA /* SentryReachability.h in Headers */, - 93A1D4FF8AB8E3954D8BDC8D7F483022 /* SentryRequest.h in Headers */, - 03E93DE3BC1009B15C5AC9F645D1B505 /* SentryRequestManager.h in Headers */, - 7539F9D50E1729301BBDD62D3BA4B137 /* SentryRequestOperation.h in Headers */, - D55E9DE8374EA9E93CAE92E06CA3E1FD /* SentryRetryAfterHeaderParser.h in Headers */, - F91F6C418F4A8DB03C2FC69E4B134994 /* SentrySample.h in Headers */, - 665CCFC06FAAEF5C986D183101F480DD /* SentrySampleDecision.h in Headers */, - 208F46231C26BF5F64DE25723287F6E4 /* SentrySampleDecision+Private.h in Headers */, - 866FF228D7E04BDB19C6CB0DA1DACE3C /* SentrySamplerDecision.h in Headers */, - 69F0163F28DC425BEB090C4E1D82AC60 /* SentrySampling.h in Headers */, - C774200666FB9799EC14F5B5D7742AF1 /* SentrySamplingContext.h in Headers */, - D89C52EBFA4F53027ACF62F715028BF6 /* SentrySamplingProfiler.hpp in Headers */, - 492051A062483E1A8771A28E997879FA /* SentryScope.h in Headers */, - 8E0B6A601E2BA79F03825DF092B4E918 /* SentryScope+Private.h in Headers */, - 13409CEFE9444FA78216DD10B3E6C12F /* SentryScopeObserver.h in Headers */, - 620E3CC5288BD366D5B0AA67BBCFDA00 /* SentryScopeSyncC.h in Headers */, - 2947068A472AED471FFCA2DBE05EBCC0 /* SentryScreenFrames.h in Headers */, - F057EC0D8DE36C19DFF9F904A4FB825B /* SentryScreenshot.h in Headers */, - 0C01009228035066F2CEB77F8F608590 /* SentryScreenshotIntegration.h in Headers */, - 6E08A914A3386C45DE81083A0DC1657F /* SentrySDK.h in Headers */, - 705A021F8DFB25E5F73B3E34DFF83AFA /* SentrySDK+Private.h in Headers */, - 4CE5D77F67DBB90D59392B9C9B7D844B /* SentrySdkInfo.h in Headers */, - 607E8F399E3FE84CF258C60B2FA2FFF9 /* SentrySerializable.h in Headers */, - BAB212996A595C6E85FB2F969476571E /* SentrySerialization.h in Headers */, - 70B1D68AABECB581B3657A81E210D4C3 /* SentrySession.h in Headers */, - 56069D86D1FBBAE5D9F383CD4905AB23 /* SentrySession+Private.h in Headers */, - 5B7CBC345C89ED636684EF183D83EF57 /* SentrySessionCrashedHandler.h in Headers */, - 6FCCB96D6F20E3A3EB4E60E88F85B7C1 /* SentrySessionReplayIntegration.h in Headers */, - A4BDC047B3F26A9115DB2E18164F5A75 /* SentrySessionReplayIntegration+Private.h in Headers */, - BA2AB49398A5D5B3535552613BD92C72 /* SentrySessionReplayIntegration-Hybrid.h in Headers */, - FE00DA58347ADBB29A51D87CA6E7690B /* SentrySessionReplaySyncC.h in Headers */, - E173D6799EE0F0AA1BA542C7CD427444 /* SentrySessionTracker.h in Headers */, - 9E30518699EC6EA1F8E9D00292DF35E3 /* SentrySpan.h in Headers */, - AA72DF2A6B08DFDA765C66CAB96FD34E /* SentrySpan+Private.h in Headers */, - F9AEAB352456C776466104C28AA7C7F3 /* SentrySpanContext.h in Headers */, - A29DFFC67282B472D5F6A74B47CACB07 /* SentrySpanContext+Private.h in Headers */, - 0643DF5A6EAC912BDA66A18CBF66291C /* SentrySpanId.h in Headers */, - A001FAF2EF59B0AE18AFB5BADADA9563 /* SentrySpanOperations.h in Headers */, - AB209F4F025C8205A2AFBDB78A86BBD6 /* SentrySpanProtocol.h in Headers */, - 7EA9341FF8D4B9F542C1F8F0A1CCBFF2 /* SentrySpanStatus.h in Headers */, - EABDB5F6E0DBD5D0989D5F043E8AF711 /* SentrySpotlightTransport.h in Headers */, - 38B8A2034223A1021E0D040428EFD629 /* SentryStackBounds.hpp in Headers */, - B1D4882E23E6E9E25D377E7047112C5E /* SentryStackFrame.hpp in Headers */, - A49B8174788EB78294EC5C08795BF46B /* SentryStacktrace.h in Headers */, - 423E50F7E969FC3947F0589F1F94D65F /* SentryStacktraceBuilder.h in Headers */, - 08801E749C8606B0DDA2BF569868EDEF /* SentryStatsdClient.h in Headers */, - 2055C771D20CBE42213771F967AA1B62 /* SentrySubClassFinder.h in Headers */, - 6DFE1E0CA97D021E6EBFC086C654BB15 /* SentrySwift.h in Headers */, - 5F3B4012D6A914C8A0D02ABAAFAFEF36 /* SentrySwiftAsyncIntegration.h in Headers */, - 880899914F73C0BDC732FA09DC6E5838 /* SentrySwizzle.h in Headers */, - A397809CAC83A80AAE52156B85F84BAE /* SentrySwizzleWrapper.h in Headers */, - 2470C78D3E72A059FAE2A42C082FAC67 /* SentrySysctl.h in Headers */, - C4F12BD34CC2882FC3722C05D6AE3044 /* SentrySystemEventBreadcrumbs.h in Headers */, - 1FF81D990FCF1404F17AB3DD37F9D79B /* SentrySystemWrapper.h in Headers */, - 28265BC7CB0B3573F4705AB2ECB42EF6 /* SentryThread.h in Headers */, - 7A4AF5E68999265E8D80C3A4C863611C /* SentryThreadHandle.hpp in Headers */, - 2E4CB995EB382BB6AA7E64D691F7F3C0 /* SentryThreadInspector.h in Headers */, - B27DB7B40108916CDE48D55767E11F5D /* SentryThreadMetadataCache.hpp in Headers */, - 1F791156B8925AA4119AA545B3874170 /* SentryThreadState.hpp in Headers */, - 1B7293E18703058C27E090FD69D7B978 /* SentryThreadWrapper.h in Headers */, - 0EF0BFFF2BC66ECBE295D98354DD1EEE /* SentryTime.h in Headers */, - A911732D4221F8636FA50F7534F9C495 /* SentryTimeToDisplayTracker.h in Headers */, - 74C0F4F8C7CABE5254ED538D36158DDB /* SentryTraceContext.h in Headers */, - D35A3B4F99C44C7D26BDD6FF45434261 /* SentryTraceHeader.h in Headers */, - 750DA60EB3D6F1A7CFA061479B9B0C4B /* SentryTraceOrigins.h in Headers */, - 7C53949D32787D8CEAEBE3E056D23EC8 /* SentryTraceProfiler.h in Headers */, - D4D6FC6793C33CF75B3FF8147B6DECFF /* SentryTracer.h in Headers */, - BC7C26EC60EA12AAEA10783ADD6DA96B /* SentryTracer+Private.h in Headers */, - B133C12A9500EF6A47B828FF8C0BCA01 /* SentryTracerConfiguration.h in Headers */, - CE47808E0BD440868C56DEB13D219502 /* SentryTransaction.h in Headers */, - 0004BF649D11B8BEE3D204F57F0D1539 /* SentryTransactionContext.h in Headers */, - 36CF11EDA19D3119A1695D553177650C /* SentryTransactionContext+Private.h in Headers */, - 629EE810C376B0BBD45AEEE254000F3E /* SentryTransport.h in Headers */, - 78D4A6D6100243C370F424EC3D1424BB /* SentryTransportAdapter.h in Headers */, - 2BE6161760B7EDDE73A0B21C0847A433 /* SentryTransportFactory.h in Headers */, - 3C33AE6DC22BCC72134AFF798FB96D26 /* SentryUIApplication.h in Headers */, - D4C7E48BCFA9988ED0B2C93C7047F505 /* SentryUIDeviceWrapper.h in Headers */, - EFF7F64AEF044BCA0926FD9062B24A0F /* SentryUIEventTracker.h in Headers */, - 9F40C405E611B60970D1433DF6A3DB11 /* SentryUIEventTrackerMode.h in Headers */, - 2ECA5376A4275FECEB8B9598D29B0EDB /* SentryUIEventTrackerTransactionMode.h in Headers */, - 844D64D30AC5A62EEEA378C51AF1FE18 /* SentryUIEventTrackingIntegration.h in Headers */, - 16B8E4CFB86F8433EA5C3E8647DA308B /* SentryUIViewControllerPerformanceTracker.h in Headers */, - 04AC802383F6072E0520161C6F0AB012 /* SentryUIViewControllerSwizzling.h in Headers */, - 35B2B9FC451A80479098E181D7E32656 /* SentryUser.h in Headers */, - C1EAA428CE23F8643A205CDC9AA7AC47 /* SentryUser+Private.h in Headers */, - 6678029CE1803F1E393A984445B4856E /* SentryUserFeedback.h in Headers */, - 1675567B17FB153A61730D619B5B5B3F /* SentryViewHierarchy.h in Headers */, - 447401598D1E99257F2511FFF0C13877 /* SentryViewHierarchyIntegration.h in Headers */, - 50C8350A5D03DD68712F0E0523A6E572 /* SentryWatchdogTerminationLogic.h in Headers */, - D3E810D73DF555ED6156CBD8852BB2A4 /* SentryWatchdogTerminationScopeObserver.h in Headers */, - B86B27B864EE1D5821149D54B206D4AE /* SentryWatchdogTerminationTracker.h in Headers */, - 5F5180438C3F31B9E6677FAB46DD5AEB /* SentryWatchdogTerminationTrackingIntegration.h in Headers */, - D76339A44236AA3D0105185B032B6E53 /* SentryWithoutUIKit.h in Headers */, - FD07D81884AEEFFAA41514881C80BEFE /* UIViewController+Sentry.h in Headers */, + 7DF6D0A2F297B57F6747CDA55793F6F1 /* ORSSerialBuffer.h in Headers */, + 2A12E9A7209720A7DACBC8C498C6BF8B /* ORSSerialPacketDescriptor.h in Headers */, + 9800F902DC7644118D24D3D159AABC6A /* ORSSerialPort.h in Headers */, + 15B707379931F947448F78E81D52E69E /* ORSSerialPortManager.h in Headers */, + 3E6834F0469F1498DB002C285211BECF /* ORSSerialRequest.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 613D93EC1A02EC57A103897A676D6332 /* Headers */ = { + 7A2DFC9D709030E1BB01A05B0222D65C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 65DF27FD72255D0269775B85DF1E633B /* DAVConnection.h in Headers */, - 14E4CF2284896139324BEC60B077D42B /* DAVResponse.h in Headers */, - DCBD1EDC6558927C4794C856F9ABF91D /* DDData.h in Headers */, - 819D32C8279D40318F03A1A944DCCDC8 /* DDNumber.h in Headers */, - 56C2B10E3B098830B34BC1E64F36E3C7 /* DDRange.h in Headers */, - 262B0A863644321861DEA4DE438BD93D /* DELETEResponse.h in Headers */, - 1A71ADAD3A09E7D8046BFC857726A856 /* HTTPAsyncFileResponse.h in Headers */, - 90F6C5EBFDF12E359A6FD141063FBF0E /* HTTPAuthenticationRequest.h in Headers */, - 48028DCB73D9216A8BDCCC5E3645B316 /* HTTPConnection.h in Headers */, - AE13E9F99FBEC955CADBE0DD1B9E3194 /* HTTPDataResponse.h in Headers */, - 55C88184AEC4131F2C7A3C7D832F5051 /* HTTPDynamicFileResponse.h in Headers */, - B415D2D8A13C4A19D80CE83F29047819 /* HTTPErrorResponse.h in Headers */, - 1BEA94A8337714D02BC480809B628A80 /* HTTPFileResponse.h in Headers */, - 477CFD607BA9A018FA6AE50DFE4D3ECF /* HTTPLogging.h in Headers */, - 8309EB20F29C5A85EA3CB4F55A3701AB /* HTTPMessage.h in Headers */, - F96369C5CFFFF2F80E654A340B80E0CA /* HTTPRedirectResponse.h in Headers */, - 2CF1129398130E477438F466794506B2 /* HTTPResponse.h in Headers */, - 910771419483EB8D63BE72416D8DF970 /* HTTPServer.h in Headers */, - BBDDD4AEC109A255A060C77AA9461E45 /* MultipartFormDataParser.h in Headers */, - BFAEF7DD3545D9EB1D5D36FBDEAEC963 /* MultipartMessageHeader.h in Headers */, - 14459DF82BA0925A5FA9179B2EA0D231 /* MultipartMessageHeaderField.h in Headers */, - 91DBBBCF749407960AD940353B0E4F71 /* PUTResponse.h in Headers */, - 9EE02F2BFBA76A555929EF5686CEB9EF /* WebSocket.h in Headers */, + 21A2E2540E9231DADC2BF215F7ED95FA /* DAVConnection.h in Headers */, + 66C87B1B432B0CCCBB81D7D8973EE53D /* DAVResponse.h in Headers */, + 89226711D6B5B6566E22FD36170707A5 /* DDData.h in Headers */, + 3020A81744C96755C2A0FB997E4653BD /* DDNumber.h in Headers */, + 7DDD13C0777D2229E466EBF7688572AB /* DDRange.h in Headers */, + 310463CD905838279EBA8588D66AA30D /* DELETEResponse.h in Headers */, + AE783271D657756A2961BC76D431AA60 /* HTTPAsyncFileResponse.h in Headers */, + BC9CB2C50821D6BA89F7FDF3478FD015 /* HTTPAuthenticationRequest.h in Headers */, + 43E92A018F1E69F7B5DFC5DE30D9C4CC /* HTTPConnection.h in Headers */, + 31CDF8C2812739FA981A303BEE4FE587 /* HTTPDataResponse.h in Headers */, + 98DD28BF5C9135FBCA548E4240846EF8 /* HTTPDynamicFileResponse.h in Headers */, + 5DEDC4BBB3E2D60503A7B10A689CFFBD /* HTTPErrorResponse.h in Headers */, + 4C2C0BF68A439C275BEEE4CC6A509214 /* HTTPFileResponse.h in Headers */, + 3D44ECA9D387E36773BEEF95679A4408 /* HTTPLogging.h in Headers */, + 038DFA173BC1F500551B43042C0CA7B8 /* HTTPMessage.h in Headers */, + 6A2DA1140E1C59FB7551F1EC5EB434DB /* HTTPRedirectResponse.h in Headers */, + 8FDA14E207C3D80235CDBDDFDAC6CE2E /* HTTPResponse.h in Headers */, + B41D305C1FB787E3F626ED6A6D2C78AC /* HTTPServer.h in Headers */, + B8B3496BCEBFE96658DFE221D679CBD2 /* MultipartFormDataParser.h in Headers */, + 7BF9819222E50CC390E4ECD046CB793A /* MultipartMessageHeader.h in Headers */, + D5E401251B54F1B883108A7E0FA4E1EA /* MultipartMessageHeaderField.h in Headers */, + DAF34FE37DC20E707478A6251666BE37 /* PUTResponse.h in Headers */, + DB76DAD2C09EBA53BE700326FB3C2C5C /* WebSocket.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8F9187336E1C6770A026046541A6561E /* Headers */ = { + 826C8E8989E4B94345EC6A39FD32AE52 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 93014ABB45C895B6F6DAA9E85E7754E9 /* NSRunLoop+SRWebSocket.h in Headers */, - D73859E5CDA7FCFD0D090B62CF814307 /* NSRunLoop+SRWebSocketPrivate.h in Headers */, - 7E7D5F42AF63294D116A088AB0783851 /* NSURLRequest+SRWebSocket.h in Headers */, - 7BCBC9587ECB711150E37D3E288EDADC /* NSURLRequest+SRWebSocketPrivate.h in Headers */, - 2233BECDE0F327197799B3AB9A9F9DA4 /* SocketRocket.h in Headers */, - 3E9D8012EF36BC5B5820DCD60878F82D /* SRConstants.h in Headers */, - 0C643368BE41CC2647EC89A22C800F6B /* SRDelegateController.h in Headers */, - 497F826A968B491AA120E54F2ED6F633 /* SRError.h in Headers */, - C91EF246C0A5A853CEE04A9B835DFB26 /* SRHash.h in Headers */, - 46B7084D8200D4FEE6B9BEB7871B2D9E /* SRHTTPConnectMessage.h in Headers */, - 73272A7D5FF75537AD542B719CFFF3C0 /* SRIOConsumer.h in Headers */, - CD62219A42987824695AB7C8BF4BB499 /* SRIOConsumerPool.h in Headers */, - 45032F61FA8D1E209A7E64CD42D14141 /* SRLog.h in Headers */, - 5D1F6E6F5126D25A1746C5E4E8D2B89D /* SRMutex.h in Headers */, - 50ACD42B6BD6D6DF790B6C1C69CE909F /* SRPinningSecurityPolicy.h in Headers */, - FE71659B35CA5BEE3362C166AB89D212 /* SRProxyConnect.h in Headers */, - A79AD3024A4B6B115043D8F439FF11A5 /* SRRandom.h in Headers */, - 34AD758568BC700A7A2D4ED69A5F681C /* SRRunLoopThread.h in Headers */, - 94DE83588295F18C9D466F5AFCEC9550 /* SRSecurityPolicy.h in Headers */, - 569D0FA4A32128843F6620B70C03FD79 /* SRSIMDHelpers.h in Headers */, - 459B75F2C1D40C81C854B78C9E792984 /* SRURLUtilities.h in Headers */, - CD15A8D29B11FF49157E321AF20902AB /* SRWebSocket.h in Headers */, + 9EC1111D4F617B8F623E15842FDF6814 /* NSRunLoop+SRWebSocket.h in Headers */, + C70D8CE38E31D4673D3F5F0E29AFF356 /* NSRunLoop+SRWebSocketPrivate.h in Headers */, + 567E6DC3F65E327C49F1C6444145E58F /* NSURLRequest+SRWebSocket.h in Headers */, + A273CB47C2F487233538DD55DABF0EAE /* NSURLRequest+SRWebSocketPrivate.h in Headers */, + 88D81A83423D0102AE97D62A188DCF67 /* SocketRocket.h in Headers */, + 0DD0F9BEB6CC2E3E1D98C3F43883FDD2 /* SRConstants.h in Headers */, + DE4BE65FD4B44A0AFEBF162095F3E62A /* SRDelegateController.h in Headers */, + 75FBF22CA1672D6BCB38CF186549E59C /* SRError.h in Headers */, + 3E5E3DF0158A79003EC654FA39E9EB91 /* SRHash.h in Headers */, + 3A8BEBDA1B6F3698E23777D12B42C512 /* SRHTTPConnectMessage.h in Headers */, + 7C76D8A9EC8BD88A465BA0F4565D0227 /* SRIOConsumer.h in Headers */, + 5750A571AD72B83F60BA260921405B9C /* SRIOConsumerPool.h in Headers */, + 6E7F58B39A7E6C3BDF3E69E6D7452EBA /* SRLog.h in Headers */, + 74584E05868E0E034738944FC7064A5D /* SRMutex.h in Headers */, + ACC448E342137ACC470994D9B9BECD97 /* SRPinningSecurityPolicy.h in Headers */, + B1B39F3446DB693181D8316F54C8A436 /* SRProxyConnect.h in Headers */, + D17B4D2EBD84038F89A9286028324338 /* SRRandom.h in Headers */, + 06FD642597BECB8887662032E31FD2F6 /* SRRunLoopThread.h in Headers */, + 1AD7087069B65794537F3F381369EE75 /* SRSecurityPolicy.h in Headers */, + E79F21238BEDB440EE8E8D4EB62F8027 /* SRSIMDHelpers.h in Headers */, + 9F81E1F3894517C89E57125E9E477A90 /* SRURLUtilities.h in Headers */, + DDC04F1F40194B6F99A665ED8851CA35 /* SRWebSocket.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - BBDFC53451D74DF0BA7F6F33A1CFC372 /* Headers */ = { + 845883589416F1DCF12666E998BBE69F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7C5A5D5FB9A38972E803BB267F0D3F30 /* ORSSerialBuffer.h in Headers */, - 937C0D89ED0B1F087D86EAECE1B859F4 /* ORSSerialPacketDescriptor.h in Headers */, - 6D58B79995D0ED6C834ABC38AFD14FBB /* ORSSerialPort.h in Headers */, - F52DB52F13B5180A2636803503CB1BA5 /* ORSSerialPortManager.h in Headers */, - 044948689BEA68FA89A25F45137C5BC7 /* ORSSerialRequest.h in Headers */, + EC1037BACC8D9CE169B4E41BF10ECA7F /* PSWebSocket.h in Headers */, + 9B31AA38050D0FBD86023E2740EA36B1 /* PSWebSocketBuffer.h in Headers */, + AADB7C22B44B0BA6E4C9F0ED222280C3 /* PSWebSocketDeflater.h in Headers */, + 16EEC22BF304BADA09BDE0263EF8B417 /* PSWebSocketDriver.h in Headers */, + 325FA59AF78D5A9FCCE98246C77278EC /* PSWebSocketInflater.h in Headers */, + 67F835B610EBF86D4CBCC45D30265BEF /* PSWebSocketInternal.h in Headers */, + E40E95105A0A319631A2C908A706DFD5 /* PSWebSocketNetworkThread.h in Headers */, + ABEABBD69588975AB564457F1489BCD9 /* PSWebSocketTypes.h in Headers */, + 46468C1EAC00C942FBC7FF02D58E17CA /* PSWebSocketUTF8Decoder.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - BF0711143497A422C4885970DAB3D725 /* Headers */ = { + 845E4131ABF0C47916F54C34818DE028 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DB61CAE95D4354A283098D1D0EEDCB9B /* CLIColor.h in Headers */, - 08F257AF3F6510626F96AE276DA0BA14 /* CocoaLumberjack.h in Headers */, - 3883EBDA95B1ED9C4654181BFA6F22AF /* DDAbstractDatabaseLogger.h in Headers */, - A71B86F0A140929D5439924F289D5F3D /* DDASLLogCapture.h in Headers */, - 32825F7C0395EBB60A462B2FD13503C8 /* DDASLLogger.h in Headers */, - 6949079E56CDA6A188498E9B3A893540 /* DDAssertMacros.h in Headers */, - 66D20E347FC016EA89EB899919A656B9 /* DDContextFilterLogFormatter.h in Headers */, - FF115F865F6851D637C6B9824C7D6F4F /* DDContextFilterLogFormatter+Deprecated.h in Headers */, - 28BCDD9DA3865FD3916C0E38F01F7DBF /* DDDispatchQueueLogFormatter.h in Headers */, - 046D5D581A99C0B232C574FECC38CE18 /* DDFileLogger.h in Headers */, - 1E98E41E380BBF1C7E1D796483804B13 /* DDFileLogger+Buffering.h in Headers */, - 1FE5C73DE49100C69313FD06304D75CE /* DDFileLogger+Internal.h in Headers */, - 7687A13D5D949DB58BD8951EE8E82B6F /* DDLegacyMacros.h in Headers */, - FBDFBE19D382BA336109509D42614456 /* DDLog.h in Headers */, - 35F2665D5A44D0FB3704F144278792AD /* DDLog+LOGV.h in Headers */, - B4DDC98A312019E4ABF8FFDB3EC790AA /* DDLoggerNames.h in Headers */, - 6AC94B40B5D3E8899E0F757DDDCF059E /* DDLogMacros.h in Headers */, - 7A8B9F331176F37678F9D3104FE8C59D /* DDMultiFormatter.h in Headers */, - F2FE1A01677C62A04FCC0B958269B677 /* DDOSLogger.h in Headers */, - 50293970C02F5744FED9E257A0F30F5B /* DDTTYLogger.h in Headers */, + 3F9AA044B1A8BDA25393145A20FE8270 /* Pods-Hammerspoon-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4D12483D26D2E9608A4795A3343C2AA /* Headers */ = { + A2743831E5C543CE023CF601F03706E4 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 34189EF5AC2D92AA60AB2F14A88D4D03 /* PARImage+ASCIIInput.h in Headers */, + 8FD688966CC01B9C1EDF7314EA428376 /* GCDAsyncSocket.h in Headers */, + 76394FC98C42A7BE3BA5B7B48FBF2F50 /* GCDAsyncUdpSocket.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4F6B75F2353C420A97729CE3D7AA289 /* Headers */ = { + A71EBF1664C1ABFBCEA392B1898A78F2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 590A9AD4426352A43C280E19CD70856B /* PSWebSocket.h in Headers */, - 979611AD3DFF7804ACFBDD7B511555D3 /* PSWebSocketBuffer.h in Headers */, - 88F4A46347E60773EFBE66CCBC93A28D /* PSWebSocketDeflater.h in Headers */, - AF829E4A7BB7CC36E689808CE70D6C1D /* PSWebSocketDriver.h in Headers */, - 21FA43690DCF06A4A100B57EE585BBE8 /* PSWebSocketInflater.h in Headers */, - AFCCD19DCB9E667345C30139898BFC9A /* PSWebSocketInternal.h in Headers */, - 7D7D40461C41345801D1E1D551896887 /* PSWebSocketNetworkThread.h in Headers */, - 748B945266A8027EBC32E1A9BB4FB4B5 /* PSWebSocketTypes.h in Headers */, - 4798FB5EC05B502F6211B4261C78F5B5 /* PSWebSocketUTF8Decoder.h in Headers */, + D812C9496306BC7AE193028D25D1785C /* CLIColor.h in Headers */, + 18A548CA8C73CB916896D0731353DA91 /* CocoaLumberjack.h in Headers */, + 64532BCE0EB1AE6F867DE0CEE7B82F2B /* DDAbstractDatabaseLogger.h in Headers */, + 89CF02DB9E8BA69C1423B0AEA3694773 /* DDASLLogCapture.h in Headers */, + 725B4176A1B7E145CA1CB4EA59561113 /* DDASLLogger.h in Headers */, + 5D37732502748A0BF79C11C5D87918D7 /* DDAssertMacros.h in Headers */, + 7156A3E681EDDA522653498654495409 /* DDContextFilterLogFormatter.h in Headers */, + 7E4AA5034D47773FB697CB22013A8970 /* DDContextFilterLogFormatter+Deprecated.h in Headers */, + 2CA677FD59DBA0177C086ECA670CE876 /* DDDispatchQueueLogFormatter.h in Headers */, + 9A323F779C3C8B53FE4A6FB3EE65E949 /* DDFileLogger.h in Headers */, + 57D4483A93634EFC37D152B2E9C7B564 /* DDFileLogger+Buffering.h in Headers */, + 74F0294750FE60C2969E909667F02A26 /* DDFileLogger+Internal.h in Headers */, + 9F1228E44CACCFA60F530C4BE253CF43 /* DDLegacyMacros.h in Headers */, + 81A6F16B34305FB016A1D699A22B49D2 /* DDLog.h in Headers */, + 7B2B8A754FD5005F37B64DBB8105E57F /* DDLog+LOGV.h in Headers */, + D7F5A45FAADC2DF534FAE70C1B33666A /* DDLoggerNames.h in Headers */, + 8C492199E4A91733DC02FF510103DB6E /* DDLogMacros.h in Headers */, + 3423F6C6365E7129D077AA96679ED135 /* DDMultiFormatter.h in Headers */, + 83C8FB1FE8204891F235E32F4C5FE667 /* DDOSLogger.h in Headers */, + 550B9B9DC54D1BCC715BB6677EC0776D /* DDTTYLogger.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F55D040FF88968234DC5778ACF82B9E2 /* Headers */ = { + E9C843479A4CF339F34F523102237684 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4F2DAE289F95FC0B8FEA293586D6A144 /* Pods-Hammerspoon-umbrella.h in Headers */, + 4681CAE9ECA0FA59AD690869E938AD26 /* NSArray+SentrySanitize.h in Headers */, + 7D8E2210314ADDF5ED52B9D24C6A5D5C /* NSLocale+Sentry.h in Headers */, + CC51857B1EB90F880FECDDFD0999D948 /* NSMutableDictionary+Sentry.h in Headers */, + 4FA1876845E381F4065C373A27D563A4 /* PrivateSentrySDKOnly.h in Headers */, + 052CAF33DA1663C153D0136A5F4945E8 /* PrivatesHeader.h in Headers */, + 69C3DC99C6EF834BA4447A5F14FD988E /* Sentry.h in Headers */, + 458D15C81F325818961D3DF81D2EE5CC /* Sentry-umbrella.h in Headers */, + D818A9EB32ED56D4D5244704C782C8E6 /* SentryANRTrackerV1.h in Headers */, + B6106D0213B630D8BD71F52C70651EC1 /* SentryANRTrackerV2.h in Headers */, + E495C7D82A675710E943171E5C5A792A /* SentryANRTrackingIntegration.h in Headers */, + AD87F6E3FA48619EC7FC8058F8BE07C0 /* SentryAppStartMeasurement.h in Headers */, + 04602BDA02D455C8D6708FE2C194B003 /* SentryAppStartTracker.h in Headers */, + CC5CC3923B3FC25775F913F312F30171 /* SentryAppStartTrackingIntegration.h in Headers */, + 39275CBB86C21DADF1DA02C06DB10E77 /* SentryAppState.h in Headers */, + 9D8E9006DD6DA78901B45CE79FC55A11 /* SentryAppStateManager.h in Headers */, + EE31346308B46463CEE33968745BAB42 /* SentryAsynchronousOperation.h in Headers */, + EFDBD0DE51B151B8D601FC50303E1616 /* SentryAsyncSafeLog.h in Headers */, + EB18ACE09F8AE8796C786A3DE67E7BD9 /* SentryAttachment.h in Headers */, + 14CFCDB5EF68A742F935B2112D1EA441 /* SentryAttachment+Private.h in Headers */, + 4F53D7022F4BC050FAC5A751CBB7EBD3 /* SentryAutoBreadcrumbTrackingIntegration.h in Headers */, + D848BC28D902E8D4D63DDCDEF4A97637 /* SentryAutoSessionTrackingIntegration.h in Headers */, + 6D0A6430EF121BCFFCD92FD460A823AA /* SentryBacktrace.hpp in Headers */, + 544FBF77F31503611AFC8F290266A752 /* SentryBaggage.h in Headers */, + 9A62AFB9240D1AA7B4EBA8040200CA8D /* SentryBaseIntegration.h in Headers */, + 0FE367EB26FA1F0206DCBE4F2762B1A8 /* SentryBinaryImageCache.h in Headers */, + B293B6902145108C8E7D84EC9DEE562C /* SentryBreadcrumb.h in Headers */, + 129E36E15417D7EE56E7A7B1A1027D22 /* SentryBreadcrumb+Private.h in Headers */, + 2B8156952A413A29074AEDA747079B0E /* SentryBreadcrumbDelegate.h in Headers */, + 456342428A67C3B2567101D54DEE494E /* SentryBreadcrumbTracker.h in Headers */, + EA0AB6FFE52BABDBE184D1328AC789A4 /* SentryBuildAppStartSpans.h in Headers */, + 6D883D6EC60DDF353C200B5F4A25A55C /* SentryByteCountFormatter.h in Headers */, + E304A655B8E34FC15242023B457CE94D /* SentryClient.h in Headers */, + A6C32A5A1AC22985366DDDFA52404FE6 /* SentryClient+Private.h in Headers */, + DBCAAC79F5BA298DFD938E1E14DDF810 /* SentryClientReport.h in Headers */, + 1AE2CCC25E2E4A835B16331FA9DFC927 /* SentryCompiler.h in Headers */, + 59DB79E4198BE78C8941AA1FBBBFD4FC /* SentryConcurrentRateLimitsDictionary.h in Headers */, + C2B800D81407645EF41B7968FDF12203 /* SentryContinuousProfiler.h in Headers */, + E5A986011016FACE384BA210D3C26A92 /* SentryCoreDataSwizzling.h in Headers */, + 648D6420F4A5EB2AAFE8BCAAAFF958C1 /* SentryCoreDataTracker.h in Headers */, + 7CFA826169499097E738541E4AA461BC /* SentryCoreDataTrackingIntegration.h in Headers */, + C33841662080C41E9531C8BA3760DB73 /* SentryCPU.h in Headers */, + 490702ADFA1073E96A43E35C73432C25 /* SentryCrash.h in Headers */, + 47097FD89ED1ECFFBCC974FEAF45D3CD /* SentryCrashBinaryImageCache.h in Headers */, + E6B00DF85A36AD08676F1D8C6D2F53BD /* SentryCrashBinaryImageProvider.h in Headers */, + C15F9540A941D802525DF22033EA6244 /* SentryCrashC.h in Headers */, + 1C5DB598849A0910D8976FB0CF5ECA10 /* SentryCrashCachedData.h in Headers */, + B4D650861487DD2881AE59A46284120D /* SentryCrashCPU.h in Headers */, + 52088A14CA7BC6AA47349669D2ED8FB6 /* SentryCrashCPU_Apple.h in Headers */, + D3CB0EA1FB073DC73546BD989E9E5517 /* SentryCrashDate.h in Headers */, + 7A97AFCF017C074429B22B2C3871C8AA /* SentryCrashDebug.h in Headers */, + 19B96DB16D5124BDDD92CF6F0F716479 /* SentryCrashDefaultBinaryImageProvider.h in Headers */, + BB5845246D771FCD07EAED221670E059 /* SentryCrashDefaultMachineContextWrapper.h in Headers */, + CD297CCA65D784328882D03174DF70DA /* SentryCrashDoctor.h in Headers */, + D1A3EED2340F8541A6893AE20A39E996 /* SentryCrashDynamicLinker.h in Headers */, + 7BD5105FBB8A405DAFB92F30D4B9344F /* SentryCrashExceptionApplication.h in Headers */, + 53F9AE497D1E175CFCE3FF58F4397C56 /* SentryCrashFileUtils.h in Headers */, + 8E71B7DD9B3A7EE7818B65876A2AA2D0 /* SentryCrashID.h in Headers */, + AA2BBC6F4429D855D1B4071AB8A71725 /* SentryCrashInstallation.h in Headers */, + E06099C5AFD057E98FB3609C31206043 /* SentryCrashInstallation+Private.h in Headers */, + BFAE931B736AD7B03A28470485723B7F /* SentryCrashInstallationReporter.h in Headers */, + 2F767CA481379C801CBEBF04CBE29B9B /* SentryCrashIntegration.h in Headers */, + 5A86F60FBD9E2DC2E07E99915D8DCC2A /* SentryCrashIntegrationSessionHandler.h in Headers */, + 751CD6ABF66107DE5240DAF30508CE23 /* SentryCrashIsAppImage.h in Headers */, + DC36A9C4E4A4DDBD7E38E1222193995B /* SentryCrashJSONCodec.h in Headers */, + A751B71ED24B35EDA51779C26E048534 /* SentryCrashJSONCodecObjC.h in Headers */, + CB6C661371B5594A918E35484BF038FC /* SentryCrashMach.h in Headers */, + 5E46F108099E29D550C9C6F3BB1B8E08 /* SentryCrashMachineContext.h in Headers */, + 4A3B521A44260D4E27AA32128C50982A /* SentryCrashMachineContext_Apple.h in Headers */, + 3E3D7CD559BF18B764BFDEAF5D771A58 /* SentryCrashMachineContextWrapper.h in Headers */, + BF245A836C4585F4D382AD8326A0B849 /* SentryCrashMemory.h in Headers */, + 8CFF6946D8705337FF1A2DEDF0045064 /* SentryCrashMonitor.h in Headers */, + 34BD071558957F50111F5F84AEDD4FBC /* SentryCrashMonitor_AppState.h in Headers */, + 3B3A8E58B64C1B3C4A831FA309FE0437 /* SentryCrashMonitor_CPPException.h in Headers */, + 01CF55C715C528A0289A040925D9450C /* SentryCrashMonitor_MachException.h in Headers */, + DAEC0C29215563B912CA60C598932B83 /* SentryCrashMonitor_NSException.h in Headers */, + 865D2AC9EB69681654F152C03FEF13D1 /* SentryCrashMonitor_Signal.h in Headers */, + 9F1FC97005280BCF65A1B935FD8A3158 /* SentryCrashMonitor_System.h in Headers */, + 1D62B1400099D1BB42B98811E99E780C /* SentryCrashMonitorContext.h in Headers */, + 36C27088E492032CC14F0210C43F5C84 /* SentryCrashMonitorType.h in Headers */, + 589EAF2965E1B9213E139860498714DA /* SentryCrashNSErrorUtil.h in Headers */, + 5C9FDFF8B9DA00BDA1B6B8059C399D36 /* SentryCrashObjC.h in Headers */, + 37860A995833FBC5FB9C7A296F2528C1 /* SentryCrashObjCApple.h in Headers */, + 40A174F9B1D60F6EAA1BF6506738DB83 /* SentryCrashPlatformSpecificDefines.h in Headers */, + 84F2B66DF57F5671118118F041B2F0AF /* SentryCrashReport.h in Headers */, + 8A06C89C2D9DAA05DC5A18BE62042919 /* SentryCrashReportConverter.h in Headers */, + EDF1DC16F36773081AA4592C9FA3537E /* SentryCrashReportFields.h in Headers */, + 778414292E99FECAECEC6D90D872235A /* SentryCrashReportFilter.h in Headers */, + 156BDF85A75AC024BFB1D67CC66D1D7B /* SentryCrashReportFilterBasic.h in Headers */, + 33074F45D7F70FA0CFDA341982597DE8 /* SentryCrashReportFixer.h in Headers */, + 39C8FBD8BCBB244832012E295DF0A749 /* SentryCrashReportSink.h in Headers */, + 4D4B3321165378F9C5187B0097F0A0FD /* SentryCrashReportStore.h in Headers */, + D5EE12FF92A57DA41C2B756ED99E8C25 /* SentryCrashReportVersion.h in Headers */, + AF883A8C50416C2854DDAFF19C151A54 /* SentryCrashReportWriter.h in Headers */, + 375FC1B1A513D99C77F174AC94D387AD /* SentryCrashScopeObserver.h in Headers */, + 6955DBACDFA4AD17CE0F4652D0614B5F /* SentryCrashSignalInfo.h in Headers */, + 4D3F10C8B51BBB027EA9F317B7ECE073 /* SentryCrashStackCursor.h in Headers */, + 6F57F8043E82EC2163001AB59E8D2B82 /* SentryCrashStackCursor_Backtrace.h in Headers */, + 7FB077E3DB68D41334CE14432B5EBABA /* SentryCrashStackCursor_MachineContext.h in Headers */, + D25687C5F1F3840319A85BA24CAF9403 /* SentryCrashStackCursor_SelfThread.h in Headers */, + A00747C98E48D217AC4D46B729FBDF7C /* SentryCrashStackEntryMapper.h in Headers */, + 798A7959006E2882AF3A62A1AC035022 /* SentryCrashString.h in Headers */, + A10254FE12BBBA5743DEE98745F89B07 /* SentryCrashSymbolicator.h in Headers */, + BD7967F9A5A396BFBC71E3B5DAFB4887 /* SentryCrashSysCtl.h in Headers */, + 287C954C14C1D34C95AD2A9B6D397529 /* SentryCrashThread.h in Headers */, + ACBD7AEE37F16C52B6FD5E433EA0D37E /* SentryCrashUUIDConversion.h in Headers */, + 714D05F3F9D8E25415836ECE5CDAB6E5 /* SentryCrashVarArgs.h in Headers */, + CB5697C40710A4DA3922EC7F990AC334 /* SentryCrashWrapper.h in Headers */, + B52C05B32C91ED1D21376A9972C2A676 /* SentryDataCategory.h in Headers */, + E8267EB1D4C1432F5AED57091147C2EF /* SentryDataCategoryMapper.h in Headers */, + 8B6E86C9F18754E4BAA06F66F5907F99 /* SentryDateUtil.h in Headers */, + ABE5F496D6671B6FC4F66D37654CC53E /* SentryDateUtils.h in Headers */, + 566ACFAA6B7539A45CA47E2AB35FC728 /* SentryDebugImageProvider.h in Headers */, + D03EA6AC51AC10C6CA46870B9132A0C4 /* SentryDebugImageProvider+HybridSDKs.h in Headers */, + 22107319A430E08ED31E33DCB7DCF967 /* SentryDebugMeta.h in Headers */, + E2FEA37424C24D30CF2635ED8F9B5A63 /* SentryDefaultObjCRuntimeWrapper.h in Headers */, + 9F8497B0495A0C21ED2647E6E151CC49 /* SentryDefaultRateLimits.h in Headers */, + 1A04B1F1CC524F2ABE61BE4A29E62FC8 /* SentryDefines.h in Headers */, + A3ECD6FF84F81A4D1F8DF4F3508AFAFE /* SentryDelayedFrame.h in Headers */, + E0426162C513CEA38690857C81960BB3 /* SentryDelayedFramesTracker.h in Headers */, + 7462487FD704DC919243F805CE086C84 /* SentryDependencyContainer.h in Headers */, + E6E5F8FA1541D7BBBC3514CBEA05A2C8 /* SentryDevice.h in Headers */, + 514909C2C2CF6CFFD20EF2F6BB85DCD6 /* SentryDictionaryDeepSearch.h in Headers */, + 6BF830C7A5429B98971A1669630B5FC2 /* SentryDiscardedEvent.h in Headers */, + EDCF7A61FC0C565EAF0D6C4FBCDF0892 /* SentryDiscardReason.h in Headers */, + 79E2C079AD5D7D76E495E1098CDFF745 /* SentryDiscardReasonMapper.h in Headers */, + 2CACDBFA033E57EC541A714E4B306F5F /* SentryDispatchFactory.h in Headers */, + 23964EA81D1896E16196DA482A0EB39E /* SentryDispatchQueueProviderProtocol.h in Headers */, + 7E92285B6980D8611C07B086D0D9A7CD /* SentryDispatchQueueWrapper.h in Headers */, + 4A964B46A9814CE51E9BBFFF31C04238 /* SentryDispatchSourceProviderProtocol.h in Headers */, + F07F508EA586669E6D2BE7DCB52AD741 /* SentryDispatchSourceWrapper.h in Headers */, + 0764E675D86508178F1C826E0CBE818F /* SentryDisplayLinkWrapper.h in Headers */, + 2CA8B75AD8E762E188B2C77EBB17D7F8 /* SentryDsn.h in Headers */, + 066E905615A74065A06A12C6638E5F73 /* SentryEnvelope.h in Headers */, + 6FF00D052063657027C317F3101B5FE7 /* SentryEnvelope+Private.h in Headers */, + 798A10AC6A07FE99F37F45CB9130B924 /* SentryEnvelopeAttachmentHeader.h in Headers */, + 598163AD12989A31730BC7F36BECD943 /* SentryEnvelopeItemHeader.h in Headers */, + CD0FD48834F4C6A478E450A916E19E2E /* SentryEnvelopeItemType.h in Headers */, + 5847CFDD951F769348FBEC28BDA1E9B1 /* SentryEnvelopeRateLimit.h in Headers */, + F08BA07479246AAB41A4DB10472C9DC6 /* SentryError.h in Headers */, + FA486F2D3B4F6D1213F5D8007AF487C8 /* SentryEvent.h in Headers */, + 8643068EDE480015A6A7A5B022B67373 /* SentryEvent+Private.h in Headers */, + A09F549F619F47F0D5A31DCF9F5B0171 /* SentryException.h in Headers */, + 4C90908929770106F838618A098FEB84 /* SentryExtraContextProvider.h in Headers */, + 3D7A618BC4391306EAEB660F34D64C22 /* SentryExtraPackages.h in Headers */, + FB8ECC4837620B2D695C96C8C9986C7C /* SentryFeedbackAPI.h in Headers */, + 236657F780EDEEA6FF9174852F524CB1 /* SentryFileIOTracker.h in Headers */, + 18D338DF0D078E2C37BA4134BCD13121 /* SentryFileIOTrackingIntegration.h in Headers */, + 30AC91EE1DD21528141C19C6F24DB76E /* SentryFileManager.h in Headers */, + E9313FF456B9718327CB8466AD4C59CD /* SentryFormatter.h in Headers */, + D2B29506D82889DDB36DBC0397A6C1A7 /* SentryFrame.h in Headers */, + 0EFA7A70F9C53D7FDC17CF57B2028C30 /* SentryFrameRemover.h in Headers */, + 338856996A217C7210B24A90623489AA /* SentryFramesTracker.h in Headers */, + EB79600E2115A9FB3680C2E769609938 /* SentryFramesTrackingIntegration.h in Headers */, + 485B558711B328A08DF4F0B12D8517D1 /* SentryGeo.h in Headers */, + E8EB79E68B63681060CA8EB7B25F6286 /* SentryGlobalEventProcessor.h in Headers */, + 62AE5A443BE9F95115B1DB82A227724A /* SentryHttpDateParser.h in Headers */, + FBDCDD0297AD54010DFB5E995985A483 /* SentryHttpStatusCodeRange.h in Headers */, + C4E5C94423B8467699D8CA641FA2C4F7 /* SentryHttpStatusCodeRange+Private.h in Headers */, + 7271D2BD55282B6244119D8CC700D52A /* SentryHttpTransport.h in Headers */, + F5BEB5DED1679872FE9EF415A78EB9A2 /* SentryHub.h in Headers */, + A2EDED36DEFE6DF7A991C3C681BDE99B /* SentryHub+Private.h in Headers */, + E765C0A5FE53ED64D51CB1413CBC356C /* SentryInAppLogic.h in Headers */, + 969463810682F59655D58C17190F4212 /* SentryInstallation.h in Headers */, + A1DB0E5DEBB0F5E3E5C127F975555835 /* SentryIntegrationProtocol.h in Headers */, + B0EEC4846A0BEB2068B6E7A651AA7798 /* SentryInternalCDefines.h in Headers */, + 90E2F1204F67B016ECFB8C68A21A523A /* SentryInternalDefines.h in Headers */, + 6132E39833C0B5752E42788AF7FFEDFD /* SentryInternalNotificationNames.h in Headers */, + 712B98F4B7C2DEE3D950918A4A4C2E00 /* SentryInternalSerializable.h in Headers */, + 2DF6EEF17DEBB3FEB88229C24F90BF76 /* SentryLaunchProfiling.h in Headers */, + 9A3F152DEB19832CB3325961E91CEB57 /* SentryLevelHelper.h in Headers */, + 64E26413681664AC9DD1E5548D8995E5 /* SentryLevelMapper.h in Headers */, + BD3716915601B3940BF3F8E866D20471 /* SentryLog.h in Headers */, + CA22C3CED1126B6DFE3D02C6483C6F3F /* SentryLogC.h in Headers */, + F3C57AD95903021184F19C0CC219C108 /* SentryMachLogging.hpp in Headers */, + 1FB36B46B9A94E3DD341110BE36E5E20 /* SentryMeasurementUnit.h in Headers */, + 900F35E41F2EB538CA505BE23DC52364 /* SentryMeasurementValue.h in Headers */, + 6CDB926EDE842BC204621E7FF25D183A /* SentryMechanism.h in Headers */, + FCCF886A7583085A1D259A284A73D887 /* SentryMechanismMeta.h in Headers */, + 7718629440F8DFA7E0C0A5592F1D4C0F /* SentryMessage.h in Headers */, + A0826D01855E887E8EF83B2CD2769858 /* SentryMeta.h in Headers */, + 17850771A124E87F647F887B98D3390E /* SentryMetricKitIntegration.h in Headers */, + 31E2944D858BD38DF6A17E392EA3BBB1 /* SentryMetricProfiler.h in Headers */, + 20E414D3EE89F574F58D54C3C69A9B37 /* SentryMigrateSessionInit.h in Headers */, + C822696230130108F3AB3AE03B2F5D5B /* SentryMsgPackSerializer.h in Headers */, + 7ABBB1BD8B41F91F6183B625C6B4715A /* SentryNetworkTracker.h in Headers */, + B219FD8C27E41E9C13126D52E9FE95EC /* SentryNetworkTrackingIntegration.h in Headers */, + 3D643FC23FAA3174C506880665A68913 /* SentryNoOpSpan.h in Headers */, + EE7E80FAD619A1F9A8F1633011739C27 /* SentryNSDataSwizzling.h in Headers */, + 36CBCC7A5B79598445444F1F26415489 /* SentryNSDataUtils.h in Headers */, + 705AE823CD9CD9A822179C9B5BA7A5B6 /* SentryNSDictionarySanitize.h in Headers */, + 95D1DD7D736C41D79A2D9317F2F00524 /* SentryNSError.h in Headers */, + B6C59C815558C1721DB817886EFB9907 /* SentryNSFileManagerSwizzling.h in Headers */, + AC43756D26BA899CC3FF2279097443DF /* SentryNSNotificationCenterWrapper.h in Headers */, + A0A843B36B6CEDDF3A154C6A04555854 /* SentryNSProcessInfoWrapper.h in Headers */, + 0903E92419775664BAD9A28735D7329A /* SentryNSTimerFactory.h in Headers */, + FB163D1E698FB965E4266B4F79D64817 /* SentryNSURLRequest.h in Headers */, + 84D72E6B546B624A0C3EA8B3E7CAF0CD /* SentryNSURLRequestBuilder.h in Headers */, + 0A023621884FB912E2121719914E2654 /* SentryNSURLSessionTaskSearch.h in Headers */, + 26B97B14E0CFC48062D108B6C98A1CC8 /* SentryObjCRuntimeWrapper.h in Headers */, + 9EF3AFD0572F1B13399E292811F19306 /* SentryOptions.h in Headers */, + 802102197EEE0C3E91B8462326E6C134 /* SentryOptions+HybridSDKs.h in Headers */, + BEE7893785F4E1E1D564BBE4E3EBDB48 /* SentryOptions+Private.h in Headers */, + 9A817406B51FE4ED713B9BFDDFD24921 /* SentryPerformanceTracker.h in Headers */, + B341F7169F86EF3256D051D77599ED86 /* SentryPerformanceTrackingIntegration.h in Headers */, + C70B4124BB4DA1742D96EC0D5BCD2520 /* SentryPredicateDescriptor.h in Headers */, + 9352F896926669CD3EFF5E054EDC1BDB /* SentryPrivate.h in Headers */, + CB5AEFEAF089B7F454112FAED3ACE858 /* SentryProfiledTracerConcurrency.h in Headers */, + D5C86884CCF9A94E636BEACA70766DD0 /* SentryProfiler+Private.h in Headers */, + 2FAF81B69BC62C20CD42EF1F1F460841 /* SentryProfilerDefines.h in Headers */, + 51C1CD43D1609FED3B4CC16D20E43F2B /* SentryProfilerSerialization.h in Headers */, + C00BD26E25A255F519CF02DD80925E02 /* SentryProfilerSerialization+Test.h in Headers */, + 051D56A905F9936E4481FDED679059A4 /* SentryProfilerState.h in Headers */, + A50AA26C4ED2A5ACB0343C7747CC563C /* SentryProfilerState+ObjCpp.h in Headers */, + E59C0B1F1BF28B5985D55EEB656F02B3 /* SentryProfilerTestHelpers.h in Headers */, + C9634CCE175EEDC217381F1B7B99BDFD /* SentryProfileTimeseries.h in Headers */, + E90473F773FC825A28741985C81E759A /* SentryProfilingConditionals.h in Headers */, + 21D944472DBECF576380048FD6C85973 /* SentryPropagationContext.h in Headers */, + 9705D484D167955D704888D4154DCB8E /* SentryQueueableRequestManager.h in Headers */, + 9FCF503964EA555B93E1AA67F18C97F2 /* SentryRandom.h in Headers */, + 8D0A97728D4E7AA9F0E582443858A5B0 /* SentryRateLimitParser.h in Headers */, + 2F942B6EE8E2905FB563728D01512864 /* SentryRateLimits.h in Headers */, + 49FFD63455BE8E97E52F356A313A6982 /* SentryReachability.h in Headers */, + D1731F0C7336706115CF26732F44888D /* SentryReplayApi.h in Headers */, + 04D33C53DA990E850932AB1F4F645556 /* SentryRequest.h in Headers */, + C6083AA0ACC128577BCD71D5C3164AA8 /* SentryRequestManager.h in Headers */, + 4174767455269D3FEB4FEE823837B826 /* SentryRequestOperation.h in Headers */, + 8EC7917CD6737FD6D8F96DE0A99975C1 /* SentryRetryAfterHeaderParser.h in Headers */, + 71809BC9F599918E42685BD09D73586B /* SentrySample.h in Headers */, + 7DC1637F90466D5F8ED0B91E6B106B0E /* SentrySampleDecision.h in Headers */, + 074EF9EE2800990E106E16B9B6A103D0 /* SentrySampleDecision+Private.h in Headers */, + 7C5DB939D5F8D7A9B0C3948CDF249663 /* SentrySamplerDecision.h in Headers */, + 48099444439EB504F5F0C66F6E9A8A9E /* SentrySampling.h in Headers */, + E01A4E9066B4887F2778051C0DE1E6CE /* SentrySamplingContext.h in Headers */, + C0DA41DBA7BED717E75C96B148D9E3DF /* SentrySamplingProfiler.hpp in Headers */, + 4C349CE5B1CE3E32D06C246992B1B90E /* SentryScope.h in Headers */, + E13227410435F5E5A80B64BB6068C594 /* SentryScope+Private.h in Headers */, + 81994CF4D7E7F3F442B2F404D1F266AE /* SentryScopeObserver.h in Headers */, + 28366B1C78ABFF4C1C52827D838D910D /* SentryScopeSyncC.h in Headers */, + 29A947496A1A28C493E6CC0A28D48986 /* SentryScreenFrames.h in Headers */, + F8DC05BCB5F18CF8811B891235D7D6C1 /* SentryScreenshot.h in Headers */, + ECCCC855E6C4F77A1EF7F6684E2FB561 /* SentryScreenshotIntegration.h in Headers */, + E94F136D3364ED3D97027A94EC76457D /* SentrySDK.h in Headers */, + ADC3E499226E3F960B4BF139612B7BE1 /* SentrySDK+Private.h in Headers */, + B8DB40C7DE9B742E8F2E8F1FE4AE9273 /* SentrySdkInfo.h in Headers */, + 820C7EA3A0E195216B2CCD0E64132A65 /* SentrySdkPackage.h in Headers */, + 6B4C40DD939A71693DFB8966F1092EE9 /* SentrySerializable.h in Headers */, + 67F32CBDC9E4C4C07884A18C076A363F /* SentrySerialization.h in Headers */, + A205604994BC7AB136B8D451C9A8C3A6 /* SentrySession.h in Headers */, + 158CD5A92D0F3573967A3A6FE56EE14D /* SentrySession+Private.h in Headers */, + 70FED50858F4C266023349A334019901 /* SentrySessionReplayIntegration.h in Headers */, + F1751F588BABEC15F2BBB9136C058813 /* SentrySessionReplayIntegration+Private.h in Headers */, + EEAECE6CB1438F93B151FC25E932505C /* SentrySessionReplayIntegration-Hybrid.h in Headers */, + 256DD6393D7791D17B2D4B87C90A364B /* SentrySessionReplaySyncC.h in Headers */, + 65E864AB8E1879AC0E6286770FE554EF /* SentrySessionTracker.h in Headers */, + 8133BE5E77DB050F8439161CF18E38EC /* SentrySpan.h in Headers */, + C6747EC345CB416B8DC8177F3DA7DDAE /* SentrySpan+Private.h in Headers */, + 8F53BBD31FAE5290937E2AFE93163CFA /* SentrySpanContext.h in Headers */, + A9237C56F350DDE12839C073E70729FE /* SentrySpanContext+Private.h in Headers */, + 9A47E9A2BDF5C1827A5E42B7DCB13646 /* SentrySpanDataKey.h in Headers */, + F5BE08F494AA57BEAD1EE82F0AC8B625 /* SentrySpanId.h in Headers */, + 04EDDD2924CB46B042167174AC638A4A /* SentrySpanOperation.h in Headers */, + DA31C8E72EC400E13E27B55981EDBDF1 /* SentrySpanProtocol.h in Headers */, + E10AFE986A49B894AD948B932CA7A753 /* SentrySpanStatus.h in Headers */, + E429C02C828D0B5121D9E432FAE4FF7C /* SentrySpotlightTransport.h in Headers */, + F3CE206EC6F7C6791D7CE9A69A435C46 /* SentryStackBounds.hpp in Headers */, + 579872A06F23B8418DF980CBD66FE6A6 /* SentryStackFrame.hpp in Headers */, + FC1570E0439F86EAF0FF19951E711598 /* SentryStacktrace.h in Headers */, + 084CDA34C0A01E7851B999BCCEEFBFB8 /* SentryStacktraceBuilder.h in Headers */, + 6BEC412A3A3779DEAB2BD46D2D7A3CBA /* SentrySubClassFinder.h in Headers */, + 4CEF49E60D3264D36F6C09E606194989 /* SentrySwift.h in Headers */, + FE5A6C9CDF46902BAD6B839AF544D874 /* SentrySwiftAsyncIntegration.h in Headers */, + 105537780CD4D64B598BC98A5A628C7C /* SentrySwizzle.h in Headers */, + AC95CD25F6CF41C460A99565ED74D5F9 /* SentrySwizzleWrapper.h in Headers */, + C0AA388D48B58F0D3D021B30683B0DA1 /* SentrySysctl.h in Headers */, + 2393CBF06F072DBC4F051D19B997C65F /* SentrySystemEventBreadcrumbs.h in Headers */, + C3850EEDCA204B5837B23C0F7D0E5518 /* SentrySystemWrapper.h in Headers */, + 802CA6A06F750EA52C62072A6E81BA85 /* SentryThread.h in Headers */, + B9F4D6C54A4B9BE8594E558B9139C86C /* SentryThreadHandle.hpp in Headers */, + 23009AF73E9846DF111E623F45E11746 /* SentryThreadInspector.h in Headers */, + F91B70BE23BC18F1D4A5AE08F4B701B7 /* SentryThreadMetadataCache.hpp in Headers */, + 7C43EDD590F70BEB1A2EF86148532E74 /* SentryThreadState.hpp in Headers */, + BC94CCBB711C8274CC4302842D3D2583 /* SentryThreadWrapper.h in Headers */, + EC0C24B54A1D812A54D5D8F561B73607 /* SentryTime.h in Headers */, + 1BB64602BA9B6F86E4013598AFD1949C /* SentryTimeToDisplayTracker.h in Headers */, + 863A28C9ED354C2A3DA2911A96EEBDA9 /* SentryTraceContext.h in Headers */, + 907D8007159477F50E1856F1B9349B80 /* SentryTraceHeader.h in Headers */, + 0287336926F410D433E2EAF3A9E19845 /* SentryTraceOrigin.h in Headers */, + 14B1ACB8BB5A90256A8F7D9E7FB9D5A8 /* SentryTraceProfiler.h in Headers */, + A4662CBB53C0D17007988786E79B9731 /* SentryTracer.h in Headers */, + BA626EB5DA309C094877B2D23DE2E3F4 /* SentryTracer+Private.h in Headers */, + 63ACFC367A6861FDFEAD52BF8E419F92 /* SentryTracerConfiguration.h in Headers */, + 7F320E750150374D09407061DEB52007 /* SentryTransaction.h in Headers */, + 9ECC096B1D8DE03A288905BE92CED9A0 /* SentryTransactionContext.h in Headers */, + C1966C56927E1C0B40224FF9DBF0943F /* SentryTransactionContext+Private.h in Headers */, + D4FF4B43431BBA0C6D474A76CEEB4D68 /* SentryTransport.h in Headers */, + E2E5300FB3FC6E36803E7DD0BD0CB990 /* SentryTransportAdapter.h in Headers */, + 5CA9C869C0F56E01F8CB200159708239 /* SentryTransportFactory.h in Headers */, + 02A50D1F95F7D71F8E6068BF837850F3 /* SentryUIApplication.h in Headers */, + 8CD6891FF4A941DCAEC571C4194EFE64 /* SentryUIDeviceWrapper.h in Headers */, + 77633941F4B5FAA47F24C4B2E624A9EB /* SentryUIEventTracker.h in Headers */, + A818493AE7620EC718B81C8A826BA82B /* SentryUIEventTrackerMode.h in Headers */, + DA34335A10BA7DC8E9339CBFFC30B87C /* SentryUIEventTrackerTransactionMode.h in Headers */, + 88D660F6117AD3883925AFCAEF12E697 /* SentryUIEventTrackingIntegration.h in Headers */, + 94F01A4E72CE7F2738E9FAA5BB999079 /* SentryUIViewControllerPerformanceTracker.h in Headers */, + B54F2F0DC370DC8D41CBD679F0647EBA /* SentryUIViewControllerSwizzling.h in Headers */, + 005EF6A339C62456F09A150605F49388 /* SentryUncaughtNSExceptions.h in Headers */, + 1B4C383F790E1D713276D81F54EC4F64 /* SentryUser.h in Headers */, + EEAB563619E929B82433FE5E12FFCF17 /* SentryUser+Private.h in Headers */, + F8D5FC6D1CB6AAE8CC3F141392F8D6B4 /* SentryUserAccess.h in Headers */, + 6445C54655FEF992C4600D056DD044A6 /* SentryUserFeedback.h in Headers */, + EFCA1082930DB9AA0BB80B358DF3D6D6 /* SentryUserFeedbackIntegration.h in Headers */, + DDBB20A63F4B1015E8E50D42E667157C /* SentryViewHierarchy.h in Headers */, + 9FADE9037A50D5CEA5F770D8AC7E1CFF /* SentryViewHierarchyIntegration.h in Headers */, + D3AEAB21579101486860833407F8FDEF /* SentryWatchdogTerminationBreadcrumbProcessor.h in Headers */, + F3C95C3B0A2CF9F5E7C7A8E45E65D1C2 /* SentryWatchdogTerminationLogic.h in Headers */, + 38C808E78E2EEBB225D1430EAB1D998A /* SentryWatchdogTerminationScopeObserver.h in Headers */, + CC9CC542A4F216C9136DA6904AB7F672 /* SentryWatchdogTerminationTracker.h in Headers */, + EB0DF7D125A3AD67629663F719CE0656 /* SentryWatchdogTerminationTrackingIntegration.h in Headers */, + FB75B47ED4D49DC7874552A940D06ED0 /* SentryWeakMap.h in Headers */, + 174A6B1D3D81A98377D233E4D1FC6EA5 /* SentryWithoutUIKit.h in Headers */, + 9C2C5928ECF33F1CE2AC9DF906A3DB2A /* UIViewController+Sentry.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3974,11 +4185,11 @@ /* Begin PBXNativeTarget section */ 18ABAA2950D5B4418A5DBF7F07F33088 /* ORSSerialPort */ = { isa = PBXNativeTarget; - buildConfigurationList = 05EEF490E75D4177CC632F7C841DD5BC /* Build configuration list for PBXNativeTarget "ORSSerialPort" */; + buildConfigurationList = B684CA759B891E702C8C9EA3F2B4573E /* Build configuration list for PBXNativeTarget "ORSSerialPort" */; buildPhases = ( - BBDFC53451D74DF0BA7F6F33A1CFC372 /* Headers */, - 593511665C0C108E88734EEC8934C39A /* Sources */, - DCC05848E9EF784448C090953AA6581E /* Frameworks */, + 53A599DF3FDF256634580FCA742BF7EC /* Headers */, + B9D2D94A605548E9D4DA2AA8E73C3C9F /* Sources */, + BE4777BD0902CD39BA471443DA1F903B /* Frameworks */, ); buildRules = ( ); @@ -3991,11 +4202,11 @@ }; 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */ = { isa = PBXNativeTarget; - buildConfigurationList = BA6136ACE1E250A44C0B62B635656E78 /* Build configuration list for PBXNativeTarget "SocketRocket" */; + buildConfigurationList = 27618C86EC535704D0F1A7BC5C490F1F /* Build configuration list for PBXNativeTarget "SocketRocket" */; buildPhases = ( - 8F9187336E1C6770A026046541A6561E /* Headers */, - 47BD6A7EAF35699447A9A95453DA1EE1 /* Sources */, - B29AF0B85C2C2B5DF2B5D2D90D89BD61 /* Frameworks */, + 826C8E8989E4B94345EC6A39FD32AE52 /* Headers */, + C09EEE9686595E30C20A4D9EC72FA814 /* Sources */, + EA0061044EC4426DE47CC33DF78E145F /* Frameworks */, ); buildRules = ( ); @@ -4008,11 +4219,11 @@ }; 276021C4482165D46E0CBBEFB822FE95 /* CocoaLumberjack-CocoaLumberjackPrivacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 5C01ED195F55EB14EB60F564A79328C3 /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */; + buildConfigurationList = EDA75518194F2C81B301E2548DE30D54 /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */; buildPhases = ( - 1271CD5372228CAF66D821E1177F8C4C /* Sources */, - C7DBCAF4E3F5D00A1A2FA02116406E4E /* Frameworks */, - 188E709BC643A724E6D6F30906AABB04 /* Resources */, + 44C27A3B6C41F427AEB3D7A94C9F2F5D /* Sources */, + 3FB7FA4CDA730DD4E9272A3E57A54A74 /* Frameworks */, + C4395234A247B68F767E264780F979B1 /* Resources */, ); buildRules = ( ); @@ -4025,25 +4236,25 @@ }; 35D5075A4B88681FC9B0971146C43BBC /* Pods-Hammerspoon */ = { isa = PBXNativeTarget; - buildConfigurationList = AE8C58F18A3A8AE69F366674D0C0B27B /* Build configuration list for PBXNativeTarget "Pods-Hammerspoon" */; + buildConfigurationList = 0F7FC4F825AA745DBADE5157C3524581 /* Build configuration list for PBXNativeTarget "Pods-Hammerspoon" */; buildPhases = ( - F55D040FF88968234DC5778ACF82B9E2 /* Headers */, - F1C16B21F1B552E01C2246F2C7E91544 /* Sources */, - 4EA19649AE2AF56CA09CEC0C7C5EB4A4 /* Frameworks */, + 845E4131ABF0C47916F54C34818DE028 /* Headers */, + 431B54EF980077B45B1934C302052F25 /* Sources */, + 8D108A3DD1BC34C1390AF747657C1D07 /* Frameworks */, ); buildRules = ( ); dependencies = ( - 29CBCDA2266ED4B22EB054EAEE9639B7 /* PBXTargetDependency */, - E4F3A0FB85F47D8DC0E6E5434FEC8D30 /* PBXTargetDependency */, - 00D6569A640D9D27D6CCE0BB950E54AE /* PBXTargetDependency */, - C4D3E183BAC8C82A3AB68391309B101A /* PBXTargetDependency */, - 71AE8240788EEB781FE23A03C16DE964 /* PBXTargetDependency */, - 37B9FD9413123380585125A1C1812ADF /* PBXTargetDependency */, - D3998B908F7D28C9CA35598E0369F120 /* PBXTargetDependency */, - 7115000615248DF8188239319A41A78A /* PBXTargetDependency */, - 2287F9E2A43E1614E3CBB88C3177F424 /* PBXTargetDependency */, - 97E911443DF13762040A9E91B734B12C /* PBXTargetDependency */, + 723D3081CA9D7F0F0DFC386D7B99276C /* PBXTargetDependency */, + C41D870FB8CCAA579C25E6A3204A10B0 /* PBXTargetDependency */, + C00B3C86B1080688F345EE6052EB6239 /* PBXTargetDependency */, + 052EF0B5BDBAC1874A6F81BEDA9D1381 /* PBXTargetDependency */, + D683C55C1F3BD30E47F4BCE57632E6DF /* PBXTargetDependency */, + 19AC128454BDFDFBD6F3291F16943A21 /* PBXTargetDependency */, + 476ACA10259E8AA0B3BA59BD104DF22F /* PBXTargetDependency */, + B624D10C4BCDE94FAB36292078D04084 /* PBXTargetDependency */, + 3AE06E0FCFCF7C5458964620CA7ABA47 /* PBXTargetDependency */, + E6542B6D74B126496BA30E0EFB2D727E /* PBXTargetDependency */, ); name = "Pods-Hammerspoon"; productName = "Pods-Hammerspoon"; @@ -4052,11 +4263,11 @@ }; 6083682834ABE0AE7BD1CBF06CADD036 /* CocoaAsyncSocket */ = { isa = PBXNativeTarget; - buildConfigurationList = 0AFC659E74200C20AE52A49DE8DC8817 /* Build configuration list for PBXNativeTarget "CocoaAsyncSocket" */; + buildConfigurationList = 48BE55049CD6A15D7C95A556FF88AF70 /* Build configuration list for PBXNativeTarget "CocoaAsyncSocket" */; buildPhases = ( - 4BAEF1108B3880D0DFC9543CDB2927CD /* Headers */, - 5ADBDE8D1C1CA75A11E61AA290C7D6BF /* Sources */, - 48292EF123AE931B0632BE33AE7E71FE /* Frameworks */, + A2743831E5C543CE023CF601F03706E4 /* Headers */, + EF5E329682CCE7D0B31CBA9F24DABA50 /* Sources */, + EC81E28E0E01191FE59623D0CECD57D5 /* Frameworks */, ); buildRules = ( ); @@ -4069,11 +4280,11 @@ }; 83EFF9537A7F38964851032EF617DE38 /* PocketSocket */ = { isa = PBXNativeTarget; - buildConfigurationList = 61721BB03D331B1840B009E83F802328 /* Build configuration list for PBXNativeTarget "PocketSocket" */; + buildConfigurationList = 22FCD60B5505615F8126577DA5A80316 /* Build configuration list for PBXNativeTarget "PocketSocket" */; buildPhases = ( - F4F6B75F2353C420A97729CE3D7AA289 /* Headers */, - 0894A4A28D05C83652B31B28843E3F98 /* Sources */, - AC6AE91EABF3B31396292F4586873909 /* Frameworks */, + 845883589416F1DCF12666E998BBE69F /* Headers */, + F36D54D493D795E9C52F6451DB7D3E51 /* Sources */, + 72B333EA405429CDC03DCC333535BAE4 /* Frameworks */, ); buildRules = ( ); @@ -4086,11 +4297,11 @@ }; 9310B3A9161D4A357995A672BC027CBF /* MIKMIDI */ = { isa = PBXNativeTarget; - buildConfigurationList = 04B6A687169C3E116AD092944E8FD282 /* Build configuration list for PBXNativeTarget "MIKMIDI" */; + buildConfigurationList = 1EA5BA88DB900271C1985A8F3132E29D /* Build configuration list for PBXNativeTarget "MIKMIDI" */; buildPhases = ( - 3CF38777F45CBA2D9D901F9AF2780FE6 /* Headers */, - A9105BE00AE9D556514F5218AD9F45D0 /* Sources */, - 7A549640EE09CF96C9F2E67D2A5823CA /* Frameworks */, + 12644A2A4F62C1441FF0FAD17B41C2FC /* Headers */, + B078472DF163DFC2E21DD72C409ADC60 /* Sources */, + ECEBBE126BF3E7FDEFC788FD97D14F97 /* Frameworks */, ); buildRules = ( ); @@ -4103,17 +4314,17 @@ }; 94BDCD90B52278D1FB244A66E8B95A4A /* Sentry */ = { isa = PBXNativeTarget; - buildConfigurationList = DF056DA25BC7C0D683012738627EEA95 /* Build configuration list for PBXNativeTarget "Sentry" */; + buildConfigurationList = 32148AD0D8DFCE60770A00B1370F344D /* Build configuration list for PBXNativeTarget "Sentry" */; buildPhases = ( - 5C65D7DCF00C236039E8E3CF3C98D861 /* Headers */, - 4201C628742B71DC67A9C803752ACA77 /* Sources */, - D61AAE72DF06659CDA618D8A406C4BC9 /* Frameworks */, - 3DEA4E5FC8612BFE7E63B0571D95AB6E /* Copy generated compatibility header */, + E9C843479A4CF339F34F523102237684 /* Headers */, + 1CC42679D04E4E4ABE32C28EA52214A0 /* Sources */, + 26F00B14B424A825B2C6D3642696314D /* Frameworks */, + 3F3B13CC74932EC3EEC12C5B7D2D0516 /* Copy generated compatibility header */, ); buildRules = ( ); dependencies = ( - FC78F17866FFBE0466DFF0DEC5EBDE05 /* PBXTargetDependency */, + 4FA0D89C27366D65C5A3301909BD96BF /* PBXTargetDependency */, ); name = Sentry; productName = Sentry; @@ -4122,11 +4333,11 @@ }; 97C36B3C576D3765DAAE4EA7AC1E9ADC /* Sentry-Sentry */ = { isa = PBXNativeTarget; - buildConfigurationList = 5429302C3A1387B69841B3555032FBF9 /* Build configuration list for PBXNativeTarget "Sentry-Sentry" */; + buildConfigurationList = F3F0CCECB430E649FF388433A50EBB6E /* Build configuration list for PBXNativeTarget "Sentry-Sentry" */; buildPhases = ( - AF279A098DAA60A73AA8FCE0DF4DB73B /* Sources */, - ECA104863245D2CEEFC99A32F4541BF8 /* Frameworks */, - DBB7F330D0F363C4ABB0C8E911FB1C97 /* Resources */, + 18F8FD45FDD751B0BD4AAB6AC7401F52 /* Sources */, + D23D3BFAEA23596583DB1D8166742B42 /* Frameworks */, + 40558632A36AEAAE8BD0ACC74E62EB9E /* Resources */, ); buildRules = ( ); @@ -4139,17 +4350,17 @@ }; ADF9F3B1BBEC7F642AA07171CF4B2509 /* CocoaHTTPServer */ = { isa = PBXNativeTarget; - buildConfigurationList = 2B68FF68BD2B7D7B6D76ECB8B45402AD /* Build configuration list for PBXNativeTarget "CocoaHTTPServer" */; + buildConfigurationList = 96BAB02D08D8984F43AC9FEAAD356D81 /* Build configuration list for PBXNativeTarget "CocoaHTTPServer" */; buildPhases = ( - 613D93EC1A02EC57A103897A676D6332 /* Headers */, - 000DC7C566C23124BC860C94B8CD55FD /* Sources */, - E79C69E7388C12578289C9BDC2EEBF3D /* Frameworks */, + 7A2DFC9D709030E1BB01A05B0222D65C /* Headers */, + C73635D4C903279C3227756C5BC02A18 /* Sources */, + 27E868056810CBBF36CC78BD87A92840 /* Frameworks */, ); buildRules = ( ); dependencies = ( - EECCDCB61A33ED73A5A15BE3C36193E3 /* PBXTargetDependency */, - EF2C3CFC6BBFF5A3D7B2354627E8C140 /* PBXTargetDependency */, + 783EF7BC032ABCB10ED915D814AC61CA /* PBXTargetDependency */, + 3FCBAB53310918D4F0F2EBFD573ADB2F /* PBXTargetDependency */, ); name = CocoaHTTPServer; productName = CocoaHTTPServer; @@ -4158,11 +4369,11 @@ }; BB446757690D70C17D8A0A56E3FE1C37 /* ASCIImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 7098E1B8812EF1847D8F730F8D17A787 /* Build configuration list for PBXNativeTarget "ASCIImage" */; + buildConfigurationList = 34F9C93F3A770AE98CEF6933DC4D9B21 /* Build configuration list for PBXNativeTarget "ASCIImage" */; buildPhases = ( - F4D12483D26D2E9608A4795A3343C2AA /* Headers */, - 6FE99D9D50AB5C263A05091DD1366D53 /* Sources */, - 722A4319A2C8A74EA6A92FE0F7C2F281 /* Frameworks */, + 27B18008EAB1E4DD5E741CF371FDE1B8 /* Headers */, + 5B2546914863F274496D25447BBF5674 /* Sources */, + 02BE7F305D2856468EC54D732AF172B0 /* Frameworks */, ); buildRules = ( ); @@ -4175,16 +4386,16 @@ }; E95654B155D25890BE8E26081FCA8265 /* CocoaLumberjack */ = { isa = PBXNativeTarget; - buildConfigurationList = 2D6090864D20A1FFF3E63ABF54079DD2 /* Build configuration list for PBXNativeTarget "CocoaLumberjack" */; + buildConfigurationList = 9A52699C3429BCEDD2B7FF67082F32E0 /* Build configuration list for PBXNativeTarget "CocoaLumberjack" */; buildPhases = ( - BF0711143497A422C4885970DAB3D725 /* Headers */, - 3A9081147109634907DC4A8B433CB33F /* Sources */, - 17DBC7A203C8A826D395E7E0CB5EF793 /* Frameworks */, + A71EBF1664C1ABFBCEA392B1898A78F2 /* Headers */, + 9583A92F544B16E002581EBCBA271730 /* Sources */, + 59745BF1689E6E98A419935DDC8BA8C5 /* Frameworks */, ); buildRules = ( ); dependencies = ( - E965A62B2ADE8A94A0B2343914935851 /* PBXTargetDependency */, + ABAA76FFA14A1AAAAC158C5885034A18 /* PBXTargetDependency */, ); name = CocoaLumberjack; productName = CocoaLumberjack; @@ -4197,8 +4408,8 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; + LastSwiftUpdateCheck = 1600; + LastUpgradeCheck = 1600; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 12.0"; @@ -4209,6 +4420,8 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; + minimizedProjectReferenceProxies = 0; + preferredProjectObjectVersion = 77; productRefGroup = 7EA62FAC66764F31FF2E3931ED0F2ABA /* Products */; projectDirPath = ""; projectRoot = ""; @@ -4231,26 +4444,26 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 188E709BC643A724E6D6F30906AABB04 /* Resources */ = { + 40558632A36AEAAE8BD0ACC74E62EB9E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - A3F13A606E35DD5792FBF859BCC77FA5 /* PrivacyInfo.xcprivacy in Resources */, + 3832F164BC4B9D22CDC240C8EDF9D5B1 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBB7F330D0F363C4ABB0C8E911FB1C97 /* Resources */ = { + C4395234A247B68F767E264780F979B1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1DD82F0BAA7139EA8E0CAA0A0FB6AF67 /* PrivacyInfo.xcprivacy in Resources */, + 3E6049E2732771D4090F6010E8100C50 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3DEA4E5FC8612BFE7E63B0571D95AB6E /* Copy generated compatibility header */ = { + 3F3B13CC74932EC3EEC12C5B7D2D0516 /* Copy generated compatibility header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -4277,755 +4490,778 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 000DC7C566C23124BC860C94B8CD55FD /* Sources */ = { + 18F8FD45FDD751B0BD4AAB6AC7401F52 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F705DFF2EC1109338FE499A140718202 /* CocoaHTTPServer-dummy.m in Sources */, - 5B62A008FF250B4908F0C117AAC835D9 /* DAVConnection.m in Sources */, - D1F9180D5379E39A803DCC34046758AB /* DAVResponse.m in Sources */, - FAC2F9EEE39A0186D9F922A8D4C941FB /* DDData.m in Sources */, - 83096D4236A7443526CD19DEE39F8973 /* DDNumber.m in Sources */, - 4149F9975955E8AAD6FE82BAA99DD4D3 /* DDRange.m in Sources */, - EA6EE79FB91940F368B998F6BAC89E4F /* DELETEResponse.m in Sources */, - 63B8E6994038BA6963E8F820736CFE44 /* HTTPAsyncFileResponse.m in Sources */, - D6A3272958A4E6D5AD3A044D04B4D9D0 /* HTTPAuthenticationRequest.m in Sources */, - 09846F437267EF92A2BF3D0DFFF5E3D3 /* HTTPConnection.m in Sources */, - CD5FF1DE06A0F9E136797CEDF4FA86E3 /* HTTPDataResponse.m in Sources */, - BBC632EE0C399810B52B03EC4506F5D9 /* HTTPDynamicFileResponse.m in Sources */, - 90C521F3600E90454DE9C0A5F75B08A8 /* HTTPErrorResponse.m in Sources */, - 31C535B4F5C4DA93E171B14E0183A8EB /* HTTPFileResponse.m in Sources */, - 5B1CD924982714DA8B2D9C7B151DABD9 /* HTTPMessage.m in Sources */, - 4971EBE8E99E66A002C2FC525BE5B92C /* HTTPRedirectResponse.m in Sources */, - 735B301BC8EE918A41747D766385020E /* HTTPServer.m in Sources */, - 74644B378B7E570905005CDFB9B01243 /* MultipartFormDataParser.m in Sources */, - 2724CEE476A9B538EAFC718208D875E7 /* MultipartMessageHeader.m in Sources */, - 6E2674442133E88A8EED7AE0877FC4E3 /* MultipartMessageHeaderField.m in Sources */, - 1EC916991D1093417AE400D6335CBFF8 /* PUTResponse.m in Sources */, - 57E9D2E2620D59C636016B0A6991756E /* WebSocket.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0894A4A28D05C83652B31B28843E3F98 /* Sources */ = { + 1CC42679D04E4E4ABE32C28EA52214A0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 94905CCA34A94A71E221DF09A04EF3BC /* PocketSocket-dummy.m in Sources */, - F22C8F080EFDAFE330CA33554B0C3EB0 /* PSWebSocket.m in Sources */, - 69F2E8C204E2E4DC18E436C426A83D59 /* PSWebSocketBuffer.m in Sources */, - 041B041745ED120CC122ECE2E1D8D850 /* PSWebSocketDeflater.m in Sources */, - 0A8DA5AFEF8FEEFE86F4ED4FB9A357F5 /* PSWebSocketDriver.m in Sources */, - 7D87D523BB7AA9C207FA57992F58835A /* PSWebSocketInflater.m in Sources */, - D8DBB62C33A8C49F3EDA89E593CCB1F2 /* PSWebSocketNetworkThread.m in Sources */, - 7A85DEBDB9F71E769D0501D90178D49F /* PSWebSocketUTF8Decoder.m in Sources */, + 405830704E32666C342BB8B4F0A7F5B6 /* Data+SentryTracing.swift in Sources */, + D4F14051B569C972387C2E5BF738447D /* DecodeArbitraryData.swift in Sources */, + D2A185792053AD54488AC5C389B9D08C /* FileManager+SentryTracing.swift in Sources */, + EEF8E787445D62BE1F36C46BEFDB32EE /* HTTPHeaderSanitizer.swift in Sources */, + D5C9A9ACFB43D2A210FFFED85A4F2FB3 /* Locks.swift in Sources */, + AF493924C614CAE46D1EDEF206F5BD56 /* NSArray+SentrySanitize.m in Sources */, + 386F36C17738AB97148FEC12DD7DC180 /* NSLocale+Sentry.m in Sources */, + 960BF464A5FB2C32D33C07801B841974 /* NSMutableDictionary+Sentry.m in Sources */, + 83436E7F485E6FB69B5CA0B2021CEF93 /* NSNumberDecodableWrapper.swift in Sources */, + B748CF8E5769D7004495FC84731FE7A7 /* NumberExtensions.swift in Sources */, + 3B5596EB0842FB4388148CA581C476D4 /* PrivateSentrySDKOnly.mm in Sources */, + 962C8B450D064740EDA2593CE84F486C /* Sentry-dummy.m in Sources */, + 340C72F2B8196802A233F3145FDCB8CD /* SentryANRTracker.swift in Sources */, + A442C24A068BB7B31BAEB52CFE8C79A4 /* SentryANRTrackerV1.m in Sources */, + EFD9F2D997941D14CF5A624AA05C34AB /* SentryANRTrackerV2.m in Sources */, + 785B303EA8DC3EDFB124C5D53ED1CF2A /* SentryANRTrackerV2Delegate.swift in Sources */, + 4B011D9132F9495BC7C61B48FAFBEF2F /* SentryANRTrackingIntegration.m in Sources */, + 1A5E33C14A7D0C8C015396B42A1A4248 /* SentryANRType.swift in Sources */, + 4266EB2B013E1B2540000C358ACC0A7C /* SentryAppStartMeasurement.m in Sources */, + 5AE33F40063F5BDF66DB1371049C7B5D /* SentryAppStartTracker.m in Sources */, + A895451351C1BF480EA8CA9AF756BB15 /* SentryAppStartTrackingIntegration.m in Sources */, + 47BCF1ECD5DB1BB2471FB6D7FE914D93 /* SentryAppState.m in Sources */, + D9C31F2630E7244EDC0F072A3F374268 /* SentryAppStateManager.m in Sources */, + 6CDC88BEF61128BF470EA1A95924D34A /* SentryAsynchronousOperation.m in Sources */, + 7031DAEA38770B817B29CDE10FE97189 /* SentryAsyncSafeLog.c in Sources */, + 09587A235463DDD1B34E09B075C608A4 /* SentryAttachment.m in Sources */, + 5BBC77CB766D3C47D37F194F9A1C589F /* SentryAutoBreadcrumbTrackingIntegration.m in Sources */, + D95B82A8765B5CD2C3305A4D7A2E67C5 /* SentryAutoSessionTrackingIntegration.m in Sources */, + 19DE4FCDB976C7E837BBA0BC875C4595 /* SentryBacktrace.cpp in Sources */, + 26874E13F8C1DF36E03DA71C0A9E9DC4 /* SentryBaggage.m in Sources */, + 2560A49685CB706557B8D8C043D466C7 /* SentryBaggageSerialization.swift in Sources */, + 3878AEBC553D6A4F81DF9AA832ADE598 /* SentryBaseIntegration.m in Sources */, + BA48A112724150B9CF872BB25E246C68 /* SentryBinaryImageCache.m in Sources */, + 71D9DD39A3413609AE1C79DD14C16A00 /* SentryBreadcrumb.m in Sources */, + AA81FA4A46FDA8B0046B2E4006531D4E /* SentryBreadcrumbCodable.swift in Sources */, + AB2DEF423610B60E1E987D7832051D00 /* SentryBreadcrumbTracker.m in Sources */, + C9C4DCAF13DC17665FD5FC96ECAB8977 /* SentryBuildAppStartSpans.m in Sources */, + EE92E2B235DA275C2AC2C1C54CD65234 /* SentryByteCountFormatter.m in Sources */, + 0CA36E8E371D224182809D5EDDD2D449 /* SentryClient.m in Sources */, + AD5F802287D040F84128325118448D6C /* SentryClientReport.m in Sources */, + B61E23AE8E1FE30A7C131FB9B5EA527C /* SentryCodable.swift in Sources */, + 52660B315ACF7F2547332D40284AD616 /* SentryConcurrentRateLimitsDictionary.m in Sources */, + DD387F129BFDBC8C2330F2244147854C /* SentryContinuousProfiler.mm in Sources */, + B1DC73679DDACAA97E9250022DE498DF /* SentryCoreDataSwizzling.m in Sources */, + F0F6B80C2DC1DD2B361BA09B1D9F9C2F /* SentryCoreDataTracker.m in Sources */, + 126A3EC477C658A59D9CC7EE021EEF52 /* SentryCoreDataTrackingIntegration.m in Sources */, + 9F704D375E65832D18590D4A66BD932B /* SentryCrash.m in Sources */, + ABA7F20D744C2862BECBBC0656EA1B61 /* SentryCrashBinaryImageCache.c in Sources */, + 56ECDF79E74D7F9C25F35CC830B06209 /* SentryCrashC.c in Sources */, + A2AFF231D2D3A6A395DA2F6D9F1D45B0 /* SentryCrashCachedData.c in Sources */, + 7352CFF94CA206DA0C39D25C4D662D3B /* SentryCrashCPU.c in Sources */, + 7C31888C2D70E9AC60E76D75008A0858 /* SentryCrashCPU_arm.c in Sources */, + 0719B138AF65163D2434B36B42EF01A8 /* SentryCrashCPU_arm64.c in Sources */, + 30B7996DC9A18091C7553F8EF9434B10 /* SentryCrashCPU_x86_32.c in Sources */, + 34A06D758E8908251F5DEA7E11FE059D /* SentryCrashCPU_x86_64.c in Sources */, + C9419B99BC228624FDBA0751905CFB86 /* SentryCrashDate.c in Sources */, + CD393AD9B87D860B8722DDE4F6AEBDAF /* SentryCrashDebug.c in Sources */, + 45E6092131F766170AEA8A9292012E45 /* SentryCrashDefaultBinaryImageProvider.m in Sources */, + 90526CE02022E7BB8D5988682C5B7EAB /* SentryCrashDefaultMachineContextWrapper.m in Sources */, + D64ACA1172A92742BB5F818398679D4B /* SentryCrashDoctor.m in Sources */, + 51E10FF0812F90C312014791A977C4F9 /* SentryCrashDynamicLinker.c in Sources */, + B86A400DCEE9DA879D1A57C52BDF8115 /* SentryCrashExceptionApplication.m in Sources */, + 13B9D85C706D6C71F5A69177924EABBB /* SentryCrashFileUtils.c in Sources */, + 44CC60417BACAF77A66FD4E2231019A7 /* SentryCrashID.c in Sources */, + 471DED388EFF976E999474A8D789B04A /* SentryCrashInstallation.m in Sources */, + 5D43D131D69DE123CCB992D1A0BCED2D /* SentryCrashInstallationReporter.m in Sources */, + 2FA7F4C0CE9F0D44B7177F9A4D6BECD1 /* SentryCrashIntegration.m in Sources */, + A07296A41BA1AC2DD42C6FB1431639EF /* SentryCrashIntegrationSessionHandler.m in Sources */, + 0058D03AE74B073E629DA4D9A81120B6 /* SentryCrashJSONCodec.c in Sources */, + A861430DF3E9F9D38D79FB687183A377 /* SentryCrashJSONCodecObjC.m in Sources */, + 1C3867E79784FD94C7F8BB3C67FE383C /* SentryCrashMach.c in Sources */, + 519CEED96EFE47F03FFA19E47215BFE8 /* SentryCrashMachineContext.c in Sources */, + 9A3CE33A376008276A4A53B8E0A61085 /* SentryCrashMemory.c in Sources */, + 1C7C4792DB7D01B338850D72255E6A23 /* SentryCrashMonitor.c in Sources */, + DDF30C320E253A0DDA3EEA69B29BD614 /* SentryCrashMonitor_AppState.c in Sources */, + 3E6457183D6DCDB79E3150D0FEC1CA71 /* SentryCrashMonitor_CPPException.cpp in Sources */, + 684995CB6B19ED3B902C08858C8D76BF /* SentryCrashMonitor_MachException.c in Sources */, + 366ADE9E84E87A0AB1E1921F954D272B /* SentryCrashMonitor_NSException.m in Sources */, + 18E522C0AA33E53758BD70688441C900 /* SentryCrashMonitor_Signal.c in Sources */, + E70EAA952C9460755F73D757DAEC074A /* SentryCrashMonitor_System.m in Sources */, + 648B66F5A81712D1D9C98C09BBF7495A /* SentryCrashMonitorType.c in Sources */, + 5FB89591DEAEC81ECF254EB0D6ED5CD5 /* SentryCrashNSErrorUtil.m in Sources */, + 8D1DA889BE92BCD20990B488CFD5E91A /* SentryCrashObjC.c in Sources */, + C010E856170B5044AB52EF7D332D6D92 /* SentryCrashReport.c in Sources */, + 3E8FDFA38E3EAED6D2EE39634876FF68 /* SentryCrashReportConverter.m in Sources */, + 93ED446C8DA68BB692D6F1CA7B965BEE /* SentryCrashReportFilterBasic.m in Sources */, + A70E8425FCAFC620A0AA0D0EB4722E7F /* SentryCrashReportFixer.c in Sources */, + F50990C80CD5E44F8D9DCA3D7B7597F9 /* SentryCrashReportSink.m in Sources */, + B9CCBFCA39666C4BBD81545BF16AC236 /* SentryCrashReportStore.c in Sources */, + 7A3D2384B5C5B31DB8BBD32F318338E5 /* SentryCrashScopeObserver.m in Sources */, + 7E57DFE2833B18E191D692982600B90D /* SentryCrashSignalInfo.c in Sources */, + 6FE970D519428BB1002C9F9A8926D2BA /* SentryCrashStackCursor.c in Sources */, + EB5227D0202A5468DDA74A7D21BAA5F2 /* SentryCrashStackCursor_Backtrace.c in Sources */, + 74112F0D37026C535EBC0C6527D7C551 /* SentryCrashStackCursor_MachineContext.c in Sources */, + F87529327D6B9425FC7518DCF0A7C082 /* SentryCrashStackCursor_SelfThread.m in Sources */, + 3BCC83C00C9DE6C0954B783BEB83AFBC /* SentryCrashStackEntryMapper.m in Sources */, + D51B4C3B26C59C01127FF546D58072FA /* SentryCrashString.c in Sources */, + F32408F5609C8E954C92827E36DC1E47 /* SentryCrashSymbolicator.c in Sources */, + B80AF287D3B5C47F2DB83467BC1E3E98 /* SentryCrashSysCtl.c in Sources */, + 044DBAA24045AF12C30AE104E9574EA8 /* SentryCrashThread.c in Sources */, + 3A9DC3EB72FA8442983149E9CA5FA79B /* SentryCrashUUIDConversion.c in Sources */, + 6CC2AC4C45E9B16B8FB2CB73E7F12F12 /* SentryCrashWrapper.m in Sources */, + 734E9E5A31C9C08AF2D61371CA4E5392 /* SentryCurrentDateProvider.swift in Sources */, + 300F82B02960D7C930387100253DF56A /* SentryDataCategoryMapper.m in Sources */, + 81743B70BF84A5BA22E1C09800BA1C81 /* SentryDateUtil.m in Sources */, + 3E682547832453BCB4BA4B0D7606869B /* SentryDateUtils.m in Sources */, + 12A37AF0E62DA930704B8FC680637D6F /* SentryDebugImageProvider.m in Sources */, + AC2594783DF8FE6B970590B5538CF090 /* SentryDebugMeta.m in Sources */, + 844DEBC61B0342ABA886750E77C21D2F /* SentryDebugMetaCodable.swift in Sources */, + 7D9955FEC2214678160DFDC8A13557A0 /* SentryDefaultMaskRenderer.swift in Sources */, + 3B40CD7B282EB9A16DD29C6731162991 /* SentryDefaultObjCRuntimeWrapper.m in Sources */, + ADAC99F0278449DF714900938FA22C95 /* SentryDefaultRateLimits.m in Sources */, + 2F3121CDF1B58F9E1EC954C2CD396DD5 /* SentryDefaultViewRenderer.swift in Sources */, + FAEBA0E80A2F4AA37F9DB225C3926455 /* SentryDelayedFrame.m in Sources */, + 1F3459862C201E52F9FD05E45C47C9D9 /* SentryDelayedFramesTracker.m in Sources */, + 2E44E18E1307FF83FDB8FAB82307231F /* SentryDependencyContainer.m in Sources */, + 55A55113CA838F6E706FEE11D23E294D /* SentryDevice.mm in Sources */, + 32EEF62246F0CD85545A7FB030AF6E50 /* SentryDictionaryDeepSearch.m in Sources */, + A6839845F817176B98E18DCDAF086F32 /* SentryDiscardedEvent.m in Sources */, + 1C8FF31285EF666FCCC2B3C5F7C65660 /* SentryDiscardReasonMapper.m in Sources */, + E557AB60AFFDB0B3C0A691778736B548 /* SentryDispatchFactory.m in Sources */, + 9EDA662D67A5422B3992BF122D6C9FA4 /* SentryDispatchQueueWrapper.m in Sources */, + FD40E59736143D96A7E5F609616293B5 /* SentryDispatchSourceWrapper.m in Sources */, + 2F5645353175B89772240C745B92F327 /* SentryDisplayLinkWrapper.m in Sources */, + 290BD980F463CDECA9302073F9C0BB49 /* SentryDsn.m in Sources */, + 8EC0F8825085F637BE0C24CEEB99F50E /* SentryEnabledFeaturesBuilder.swift in Sources */, + CCCFCC2E91E861FE0839199533F4448A /* SentryEnvelope.m in Sources */, + B87BD90DBAA91E91D283C87BD8B8024B /* SentryEnvelopeAttachmentHeader.m in Sources */, + ED984A46C6DD5DC56552F77EED77B3D1 /* SentryEnvelopeItemHeader.m in Sources */, + FFC15F8C694ECCFAC50BC6D899EAFBCB /* SentryEnvelopeRateLimit.m in Sources */, + E0C0028142CF6612C3EC3A907A67425E /* SentryError.mm in Sources */, + 7FEF1581184DD7F158F99B0B2038F1EC /* SentryEvent.m in Sources */, + D714736AB346EDA89B6D4A682DAECA86 /* SentryEventCodable.swift in Sources */, + 47E88534588489C84E968AD2B09918DD /* SentryEventDecoder.swift in Sources */, + 40980AF41DC7C159720BCE3AE67AC072 /* SentryException.m in Sources */, + 31B88380B074CBB3FE9DE474BD93D7C1 /* SentryExceptionCodable.swift in Sources */, + BB2EB2C48BA5C164AFBB40CFC9D1BAFD /* SentryExperimentalOptions.swift in Sources */, + EA7DA1B2AD0F3828FD53F7B9AFA7687D /* SentryExtraContextProvider.m in Sources */, + EFB462181F085EDC8DEFBA6A59499073 /* SentryExtraPackages.m in Sources */, + 790616F2E775411F7860D1581CC3914A /* SentryFeedback.swift in Sources */, + F9FE5FA06E1ACAC8FE84805BFE1F77B4 /* SentryFeedbackAPI.m in Sources */, + F78F5759E119E455E1885104D61ED92C /* SentryFileContents.swift in Sources */, + 21628B290A5EDC48407D7377FE7CE6D7 /* SentryFileIOTracker.m in Sources */, + 4ACE91694BAA33978C3952C0EF175E8D /* SentryFileIOTracker+SwiftHelpers.swift in Sources */, + 8220DDFDA75BCE40A803D01D742F06F2 /* SentryFileIOTrackingIntegration.m in Sources */, + 4951ACB799160F339A9A34FEE4FFA591 /* SentryFileManager.m in Sources */, + E2ED3F41B781D5991DE217CC12701414 /* SentryFrame.m in Sources */, + 37372FE801D1AE8347E6B01DF0894DA8 /* SentryFrameCodable.swift in Sources */, + C8ECB3C0219D45F32E48CE63B5F0D750 /* SentryFrameRemover.m in Sources */, + 99667A53E54E0490750AE19E306299D8 /* SentryFramesDelayResult.swift in Sources */, + EC1E24531AC3032607034314AEFFC99E /* SentryFramesTracker.m in Sources */, + 76482762B19BDD94AACF28EC4321CA77 /* SentryFramesTrackingIntegration.m in Sources */, + 9D7A1997A3F98FF59A65EF38E98DA9E9 /* SentryGeo.m in Sources */, + A2AE89F36F2A8757F5C709893DA16533 /* SentryGeoCodable.swift in Sources */, + B28D230B9DF1ECD173D1AEB9464A60BF /* SentryGlobalEventProcessor.m in Sources */, + 1D5B8B9DE34CFF04FE6B817265B2383A /* SentryGraphicsImageRenderer.swift in Sources */, + 7DF4E3F1EBC3795AB688628F8FBC89D7 /* SentryHttpDateParser.m in Sources */, + 259AEFF77A9D3726500BCD540D51D410 /* SentryHttpStatusCodeRange.m in Sources */, + B3BEE8DD4A19B3FE8C59E3A1B25AD32D /* SentryHttpTransport.m in Sources */, + 3ABDA7BFF235110BDAAF56758D8CC092 /* SentryHub.m in Sources */, + A9BCA5E31DFA7A4E7ECE60697E7B3C98 /* SentryIconography.swift in Sources */, + C22743413A98E1686C8793AFAE7FB19A /* SentryId.swift in Sources */, + 6BD8D80456CD17ABD0FEB27B88E2085F /* SentryInAppLogic.m in Sources */, + C97BFB0021815E5B124A3C4BAF255698 /* SentryInstallation.m in Sources */, + 5AD11295C2BF27DD6FF87B9B39245D85 /* SentryLaunchProfiling.m in Sources */, + CC1B0976477F4F8E10B7E62B099F30B1 /* SentryLevel.swift in Sources */, + 352B1BFAAFF0844781F6EB933B89F269 /* SentryLevelHelper.m in Sources */, + DB8CF0039C18E999CB56221A45FCAEB0 /* SentryLevelMapper.m in Sources */, + 20E2FB0D8F2293AAB8194D20D56F2178 /* SentryLog.swift in Sources */, + 04DC78B160BAC79F6EAFF8E9E06B9346 /* SentryLog+Configure.swift in Sources */, + 2592E5C7958E28DD96ECB5E6738005E8 /* SentryLogC.m in Sources */, + 42BFC1BDA36B535FEB959C7630BD71C6 /* SentryLogOutput.swift in Sources */, + B1DCFE703919294A47C4779E98F336A1 /* SentryMachLogging.cpp in Sources */, + 18738765E1AA84703326A63610F003F6 /* SentryMaskingPreviewView.swift in Sources */, + DF0F2D2241D440957D74856E84D81575 /* SentryMaskRenderer.swift in Sources */, + D5733480ADE4F0D7072E8B67BFA93D48 /* SentryMaskRendererV2.swift in Sources */, + D59815B78595D3F76F0B229BF84BC66C /* SentryMeasurementUnit.m in Sources */, + B79728DAE1B94FFC0AA9732C39FE0B47 /* SentryMeasurementValue.m in Sources */, + D19DD97327B84307FF002304266B6CFE /* SentryMechanism.m in Sources */, + C8F11038D2AB7AA5871619A91B063F87 /* SentryMechanismCodable.swift in Sources */, + 24B03DE6D29B690C0EEC5933DD12DB1C /* SentryMechanismMeta.m in Sources */, + E0BBDA0127F46E072AB6B7CB406C0654 /* SentryMechanismMetaCodable.swift in Sources */, + D549C6440663FDEB2D98A0AF81FBB37C /* SentryMessage.m in Sources */, + B9C4F7207BDA879FE70B05174BEB280B /* SentryMessage.swift in Sources */, + 8AEA495A9FF62846076EE9197FEA32A9 /* SentryMeta.m in Sources */, + 714E8A01D489A240F880EB118C7FF302 /* SentryMetricKitIntegration.m in Sources */, + 6E9A6AF1720E8D0ACF308A01C0CB6A2C /* SentryMetricProfiler.mm in Sources */, + 49827DE6152D08D990832A4EEFF56178 /* SentryMigrateSessionInit.m in Sources */, + D35474D31ACF0B987271A87E12ECBB01 /* SentryMsgPackSerializer.m in Sources */, + 4C15C66636B911C5C8FE629D3B07F064 /* SentryMXCallStackTree.swift in Sources */, + 13EF59DB81CF02FF5C5A746414281994 /* SentryMXManager.swift in Sources */, + 3350D8A08C14A86EFF92600C380EE50C /* SentryNetworkTracker.m in Sources */, + AF7F07D02E7FBCB00381590249BB2604 /* SentryNetworkTrackingIntegration.m in Sources */, + E5699D45C639C931538FB25584061865 /* SentryNoOpSpan.m in Sources */, + DE787446F1BAD1C6D7BF51D6AE5C2596 /* SentryNSDataSwizzling.m in Sources */, + B1F3FA578599744BA5F2455469466E7C /* SentryNSDataUtils.m in Sources */, + 16F8417571B1CB3E7D2A3D6C9CCE3E6E /* SentryNSDictionarySanitize.m in Sources */, + 6BD9FF57858F18702D417E85201D29E7 /* SentryNSError.m in Sources */, + BBD53B19C68FFE3A5D8F69F7EFF3B24D /* SentryNSErrorCodable.swift in Sources */, + B204F7DB7F568FA6FED9F9B1D3EA0725 /* SentryNSFileManagerSwizzling.m in Sources */, + 36C40FC3925C359997E4F541DAF026E9 /* SentryNSNotificationCenterWrapper.m in Sources */, + FC12B41476F15DF1816E5C5D10FA1D36 /* SentryNSProcessInfoWrapper.mm in Sources */, + A09760ED7CD7E0C8ED0E003F47F043DB /* SentryNSTimerFactory.m in Sources */, + FBAE79450222FEE904DE7807A5D71877 /* SentryNSURLRequest.m in Sources */, + C5160B09FF5CFF0FA14C87E3E89B8757 /* SentryNSURLRequestBuilder.m in Sources */, + 0235081360C0698B649A181764B8F958 /* SentryNSURLSessionTaskSearch.m in Sources */, + C4D48F2B68630D22D46388EDBD473148 /* SentryOnDemandReplay.swift in Sources */, + 2E731D007457224D46CD6C45E7A9E78E /* SentryOnDemandReplayError.swift in Sources */, + 2CAA932140A7F83115E21C182D34E731 /* SentryOptions.m in Sources */, + C5E68AB69485890D4525952AE7FE11EA /* SentryPerformanceTracker.m in Sources */, + 3013298B881D6E22078F47E3440F49D8 /* SentryPerformanceTrackingIntegration.m in Sources */, + 86741083FF5CB10DCBDDDCC8FD5B6B46 /* SentryPixelBuffer.swift in Sources */, + FD4F923A96336EDF4E9DA6A8304FB7C4 /* SentryPredicateDescriptor.m in Sources */, + ECEE58BDFCE4FD37C45EA03707E6D546 /* SentryProfiledTracerConcurrency.mm in Sources */, + 824FB54D2E4F52A60CB32FF2B7C9669C /* SentryProfileOptions.swift in Sources */, + 8D887EC0B7FC3D0455D1E6BFC0B12175 /* SentryProfiler.mm in Sources */, + D01499C0BD368FB27C61CBF9AAAF5872 /* SentryProfilerSerialization.mm in Sources */, + 21D1C98A91424F038ADE711EDE409E8A /* SentryProfilerState.mm in Sources */, + 974593E3B3E3267532748EAD484B0A20 /* SentryProfilerTestHelpers.m in Sources */, + AAFD5032178C4B059F1DA13BBCBAF53D /* SentryProfileTimeseries.mm in Sources */, + 2B2DE2D3A4235BEC492808D8760C9E47 /* SentryPropagationContext.m in Sources */, + B426475E75BB07C3031D923E596872BA /* SentryQueueableRequestManager.m in Sources */, + ECDDD1272A199967D7FC84780389D0FD /* SentryRandom.m in Sources */, + 053064970BE64D95D8D1FCDD4AAC6F1C /* SentryRateLimitParser.m in Sources */, + C3F5D2B1963896381142EBF45C4AF8B6 /* SentryReachability.m in Sources */, + 51AE367B20B039F2E20155A53F01FA19 /* SentryRedactOptions.swift in Sources */, + EAEBC09AD4008AC0742E8A9115ACE29C /* SentryRenderVideoResult.swift in Sources */, + 2D88E9214349D77870AA757CF2B5226E /* SentryReplayApi.m in Sources */, + A9D87A6D8BF4E4EBDA2910462C4AAEC4 /* SentryReplayEvent.swift in Sources */, + FF9BDAB8DA67173B744A9A503D7699FC /* SentryReplayFrame.swift in Sources */, + 8AE6BDDD3E5ED3E97801ADC5B5804366 /* SentryReplayOptions.swift in Sources */, + EB44AD370A50DE5FB423D07C11B4CF9E /* SentryReplayRecording.swift in Sources */, + B2C5E119FD3043386C255170D18CE878 /* SentryReplayType.swift in Sources */, + E0D40F3626AA7C0BC7B2E2D4B18003E8 /* SentryReplayVideoMaker.swift in Sources */, + 4A6B9477DC81A028021AA701BB1E4550 /* SentryRequest.m in Sources */, + 8DCAAFD61D80CD2FA1931C73B9A20E4D /* SentryRequestCodable.swift in Sources */, + E8665F2845812B5606B9D65CF29DA6C2 /* SentryRequestOperation.m in Sources */, + F3E433F785FB7E6157693B3103312E3C /* SentryRetryAfterHeaderParser.m in Sources */, + 88BC8167E31E32B58B96CA7AB46EBB45 /* SentryRRWebBreadcrumbEvent.swift in Sources */, + 7F8E39D860A3C6343B689AB0E30489D8 /* SentryRRWebCustomEvent.swift in Sources */, + 739CE79C098376B15F02D2AFA56847B7 /* SentryRRWebEvent.swift in Sources */, + 879E8BA3FD6E3FDF3EF5442378ECA03E /* SentryRRWebMetaEvent.swift in Sources */, + 9132AFE0BB0E356F7E69CFB67CFEB342 /* SentryRRWebOptionsEvent.swift in Sources */, + 9AD4D3DAC08F01B31211D4B06FF05FE3 /* SentryRRWebSpanEvent.swift in Sources */, + C441C5C5A715C2ED984A968D4A83A1EC /* SentryRRWebTouchEvent.swift in Sources */, + 6A421CE76148C52C60DBBAA7663ADC72 /* SentryRRWebVideoEvent.swift in Sources */, + 1CB9C298E8F49BF87EEC064FB31F47B5 /* SentrySample.m in Sources */, + 3E65C0084750EF11D19E2B294AA18E31 /* SentrySampleDecision.m in Sources */, + 49E4CB3E1A7DE13AB71D0C3FF90CAF4A /* SentrySamplerDecision.m in Sources */, + 12DF47F9CC4CD388A2FE45621D09BDFD /* SentrySampling.m in Sources */, + A17744DE32844B1903FDD0E5DC5E02B4 /* SentrySamplingContext.m in Sources */, + C728D34757B5D6023059A31ADE5605DF /* SentrySamplingProfiler.cpp in Sources */, + FA504540F1E25D6E171185DEF02A2845 /* SentryScope.m in Sources */, + 0654A7AEA0977849F0D5C0B85F58EC1E /* SentryScopeContextPersistentStore.swift in Sources */, + B19CAC6638326EFDC39EC28507B0581A /* SentryScopeSyncC.c in Sources */, + 11FBF94540AD65C1411D3AEE42C81225 /* SentryScreenFrames.m in Sources */, + FA3ECA7D451964FE16DF61714EACE759 /* SentryScreenshot.m in Sources */, + 4AAE224DCB5C6F7B5FE16CF66E99541B /* SentryScreenshotIntegration.m in Sources */, + 51CD1AB7A35E37A0F9A431F2D32E658C /* SentrySDK.m in Sources */, + D6EBBDE25E3A431AC59798CB39FFEE19 /* SentrySdkInfo.m in Sources */, + 9FA993CA3336811E0D6308417A7B57DE /* SentrySdkPackage.m in Sources */, + DAB9C8F959A12F0A4C5197D190B86435 /* SentrySerialization.m in Sources */, + 47748A3B4A070E1227965533AEB2E7D1 /* SentrySession.m in Sources */, + 1FBF29A56277D7D3CA397C79D3281693 /* SentrySessionListener.swift in Sources */, + 96DBAEB48CC05544E73D68AA2720DD42 /* SentrySessionReplay.swift in Sources */, + 5DA6E9EAB543C34BAB1AA4BF6EB7FEDC /* SentrySessionReplayDelegate.swift in Sources */, + 7BC4909EA8A2B2C0641CCF74DA25757E /* SentrySessionReplayIntegration.m in Sources */, + 84FE3267ADC7A81F76109E6E6A375E62 /* SentrySessionReplaySyncC.c in Sources */, + 8FF3F3638C8C313DFF1C16B4BAF7F059 /* SentrySessionTracker.m in Sources */, + BF189707E65A125947C64A9A6479B39B /* SentrySpan.m in Sources */, + 7CF883007AF93267CEBF23E39D5C995E /* SentrySpanContext.m in Sources */, + F3CF9FA694E1EA0D6033E6289FD461FA /* SentrySpanDataKey.m in Sources */, + 63D38AC88CD2316503AC6E87E062F41C /* SentrySpanId.m in Sources */, + EF0E6DE02E0506AF08501928D4832270 /* SentrySpanOperation.m in Sources */, + FAB1B5CBD3666FBF748E275ADB084FD0 /* SentrySpanStatus.m in Sources */, + 3E6820E349E1E9AFF09EF16666203698 /* SentrySpotlightTransport.m in Sources */, + F129D57832413170772D8DFD97A76E39 /* SentrySRDefaultBreadcrumbConverter.swift in Sources */, + 1ACB451D2EFAA79F49F2C84C6193BADF /* SentryStacktrace.m in Sources */, + 95318B9A88AEF836F77E28A6EDAF8168 /* SentryStacktraceBuilder.m in Sources */, + 1B935394DD50545E23275F7B8EF71D2C /* SentryStacktraceCodable.swift in Sources */, + DB8AE50745EFAE2BB4CAE068EB2E4E30 /* SentrySubClassFinder.m in Sources */, + 5570C2FB870631B2613416D5856FC7D5 /* SentrySwiftAsyncIntegration.m in Sources */, + F9528D561E5651F5BC3F3EB8B95F8412 /* SentrySwizzle.m in Sources */, + B6014201659C519452F92F8945839646 /* SentrySwizzleWrapper.m in Sources */, + EDD842D874D925F0E3C4F3361C3639FE /* SentrySysctl.m in Sources */, + 59953D5C46B2E90DCC0CF679683C869E /* SentrySystemEventBreadcrumbs.m in Sources */, + 93B759F4F4170CD0997DF91BFE121507 /* SentrySystemWrapper.mm in Sources */, + BCB591120920187A3E36991B41C9ED55 /* SentryThread.m in Sources */, + EFE04C2E7659A1360BE49A5E307F6CFC /* SentryThreadCodable.swift in Sources */, + 6C39E30422269DB3C21C80C962864DEE /* SentryThreadHandle.cpp in Sources */, + 0EC6A7B73221C682621012A24E860683 /* SentryThreadInspector.m in Sources */, + C661C0D9F11E2797B8CEE8078F0C0F86 /* SentryThreadMetadataCache.cpp in Sources */, + F0F7909D7F93D5DB0032507681D0AA82 /* SentryThreadWrapper.m in Sources */, + 1658257A7E61A3C65A46CCB4E56BDD88 /* SentryTime.mm in Sources */, + F6AB6FE29F3EC48D6B2BE71E79EA5D60 /* SentryTimeToDisplayTracker.m in Sources */, + DC7A968C3A580D3C67DF9C4DF20CC073 /* SentryTouchTracker.swift in Sources */, + A9AC5A33611BDA53EDAE63AE84A81185 /* SentryTraceContext.m in Sources */, + 5E2CA1EC0C0FDBD85A231BD0E8A23049 /* SentryTraceHeader.m in Sources */, + B56DA5D89BFCB25A0A1E1756E8F44FF5 /* SentryTraceOrigin.m in Sources */, + 042B7A4855D8776C4D384717A1921430 /* SentryTraceProfiler.mm in Sources */, + CAAA96E88D14B8E9FC850590189728E8 /* SentryTracer.m in Sources */, + 37BF25240639AA279978977FFF33F819 /* SentryTracerConfiguration.m in Sources */, + C3464CDCC64D1D73AAE0537A30603CFA /* SentryTransaction.m in Sources */, + 112CBF82B05CAD5473D52DF2F9C329B3 /* SentryTransactionContext.mm in Sources */, + 6C87792F1A0D3DED303771B5544A72B6 /* SentryTransactionNameSource.swift in Sources */, + C77DD32D9DCE018D918145633E3D59E8 /* SentryTransportAdapter.m in Sources */, + E609725CB1F666950291D812ACAE6709 /* SentryTransportFactory.m in Sources */, + 315BF99FF29C7AE5B53D44F16F5BA0CE /* SentryUIApplication.m in Sources */, + F1E28CF44410D38E2CA51A402AA3FA84 /* SentryUIDeviceWrapper.m in Sources */, + 7D2CB2ED5B88E38CBF73551280BEE5FB /* SentryUIEventTracker.m in Sources */, + 7F3429D0C372403C5B91DFF410FCADDA /* SentryUIEventTrackerTransactionMode.m in Sources */, + 686F534846F9A3A7BA9BF4E9CA9D87AE /* SentryUIEventTrackingIntegration.m in Sources */, + C72A3F26FB13E9C3EEBDF397DDB68760 /* SentryUIViewControllerPerformanceTracker.m in Sources */, + 39D5769E1B7783AC69BC317E3CDD7490 /* SentryUIViewControllerSwizzling.m in Sources */, + 5B42EBD5386739E3103EC15161507F7E /* SentryUncaughtNSExceptions.m in Sources */, + C5BAFF7FBC6EE2336E6D127EDEC367A3 /* SentryUser.m in Sources */, + F4FD7A04ED977D591FA0827FDC46959C /* SentryUserAccess.m in Sources */, + 1AA3D19C703DBA27150EE09ACF9C7D6F /* SentryUserCodable.swift in Sources */, + 714609517C95A04D4E4755F76D2F2141 /* SentryUserFeedback.m in Sources */, + 2DDEBF8FF431424F2CA8459612D8E18B /* SentryUserFeedbackConfiguration.swift in Sources */, + 985DD109B2304DE5A56BBEDF8444CBEF /* SentryUserFeedbackFormConfiguration.swift in Sources */, + F71638B16840A151EB4C6AE5F807D72F /* SentryUserFeedbackFormController.swift in Sources */, + DEC5BF4CBF40609D05DA476FA14A5895 /* SentryUserFeedbackFormViewModel.swift in Sources */, + DBCF49D8BEBE3A542277B62CEF331C3E /* SentryUserFeedbackIntegration.m in Sources */, + 05EEB0D57873ACAEB5E4CD6779F79E1E /* SentryUserFeedbackIntegrationDriver.swift in Sources */, + 8856045DF2E34794AD023501E1761540 /* SentryUserFeedbackThemeConfiguration.swift in Sources */, + 4E9F4169DB76CA0C5D9DFFAD304009FC /* SentryUserFeedbackWidget.swift in Sources */, + B18C1F9852FE31107AEA01F0056C3C27 /* SentryUserFeedbackWidgetButtonMegaphoneIconView.swift in Sources */, + 8F3AA0E83C0710647D7A712B72432BB1 /* SentryUserFeedbackWidgetButtonView.swift in Sources */, + EFB743732D9B8BF02F9FE21E7811971A /* SentryUserFeedbackWidgetConfiguration.swift in Sources */, + 5D9F74BF330632C883018C742E94C54E /* SentryVideoInfo.swift in Sources */, + F086D0BBE38EF80124FF54B94A3707C7 /* SentryViewControllerBreadcrumbTracking.swift in Sources */, + FB6B8149F73790F928ED5A3C3BBD142D /* SentryViewHierarchy.m in Sources */, + 16D10056E861945019EC3AEF01F8CACC /* SentryViewHierarchyIntegration.m in Sources */, + C2322DC75B9A0F6117D4C0E67F35371B /* SentryViewPhotographer.swift in Sources */, + 8CE8A5CF43DC81DB215B5815FCC8D77D /* SentryViewRenderer.swift in Sources */, + 332F1609F7D5F7DE50200B7B1A85D299 /* SentryViewRendererV2.swift in Sources */, + A65ABA5E2E07C1EEBE5C040AAB8BA4C6 /* SentryViewScreenshotProvider.swift in Sources */, + 57627DC3E3FCBC3FB3F2DA0ACB06FF3C /* SentryWatchdogTerminationBreadcrumbProcessor.m in Sources */, + EE319256F04F4DAD9EB868F5B618CC8D /* SentryWatchdogTerminationContextProcessor.swift in Sources */, + B77E9972A4AB64BFED7498A53E2B6306 /* SentryWatchdogTerminationLogic.m in Sources */, + 98271C91DBA8D0BB2CA488710C9CC77B /* SentryWatchdogTerminationScopeObserver.m in Sources */, + 9C2C9B1DF73D04EC79916108723A6790 /* SentryWatchdogTerminationTracker.m in Sources */, + B2E757C8B02025C20388E129ED41177B /* SentryWatchdogTerminationTrackingIntegration.m in Sources */, + 6B8D3E0785F0D208365E0F4F3D895F4F /* SentryWeakMap.m in Sources */, + D6D524E93EBFF8099C40F23CE205AF9A /* StringExtensions.swift in Sources */, + F3DA6A54D9521C8B6DB1D47AA6843085 /* SwiftDescriptor.swift in Sources */, + FAA387BA41C5E3F3B87E505AE59E954A /* SwizzleClassNameExclude.swift in Sources */, + 0B6438CA8863012580F1E2D8C1E3E80F /* UIImageHelper.swift in Sources */, + 825B97241F59486F4965BFACC02BCC45 /* UIRedactBuilder.swift in Sources */, + FAD756A8AC5E7447C6DDC351D12666AF /* UIViewController+Sentry.m in Sources */, + B0DD583726E9B6378B9FD3B4CD331D17 /* UIViewExtensions.swift in Sources */, + DC24967AE97FE8E2DAE963375226ADDC /* UrlSanitized.swift in Sources */, + B85BF8B91D7F020E3CA9F76482D20050 /* URLSessionTaskHelper.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1271CD5372228CAF66D821E1177F8C4C /* Sources */ = { + 431B54EF980077B45B1934C302052F25 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + CCC424D9ACAC15B7650E789CAE098621 /* Pods-Hammerspoon-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3A9081147109634907DC4A8B433CB33F /* Sources */ = { + 44C27A3B6C41F427AEB3D7A94C9F2F5D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B61A498BAC433156323FD534C140B33E /* CLIColor.m in Sources */, - 08C1DBE65BE206D762ED4EC039C74361 /* CocoaLumberjack-dummy.m in Sources */, - EC0047F79318AC8F938EC0A178D65FBE /* DDAbstractDatabaseLogger.m in Sources */, - FA31BE729963425F591193E287A38A5A /* DDASLLogCapture.m in Sources */, - 96BC9F146513131231528511A772D098 /* DDASLLogger.m in Sources */, - 2F2AD588A07B06E6830E1F74FB811B5C /* DDContextFilterLogFormatter.m in Sources */, - B009C1F2D6DD314054B2F6190B16E0E5 /* DDContextFilterLogFormatter+Deprecated.m in Sources */, - AB305CE4EDD2FDFA479EEDB481960DD0 /* DDDispatchQueueLogFormatter.m in Sources */, - CB499BFC75E725B23B81F1844838C6D0 /* DDFileLogger.m in Sources */, - D7CACE598009EF6D7E8F35E8F6C472C9 /* DDFileLogger+Buffering.m in Sources */, - 191D1EA5D1F76012C41B48C2C97AB990 /* DDLog.m in Sources */, - 3A34608622B2D07A99A6B4386EEF96E4 /* DDLoggerNames.m in Sources */, - 8A71A42BA83410BC16D965FDA493E930 /* DDMultiFormatter.m in Sources */, - AE84536B5D1EE6FFC96D541EE8F54525 /* DDOSLogger.m in Sources */, - 49C8135C8BBE1EED5816782A30A450C3 /* DDTTYLogger.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4201C628742B71DC67A9C803752ACA77 /* Sources */ = { + 5B2546914863F274496D25447BBF5674 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4D1273B09D9E9BD1A4003563BE64CB0 /* BucketsMetricsAggregator.swift in Sources */, - C6A8D2BB9E01A7B9E7FFEDA47A8BC613 /* CounterMetric.swift in Sources */, - 4CBCBBF19F8CAF8661CBDF3297A3C1FA /* DistributionMetric.swift in Sources */, - 9BF49D377398357A10F2CD9974BD024A /* EncodeMetrics.swift in Sources */, - 465A8FB4874D92756E2BAB4B45EF2F41 /* GaugeMetric.swift in Sources */, - 6D1CEA4B44BBAC27514383161C7BF0F2 /* HTTPHeaderSanitizer.swift in Sources */, - 5D8CF7D8EED8435E93FDB1B46FDBE118 /* LocalMetricsAggregator.swift in Sources */, - 6936A49DE278C017AE9D565F704600E2 /* Metric.swift in Sources */, - C0643222BFFC8E1C5A5965C9FD253B94 /* MetricsAggregator.swift in Sources */, - 3903609905F88546B1B5F45A9A52FD73 /* NSArray+SentrySanitize.m in Sources */, - 7F52D4E419E020B682CFC2FAE5031602 /* NSLocale+Sentry.m in Sources */, - C5BFD2B5473D328CE23DB1D22ADEE559 /* NSLock.swift in Sources */, - 848EDD21B8A879E654B3F15035EDC332 /* NSMutableDictionary+Sentry.m in Sources */, - 256D3F363DCAF6E62C3E7AD36B263629 /* NumberExtensions.swift in Sources */, - 7D054B901822406E69497ACBEFB6208D /* PrivateSentrySDKOnly.mm in Sources */, - E94162A5F6BFB5C19D75E9D79DBE1BCE /* Sentry-dummy.m in Sources */, - 0417E833049121C5E9798556774C085B /* SentryANRTracker.m in Sources */, - 15D2D28794F603EA5676057464A8FCC9 /* SentryANRTrackerV2.m in Sources */, - 57F1E4EFB807F07E5A2AC3127C7B0B55 /* SentryANRTrackerV2Delegate.swift in Sources */, - 57B0EFD28B4268B4828439CB5173C6D3 /* SentryANRTrackingIntegration.m in Sources */, - 90D9F117CDECDACBDDBE2E8632D2D5FA /* SentryANRTrackingIntegrationV2.m in Sources */, - 042AB57BD47856948BC721115C7FECAF /* SentryAppStartMeasurement.m in Sources */, - 620B53E123444774713CB30E0720032A /* SentryAppStartTracker.m in Sources */, - FE43B61C070B36466A861DCE20D1B456 /* SentryAppStartTrackingIntegration.m in Sources */, - 1CC522205B1834DDD6473193F89297D4 /* SentryAppState.m in Sources */, - E4D5AF1864FB539A5AF952772FC996E9 /* SentryAppStateManager.m in Sources */, - 3B700A4C176E6643AB08B5D336B474F7 /* SentryAsynchronousOperation.m in Sources */, - B52EF7FE94B3D1F7BC6F3B666EDA6BFF /* SentryAsyncSafeLog.c in Sources */, - A39DA17B37F860B7A71CF4A268203BC4 /* SentryAttachment.m in Sources */, - 88559FBA81CD3CFA2EBF721F71B5146A /* SentryAutoBreadcrumbTrackingIntegration.m in Sources */, - 03A30B9F86DAED4B85108990D9FE6AC7 /* SentryAutoSessionTrackingIntegration.m in Sources */, - 9F7676FF7D4834980ACA4150EF5A52DE /* SentryBacktrace.cpp in Sources */, - CD9E8CBF881DC34EE3AFB9E34FF1DB1F /* SentryBaggage.m in Sources */, - BBC1F11EEA7A69E75C3CD2BEB08E8141 /* SentryBaggageSerialization.swift in Sources */, - 7175923422852BCB0F766C62D52F0457 /* SentryBaseIntegration.m in Sources */, - D636557B2FEE707BA2B7867FD2C310B1 /* SentryBinaryImageCache.m in Sources */, - 11ECCD113F25A02E38B15070DB44077F /* SentryBreadcrumb.m in Sources */, - 16AB25F403054D7C69E04CCD0FFA824F /* SentryBreadcrumbTracker.m in Sources */, - E1A8B2C83BED92DC00E316499F8B18DE /* SentryBuildAppStartSpans.m in Sources */, - 886CC415364964154E36041767FD415B /* SentryByteCountFormatter.m in Sources */, - E1D973CCE6CD3745DA19A5C0EF6F8328 /* SentryClient.m in Sources */, - 260E658E503306150CDA2699CA095D1A /* SentryClientReport.m in Sources */, - ABF7C3A1834E6EFCEC2FE29C725CE7F3 /* SentryConcurrentRateLimitsDictionary.m in Sources */, - 1E1AC93A8259104AD5D81A03C57076F8 /* SentryContinuousProfiler.mm in Sources */, - 91CFEDCE8E152D1F209A8056ED22E4D4 /* SentryCoreDataSwizzling.m in Sources */, - 3A54F4963DD5E4493D116FDF7C1F7609 /* SentryCoreDataTracker.m in Sources */, - B7C62AFB86CC777FE30AE562B5FF7750 /* SentryCoreDataTrackingIntegration.m in Sources */, - D0B02A242D6B79350E4AE6B3B8F7AEC0 /* SentryCrash.m in Sources */, - FF67F4B993096FACDDAB68A5DC267FDA /* SentryCrashBinaryImageCache.c in Sources */, - 6A1EEB9C7134FDA01553588CF2882CD8 /* SentryCrashC.c in Sources */, - C2AF0CB37A9354A3D8924F63192CD82D /* SentryCrashCachedData.c in Sources */, - C0D095D1139C1058C01942AD5A51F154 /* SentryCrashCPU.c in Sources */, - 28DB0D34C351E97C640AB05F3F101A4B /* SentryCrashCPU_arm.c in Sources */, - 0B83E774D4FDAA06F16067C4A1C85BB2 /* SentryCrashCPU_arm64.c in Sources */, - 6BC9306586E5F912A9C6EEA9D6169991 /* SentryCrashCPU_x86_32.c in Sources */, - E73CA0549599E482B6A40ECE82FE1AD1 /* SentryCrashCPU_x86_64.c in Sources */, - 549A117E8A616104DF6C67B3CFBC9897 /* SentryCrashDate.c in Sources */, - FE92B2039BE912B1ADD409EB697EBD03 /* SentryCrashDebug.c in Sources */, - ADBF7B2976E188D602B6A3582060DBEE /* SentryCrashDefaultBinaryImageProvider.m in Sources */, - BD97C087EC6479D5B918E1326D49DCF4 /* SentryCrashDefaultMachineContextWrapper.m in Sources */, - A8251337377A590A2D5FFC044FD2A497 /* SentryCrashDoctor.m in Sources */, - 44E8E1B0A4823FE03FFEAD83FE5FEBF5 /* SentryCrashDynamicLinker.c in Sources */, - 8DDAB609965C973E7AE43DDA7482A5D2 /* SentryCrashExceptionApplication.m in Sources */, - D32AE54E9FC0B963B54ED5089CED5F54 /* SentryCrashFileUtils.c in Sources */, - 8B57E2E1EC240356CF2C03F688DF1326 /* SentryCrashID.c in Sources */, - 945A7ABE8DAC06D228C1119B07B01C78 /* SentryCrashInstallation.m in Sources */, - 5FB5A3C334CE0B60296EF3140D7F0859 /* SentryCrashInstallationReporter.m in Sources */, - FA4C983C7C11ABDAE1FE574AD38E6B64 /* SentryCrashIntegration.m in Sources */, - C5F6E43C296889494115AD07DF9F00AB /* SentryCrashJSONCodec.c in Sources */, - B6BA67150396CB705EC4076E00528B37 /* SentryCrashJSONCodecObjC.m in Sources */, - 218432EECAA06DB742B1C65E3B521208 /* SentryCrashMach.c in Sources */, - BE2079363FEDF2A5018E8EC370A94BB1 /* SentryCrashMachineContext.c in Sources */, - 4048CD316D6B9C320A92681BADD51F5C /* SentryCrashMemory.c in Sources */, - 0B62104C21A0603AF5AC84911F6429E9 /* SentryCrashMonitor.c in Sources */, - 846A9E129CFF98168231AD2AC7FE6423 /* SentryCrashMonitor_AppState.c in Sources */, - 55CC25C29D23177FF16072EC874F395C /* SentryCrashMonitor_CPPException.cpp in Sources */, - 5C16A5258BDE8DA5B5F7439730BEF548 /* SentryCrashMonitor_MachException.c in Sources */, - E12215FBDF3A3AA6DEEA4BFF40B710AE /* SentryCrashMonitor_NSException.m in Sources */, - 7BB6FF6F1DCBFECD9FC36E60E1BC5F45 /* SentryCrashMonitor_Signal.c in Sources */, - 0AC5483B7251DACC906C93239FB02784 /* SentryCrashMonitor_System.m in Sources */, - 08E050E9E9AD5D6D120E66F5EB57AAA2 /* SentryCrashMonitorType.c in Sources */, - EB02D5EFBBA7131C0555BCBD18C179AA /* SentryCrashNSErrorUtil.m in Sources */, - F3F1870764E62D7F76A782DD1B02A5E9 /* SentryCrashObjC.c in Sources */, - 86D1508DBE41B3D7171C6137EF80C0FA /* SentryCrashReport.c in Sources */, - D8B3A62BD1C4EF01E2F40ED0F878FFB1 /* SentryCrashReportConverter.m in Sources */, - E1494CF4920E57E5DA9279033D3A775A /* SentryCrashReportFilterBasic.m in Sources */, - A978431FB4BCB5DBC81664886B86497F /* SentryCrashReportFixer.c in Sources */, - A00701CADC907A10871BC76CDFB85841 /* SentryCrashReportSink.m in Sources */, - 28FAA8029AF20F60E3A0AEDDCD0B9E59 /* SentryCrashReportStore.c in Sources */, - E9BB792F805702D6967A4643FCBA6857 /* SentryCrashScopeObserver.m in Sources */, - 77FA660CE0EAFE8D82EAF42BE396B4E4 /* SentryCrashSignalInfo.c in Sources */, - 8FA2C8171A0AA5D027D6B91AB57FB606 /* SentryCrashStackCursor.c in Sources */, - 8CA82B41A0290CD6AC07091B053CE77F /* SentryCrashStackCursor_Backtrace.c in Sources */, - 38F776DF445EBC8FC301B10A69559693 /* SentryCrashStackCursor_MachineContext.c in Sources */, - 2E04B368A03698942F52BF1E7459FFE0 /* SentryCrashStackCursor_SelfThread.m in Sources */, - 547582281F10D4D2A8C80E36F63678F0 /* SentryCrashStackEntryMapper.m in Sources */, - 0C591EDDD296A8CFF9D3889566250502 /* SentryCrashString.c in Sources */, - 2BC7EBFE86D1E577E70756F0B1097312 /* SentryCrashSymbolicator.c in Sources */, - E589EAC40C5FC613BA87571E76F0E89D /* SentryCrashSysCtl.c in Sources */, - 88859EB9DB5127DE1D512F7F9A22BC74 /* SentryCrashThread.c in Sources */, - 917FEC78C7CF643079EF79828A3994F6 /* SentryCrashUUIDConversion.c in Sources */, - AD9A2C0A13B584985CFF29E260A18937 /* SentryCrashWrapper.m in Sources */, - D8891FA2F17C2C4A8945A4AC70FC1149 /* SentryCurrentDateProvider.swift in Sources */, - DDA94F409FCE14105C009D36043ED47D /* SentryDataCategoryMapper.m in Sources */, - 444C5FCCE7ED1727D4621B4CE8B485FB /* SentryDateUtil.m in Sources */, - D9C52876DD6E34F63897BCFC755446E5 /* SentryDateUtils.m in Sources */, - FBB05F338E5C6A6856BE3C310C681569 /* SentryDebugImageProvider.m in Sources */, - 6E90BBDA1ED7FF0812D7CC7ECD9154C1 /* SentryDebugMeta.m in Sources */, - CB56F13F07A8715916A4867F443D6858 /* SentryDefaultObjCRuntimeWrapper.m in Sources */, - D2DCCBA996ABBEEA3AA6EE2C24282E95 /* SentryDefaultRateLimits.m in Sources */, - FBE4CAF9C1137E0ADCDEF4FA8917CFAE /* SentryDelayedFrame.m in Sources */, - D933CFF3BB559B2BF610E7D5BE40F97E /* SentryDelayedFramesTracker.m in Sources */, - 1ACE251A21FE3A3F9D197AD28FBC30B3 /* SentryDependencyContainer.m in Sources */, - 84DE5CB0AC9FFED3B265839ACDB78ACC /* SentryDevice.mm in Sources */, - 1EFFA3B698BFBB393D64EA8F02B45BB9 /* SentryDictionaryDeepSearch.m in Sources */, - CE3BA5413F43BA6AD528CBC7540135AA /* SentryDiscardedEvent.m in Sources */, - C70407E4FF5DA1F06802EA77CE147685 /* SentryDiscardReasonMapper.m in Sources */, - AD7E99BEEAFCFC1113920D2AE4A3419E /* SentryDispatchFactory.m in Sources */, - 587D27295C9F844725347253FE0DA99D /* SentryDispatchQueueWrapper.m in Sources */, - 7327254378E4632552F4336A72D7A0F3 /* SentryDispatchSourceWrapper.m in Sources */, - 5E14B4FC127508339455235C519F27D2 /* SentryDisplayLinkWrapper.m in Sources */, - 87BB440ABF524BB5B83683A21D73BE53 /* SentryDsn.m in Sources */, - 02B7972F7FE6418D91D2FA4E152D9771 /* SentryEnabledFeaturesBuilder.swift in Sources */, - ACF3DF1BF349600818FAAB1EE7048FA0 /* SentryEnvelope.m in Sources */, - ED4BC1521F9CADA4900053FD00403FCE /* SentryEnvelopeAttachmentHeader.m in Sources */, - F5055F0081B69B4E4CD91E465E1CCEA8 /* SentryEnvelopeItemHeader.m in Sources */, - 84278CAB196A83B878B2170831314FEF /* SentryEnvelopeRateLimit.m in Sources */, - 1983A741E49EB71F85EED5D4D91F8CA6 /* SentryError.mm in Sources */, - 4A92F58FDE97E53903F72D575684A8E0 /* SentryEvent.m in Sources */, - 5926036EC3CEE73CA5359A17E6A9557B /* SentryException.m in Sources */, - 4AC246AB379128DC64EF07598CA4D997 /* SentryExperimentalOptions.swift in Sources */, - 7CF8DBCE56BB105361065352FC57FF87 /* SentryExtraContextProvider.m in Sources */, - 3653022395CFC41120681BFD7A9BE7CE /* SentryFileContents.swift in Sources */, - C9FA5FC7C3FFC46B87E5225ADFA7EFA8 /* SentryFileIOTrackingIntegration.m in Sources */, - C17E199308A2A89086DD676138D27073 /* SentryFileManager.m in Sources */, - D93BF478C020C7F99D78DD529BE82D71 /* SentryFrame.m in Sources */, - B13BD4267982B06FD960A6A1FD9388EA /* SentryFrameRemover.m in Sources */, - 4281C2DC0E377EAA186435F7CB076ED6 /* SentryFramesDelayResult.swift in Sources */, - 15A9E1089BF57D15ADB5CCE5D3D37B7B /* SentryFramesTracker.m in Sources */, - 88A1FD5F93AA6BAD4BDC6689FE1924A6 /* SentryFramesTrackingIntegration.m in Sources */, - 8296D1A49CDA0909D64AAA8566FB6CCB /* SentryGeo.m in Sources */, - 0A70FF9AD1C74CF9DF572D8E8EFC7166 /* SentryGlobalEventProcessor.m in Sources */, - FDD3E71B9AF5466B1BD26D2E8046381F /* SentryHttpDateParser.m in Sources */, - 0383036F2CEFE83DF6AEF9D0101BF681 /* SentryHttpStatusCodeRange.m in Sources */, - ACA885F60431E53F0AC8C8ACB1F76145 /* SentryHttpTransport.m in Sources */, - E8E1219E0676529F65C960438F45AEC6 /* SentryHub.m in Sources */, - 9D5B5AD1E05A7D99E4B6C988918C980F /* SentryId.swift in Sources */, - 11D628BCFCA133394C6385934CD996AB /* SentryInAppLogic.m in Sources */, - 80B38636A48B29EA377EDB3C8CC345A6 /* SentryInstallation.m in Sources */, - 6DD7498350F608C6C4071026B9A70C84 /* SentryIntegrationProtocol.swift in Sources */, - 7EC5CCA4E4A850FC3DF7DDBC97384815 /* SentryLaunchProfiling.m in Sources */, - D36ABD0F9ACF88F638DD56ED3311AFEF /* SentryLevel.swift in Sources */, - 5CDD4F898E5F7E9FD96DF98D1A36C77A /* SentryLevelHelper.m in Sources */, - AA03F112E69F81A279BEE0076C43119E /* SentryLevelMapper.m in Sources */, - 190722AA104B317195E1EEDB2D90A1CF /* SentryLog.swift in Sources */, - E293A13BCCDA9244E4C058648DAB482D /* SentryLogC.m in Sources */, - 0D6207CBCBC4C5A730FC96B2785E7DA4 /* SentryLogOutput.swift in Sources */, - 1AC02F2B57DD762E6D8E3337C2837C66 /* SentryMachLogging.cpp in Sources */, - 4F1FB36259415404F9DE133E5925B112 /* SentryMeasurementUnit.m in Sources */, - 0C9089EB01962EBD378D203BFA5F8504 /* SentryMeasurementValue.m in Sources */, - D22E1903718B4C2830A6F5D1125C7369 /* SentryMechanism.m in Sources */, - 99286A9222D7F9AF15D0CD8C05C1BC1C /* SentryMechanismMeta.m in Sources */, - EBAFDBE2D81188FADC00FFB8A5F923B6 /* SentryMessage.m in Sources */, - BDAE22A8E04EE686E8D3C5E7824A68A9 /* SentryMeta.m in Sources */, - B30E15A94A471C11F3384DE65E2CAD6D /* SentryMetricKitIntegration.m in Sources */, - 0700F9BBAB7A32E70A32C227F71EE9F3 /* SentryMetricProfiler.mm in Sources */, - DC462AE433E2F55A3E9944AF284CA525 /* SentryMetricsAPI.swift in Sources */, - 0BB099B9D3EA4974412D7EF965378743 /* SentryMetricsClient.swift in Sources */, - BA5CE7EFEB97DA7759355D22783689E3 /* SentryMigrateSessionInit.m in Sources */, - 0F2F221F12CA832D4466DC4AEAE89F54 /* SentryMsgPackSerializer.m in Sources */, - 2912CC9068B868401A5059D475FE23F4 /* SentryMXCallStackTree.swift in Sources */, - 89D25E593D7EE73DC653BB9A3C714261 /* SentryMXManager.swift in Sources */, - 6340191F1ED87BA8CF58C155E05557EA /* SentryNetworkTracker.m in Sources */, - B8617EEA57021DC9CDDA2054334EC2A4 /* SentryNetworkTrackingIntegration.m in Sources */, - FD8BCB1C7E67877BC6793B897181A283 /* SentryNoOpSpan.m in Sources */, - 8C1839E41794952A788F0FF5714ACC6E /* SentryNSDataSwizzling.m in Sources */, - 0C525F30D6C849E3CA0C423B4F4635E9 /* SentryNSDataTracker.m in Sources */, - BF126046D3FA6EE09E0541D4C0216AE5 /* SentryNSDataUtils.m in Sources */, - 95391A75C28D693CDC501EEE6E899599 /* SentryNSDictionarySanitize.m in Sources */, - F75ECADFF9B8F8DDB7264278DC4093E5 /* SentryNSError.m in Sources */, - E1B83DF14EE881DE98F6CE05BB1DFF5A /* SentryNSNotificationCenterWrapper.m in Sources */, - 97743956A4AE1D60007EB491AF814430 /* SentryNSProcessInfoWrapper.mm in Sources */, - 2B5051F21B15E100205206C64099DEF9 /* SentryNSTimerFactory.m in Sources */, - 7246E30E7B4D311CBF9A99D240AC44C1 /* SentryNSURLRequest.m in Sources */, - BCFC2E44874DED23238F729C3130729A /* SentryNSURLRequestBuilder.m in Sources */, - 2BE07B60539A88C7F81D75DFDF2E587B /* SentryNSURLSessionTaskSearch.m in Sources */, - 1511BEDE68D1874749AAE606ED5A6F2F /* SentryOnDemandReplay.swift in Sources */, - 230F60C1AA4A677CEC0A205BD8067758 /* SentryOptions.m in Sources */, - 2233B3CCB5EF1F0D17014FF78EB88828 /* SentryPerformanceTracker.m in Sources */, - 34594DC8C3F29991E625AE9BBABC06AC /* SentryPerformanceTrackingIntegration.m in Sources */, - A687BF90EF94D48506FEA20E07B5D161 /* SentryPixelBuffer.swift in Sources */, - 48191EA10B0E1430E4DAE85F57F3FF79 /* SentryPredicateDescriptor.m in Sources */, - 72FF8D6F8F9B125D29AE2FC8EB81A6CF /* SentryProfiledTracerConcurrency.mm in Sources */, - FEA8F3A312B0B9B808ED9A3D1932340F /* SentryProfiler.mm in Sources */, - 877E94A676EB9A0DD64A4646D23F693F /* SentryProfilerSerialization.mm in Sources */, - 630E7FDF9E392FB3F81C8D1008BE6F4F /* SentryProfilerState.mm in Sources */, - 70A6875BEEC0912F82BD96D7FBCF9AD5 /* SentryProfilerTestHelpers.m in Sources */, - AAE36C2BF8E3D2F8AE0203CCBC2A2871 /* SentryProfileTimeseries.mm in Sources */, - F46186EE35FC9ABE860830607D599349 /* SentryPropagationContext.m in Sources */, - 8DF968950C2BC63F53CB1DD07262A031 /* SentryQueueableRequestManager.m in Sources */, - 245E25D47BAC59E2BDBE37A733B7F1CD /* SentryRandom.m in Sources */, - 167711AD3ED45C90FD72E89A1DEF937C /* SentryRateLimitParser.m in Sources */, - 0B48D1A968B65DCB93585B8323F6394C /* SentryReachability.m in Sources */, - AF2444F362544538C6E76D33A95B51A3 /* SentryRedactOptions.swift in Sources */, - 6B24FD6944FF2382432F2DC64EE1AF1B /* SentryReplayEvent.swift in Sources */, - 84D39C688F4EA63EC6B9361F38A59FC9 /* SentryReplayOptions.swift in Sources */, - 6B258A927D2F6A8614EBFC7FB9EF31DD /* SentryReplayRecording.swift in Sources */, - E96C8871923A362B7203ABBA7872FCC4 /* SentryReplayType.swift in Sources */, - 4CAB8B038B4C189F5A6393C5B3E0177F /* SentryReplayVideoMaker.swift in Sources */, - 3F0019DCE7147C7F0FA68607651A9A68 /* SentryRequest.m in Sources */, - 592E372E5DFDEE3EC3CE80D72EE0DD79 /* SentryRequestOperation.m in Sources */, - 75DB3A7C5F4C1802CA170236EA3854E1 /* SentryRetryAfterHeaderParser.m in Sources */, - D67CC53A1ACDC44517EF552330C896A1 /* SentryRRWebBreadcrumbEvent.swift in Sources */, - 32C68E7E25D7A579564449C4A21BC90E /* SentryRRWebCustomEvent.swift in Sources */, - 98D8E664C259B750CAE67742736CC458 /* SentryRRWebEvent.swift in Sources */, - 3E0262CAFEABC3603B99E7671582E5F2 /* SentryRRWebMetaEvent.swift in Sources */, - AB727E237B29D21A2E15F7E5216FF00E /* SentryRRWebSpanEvent.swift in Sources */, - BFD61B463223A1FBAC3C8F904DEBCF5B /* SentryRRWebTouchEvent.swift in Sources */, - 6EA651D48910B6963665FFBF96663CB3 /* SentryRRWebVideoEvent.swift in Sources */, - 1B3A8D77F099C0606AF15E997827BA97 /* SentrySample.m in Sources */, - 944B436CCF9071B09EE5F2FAE4023C69 /* SentrySampleDecision.m in Sources */, - C3EE45D959F21B6C7EB734136BDF01B7 /* SentrySamplerDecision.m in Sources */, - DAC54E5CB27B45ED2412460420273439 /* SentrySampling.m in Sources */, - D3BD0BEBA4DE99F22DD1F072DE1092F0 /* SentrySamplingContext.m in Sources */, - 1569098A5D9B4A7751C5AE8C334D2B37 /* SentrySamplingProfiler.cpp in Sources */, - 4816736157BB7D09D00CF803C868860E /* SentryScope.m in Sources */, - 78C9B6A2EE679526D14CA929038361AA /* SentryScopeSyncC.c in Sources */, - C019991AEB8E6BF8D8B0BF853603C75F /* SentryScreenFrames.m in Sources */, - 5217B8CBA1CE625E00FB8E1B33B5BBA8 /* SentryScreenshot.m in Sources */, - 5EEA4C7B96BFF3A36CC4A5937083B9D5 /* SentryScreenshotIntegration.m in Sources */, - CBEF642F2A8B0DE19E03254F29619ED5 /* SentrySDK.m in Sources */, - A8BE88CC1E857A5CBF3FB16F34E44DFF /* SentrySdkInfo.m in Sources */, - 0F827FA0C949D45A08B9677B22395761 /* SentrySerialization.m in Sources */, - 90C8537F7D48924824E1DAB208FA2B7E /* SentrySession.m in Sources */, - A8F08BC305B6A025ECEF3F2CD48E421D /* SentrySessionCrashedHandler.m in Sources */, - 152B9F2DF2AE4E24B1968C2D9DF4C612 /* SentrySessionListener.swift in Sources */, - 238DE7F1D9825AE8B22AC0AA1ADB42FC /* SentrySessionReplay.swift in Sources */, - 2E724516A2D99A67400837CA3A1FEB7A /* SentrySessionReplayIntegration.m in Sources */, - FDD4A8A77D7B5315EC1F6A7D2C7DCC31 /* SentrySessionReplaySyncC.c in Sources */, - 21B3ECAE804146516CE9B253D614F148 /* SentrySessionTracker.m in Sources */, - D20830CE1BEE9CB1D2655880AC60F61F /* SentrySpan.m in Sources */, - 1442E9279904E70D4603667BF0F56C50 /* SentrySpanContext.m in Sources */, - 2CD9E9E4B49954E170032197EBAD80C8 /* SentrySpanId.m in Sources */, - C266B22ADBBCF611AB0F546D25C4FC16 /* SentrySpanStatus.m in Sources */, - 70A97BE18BAEF3B865BFB82C6E8DCF0E /* SentrySpotlightTransport.m in Sources */, - 5992D50CB802E3BD0CA052CDB021F657 /* SentrySRDefaultBreadcrumbConverter.swift in Sources */, - E9DB64B7331053396A97A5BBDABAF991 /* SentryStacktrace.m in Sources */, - F7E1F6270E4144357007DD898382146D /* SentryStacktraceBuilder.m in Sources */, - 1D2636E2BC68FEAF2325B48DC65BE76C /* SentryStatsdClient.m in Sources */, - 650FDEA00AB1DBE015B855BEDB1079E2 /* SentrySubClassFinder.m in Sources */, - 7A4867F70993A4BD58E1895343E919A1 /* SentrySwiftAsyncIntegration.m in Sources */, - 698344257BA9F624443DD01A88627A59 /* SentrySwizzle.m in Sources */, - 1E9362C6A2BD9030A36B52CE13744896 /* SentrySwizzleWrapper.m in Sources */, - C651D7F4A41B3ECBBD2CD713F0DD25A6 /* SentrySysctl.m in Sources */, - 83875A68A61509456A667043677F5FF5 /* SentrySystemEventBreadcrumbs.m in Sources */, - 8D1AD1D92AF069C15B8725D3AEA03917 /* SentrySystemWrapper.mm in Sources */, - F39C70023E1375E5B39DF1E998AF8F6F /* SentryThread.m in Sources */, - 3438141C451C3C3DDFC048A4A5887DEA /* SentryThreadHandle.cpp in Sources */, - 4965E22C3DDE2B414158444E96B26698 /* SentryThreadInspector.m in Sources */, - E55C07B7EB8F1291F69C67E2456CE418 /* SentryThreadMetadataCache.cpp in Sources */, - 53074E437E2DA98BA0C7000F817C3CDA /* SentryThreadWrapper.m in Sources */, - 751EE8DE35BA969CD58F4DE939F43C36 /* SentryTime.mm in Sources */, - DA705BF8A52A96E80CC81457AAB6727B /* SentryTimeToDisplayTracker.m in Sources */, - 8DA0F5A4ED58EB4120614AF63E2DC9C0 /* SentryTouchTracker.swift in Sources */, - 7F23F4420A575EA6F9089B31DA1ABBAF /* SentryTraceContext.m in Sources */, - EEC3BF049E7D38061A5A96C4CFDC4208 /* SentryTraceHeader.m in Sources */, - 3954C752205A41490DE2AB342815900B /* SentryTraceProfiler.mm in Sources */, - 53AA4FF83C5264EC5EB0AF9E5CCAE38E /* SentryTracer.m in Sources */, - 5FA4258A0A444E3A2FB694EF2C631A7F /* SentryTracerConfiguration.m in Sources */, - C7555E2DADA2E6F253E96549DC9ECEBA /* SentryTransaction.m in Sources */, - 447908E021BF637A88D0C5DD7DD69827 /* SentryTransactionContext.mm in Sources */, - 8A461AA6DCF21314CCEEA540AF018F92 /* SentryTransactionNameSource.swift in Sources */, - B50F993B02EA10D4B787D34B003F0E29 /* SentryTransportAdapter.m in Sources */, - 9F6A05C55813D3C253C31183F0312A05 /* SentryTransportFactory.m in Sources */, - B4C67D5CBF48170BD6A9D063CA197EE6 /* SentryUIApplication.m in Sources */, - 35F05FB586B2DAE22DF4FF378901F089 /* SentryUIDeviceWrapper.m in Sources */, - 7B004A9EBB20F69D7B71EAEBC451D45B /* SentryUIEventTracker.m in Sources */, - CC58F8293D8B94D3020D4281C1D6663B /* SentryUIEventTrackerTransactionMode.m in Sources */, - DEF887939B1ABD7D189339DE4774E9FD /* SentryUIEventTrackingIntegration.m in Sources */, - 4E2ED944F68E35B84A0FB208AED24544 /* SentryUIViewControllerPerformanceTracker.m in Sources */, - 20C64FE4C9E540EE222B5DAD84AF0370 /* SentryUIViewControllerSwizzling.m in Sources */, - 18355C155B008D83B4F03F7BA03C0B0A /* SentryUser.m in Sources */, - 967CF8EF1A94D97A2DB6DA0C97E8B2AE /* SentryUserFeedback.m in Sources */, - 35330705DA7AE14774E2720BED096470 /* SentryVideoInfo.swift in Sources */, - D819198BBBE8ADC2CD82B7BE966FE78B /* SentryViewHierarchy.m in Sources */, - 66908376F842D3415C5BAD2FB41DD33C /* SentryViewHierarchyIntegration.m in Sources */, - C05FEA5E69806AC4E6E09A2EB0DE974E /* SentryViewPhotographer.swift in Sources */, - BF4D40272B93F042B2EFD0CC1D194468 /* SentryViewScreenshotProvider.swift in Sources */, - B1CAFDFCFB8260F173E0FAA070AF7F1E /* SentryWatchdogTerminationLogic.m in Sources */, - 3BD775F78FA54AC95E3D2AF1C46EE392 /* SentryWatchdogTerminationScopeObserver.m in Sources */, - E8FDA840392A2194E00EA6D035684563 /* SentryWatchdogTerminationTracker.m in Sources */, - 484E9F4576AC1A7F1F8810B0CB9DBBE5 /* SentryWatchdogTerminationTrackingIntegration.m in Sources */, - A0C881978333586E0F2F52B1AFA578F1 /* SetMetric.swift in Sources */, - 65FEC42E0950CD489D680A7263494CA9 /* StringExtensions.swift in Sources */, - 7397464EBDFC165A2D004713EE017205 /* SwiftDescriptor.swift in Sources */, - CB6AAE131B39D7C97EAADD14433D3532 /* UIImageHelper.swift in Sources */, - F9D775371AE9231D86ACED54637935B5 /* UIRedactBuilder.swift in Sources */, - 7E95DF28AA554FCE9B3D4F36D4398CF4 /* UIViewController+Sentry.m in Sources */, - CF47690FD96F011A040FF5E7973CE3F4 /* UIViewExtensions.swift in Sources */, - 6F2D62ECCFE01A5D5DAD1776075C4C39 /* UrlSanitized.swift in Sources */, - D9277F3A030B8F6298A839732201AA30 /* URLSessionTaskHelper.swift in Sources */, + B4FD8AA244DE53CABEDDE23F79D1799F /* ASCIImage-dummy.m in Sources */, + 6E70BFBCA92E1DE309357AA07B06B406 /* PARImage+ASCIIInput.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 47BD6A7EAF35699447A9A95453DA1EE1 /* Sources */ = { + 9583A92F544B16E002581EBCBA271730 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BF398638B215DE44844CC9DC1B5893B2 /* NSRunLoop+SRWebSocket.m in Sources */, - AF3D7DE4BC9A757B4B828F55F2D18500 /* NSURLRequest+SRWebSocket.m in Sources */, - 45BBA7D48DDB200ECCA0FAA2EFBC1398 /* SocketRocket-dummy.m in Sources */, - 476456D3B2017A33157DCD7BED2ED52D /* SRConstants.m in Sources */, - 7B959CE82BB8FCC026FF45C5D2A0D494 /* SRDelegateController.m in Sources */, - EC05FE1C5904D91E46143969DF01FD35 /* SRError.m in Sources */, - B3BE3A9D676FDB05D94D44B377CC6791 /* SRHash.m in Sources */, - A08BEF9C601AA7B9D2BB02D89C68645F /* SRHTTPConnectMessage.m in Sources */, - 62EE29F4CC1D723F875FA96E7097AD00 /* SRIOConsumer.m in Sources */, - 98388898B0EC173983F179B0748D9BCF /* SRIOConsumerPool.m in Sources */, - 91347D9636E60291BEA877BC013046B6 /* SRLog.m in Sources */, - FE98E1B6B2C3429D009BAF0FD40B5832 /* SRMutex.m in Sources */, - DFB9F369D336648EE7807B23ADCCF812 /* SRPinningSecurityPolicy.m in Sources */, - 7F8681B20F131744E04850B075D08630 /* SRProxyConnect.m in Sources */, - 586E93CA06F06A727DF59ECCA9469FAD /* SRRandom.m in Sources */, - 978A86063F40961A9FC16B38322B31F2 /* SRRunLoopThread.m in Sources */, - A66A1150CF9AC2C4863AA1F1DD0916D8 /* SRSecurityPolicy.m in Sources */, - 417CA6EDAA0C52861775049BB83EAED7 /* SRSIMDHelpers.m in Sources */, - 155360EFA0331722002D722EB38B3EFD /* SRURLUtilities.m in Sources */, - 52422ADE5AD9F22028DB6294091C1E5D /* SRWebSocket.m in Sources */, + E658A13FC9116F3F87550437EA0730CE /* CLIColor.m in Sources */, + B8DF1220EE1A04DAF7250AB0A10B1037 /* CocoaLumberjack-dummy.m in Sources */, + 2F6ADF1BB99E1B48C2AF70ED419EF7C4 /* DDAbstractDatabaseLogger.m in Sources */, + E4B6D2C77E87FF90AD8A34A7A4901D6F /* DDASLLogCapture.m in Sources */, + 4B00E98D6D8D34F450FF7A282F131E39 /* DDASLLogger.m in Sources */, + CC7ED099C421BD5607251AA87F5F83F9 /* DDContextFilterLogFormatter.m in Sources */, + B5456195186CE7957E416C7DD618788D /* DDContextFilterLogFormatter+Deprecated.m in Sources */, + 82AA025D5EC1A58C8902EEECFE1DD8F7 /* DDDispatchQueueLogFormatter.m in Sources */, + 0A72FC7B052E2011B6DCF12313719170 /* DDFileLogger.m in Sources */, + 6F442478CAC7A7AEC478C22A0E5DD144 /* DDFileLogger+Buffering.m in Sources */, + 467975712189615A5AB41295305E461F /* DDLog.m in Sources */, + FE002852C11531402A736DA0149E1FA4 /* DDLoggerNames.m in Sources */, + FBA5671EC48012906928BF59BB0F2C14 /* DDMultiFormatter.m in Sources */, + 3138FD5246AE698C58242B8B5F4DB275 /* DDOSLogger.m in Sources */, + C860C52DBD445F475FDC2C407F9D694B /* DDTTYLogger.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 593511665C0C108E88734EEC8934C39A /* Sources */ = { + B078472DF163DFC2E21DD72C409ADC60 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7E27BE7E1947ED28A53D8D74DDAE6163 /* ORSSerialBuffer.m in Sources */, - C0EE781D0242070ED7ECDBF12897FCDE /* ORSSerialPacketDescriptor.m in Sources */, - 1E2EBEF6D6E62ADF4D7B43128BC29924 /* ORSSerialPort.m in Sources */, - 67396120FEACFFF2A02895524665BFEA /* ORSSerialPort-dummy.m in Sources */, - AB0F79B318B887A36B85B240DB74B555 /* ORSSerialPortManager.m in Sources */, - 00C7AC983E2B7E8B26D17161258D7D92 /* ORSSerialRequest.m in Sources */, + 6952FD3CAF70E936FCDE885DEA4041FE /* MIKMIDI-dummy.m in Sources */, + 0FE983B5C7B8C0079EC498C846754BBC /* MIKMIDIChannelEvent.m in Sources */, + AD7AE991769DC22C151B59585CCD6DBD /* MIKMIDIChannelPressureCommand.m in Sources */, + 6B41CF17071AC0458E163A0A5271049C /* MIKMIDIChannelPressureEvent.m in Sources */, + 843D29C61967D764CB26D8B64F212DCC /* MIKMIDIChannelVoiceCommand.m in Sources */, + 364A63BA9E90154E30C4C44B0F55FCB5 /* MIKMIDIClientDestinationEndpoint.m in Sources */, + 14A94A6C5EE06ECC4E54FEF5456C937E /* MIKMIDIClientSourceEndpoint.m in Sources */, + F7D0FD819BED2413298ECF29108A2CB7 /* MIKMIDIClock.m in Sources */, + F5C37541A81E6815C97F0E0D3E1CC95D /* MIKMIDICommand.m in Sources */, + 3B6CC8BF17EBB804DAA87B1293F0CCCA /* MIKMIDICommandThrottler.m in Sources */, + 8F8131B7F9808353A92711BDC76D3AF2 /* MIKMIDIConnectionManager.m in Sources */, + 127384C91EDC269A900BD3AE0E666D34 /* MIKMIDIControlChangeCommand.m in Sources */, + 7502DA9B14D64B19E461975885C1A9EA /* MIKMIDIControlChangeEvent.m in Sources */, + 11759447844A2C0C10FF05C571C0E4D8 /* MIKMIDIDestinationEndpoint.m in Sources */, + 70338541632BDCAEFE61A723B52F5FEC /* MIKMIDIDevice.m in Sources */, + 9929C959ED646991B479560CA1199C52 /* MIKMIDIDeviceManager.m in Sources */, + 68FEC5CCB2C72B7BFF8E8F36D33E5F8C /* MIKMIDIEndpoint.m in Sources */, + 9DBFC154758BE865C1122D2B65449777 /* MIKMIDIEndpointSynthesizer.m in Sources */, + A3BF3F1C5E4DF4A33621E517B4D53E48 /* MIKMIDIEntity.m in Sources */, + D7389946104CE3C4360787C4A78182E1 /* MIKMIDIErrors.m in Sources */, + 9C5DCB1054D5CCFA730B150A47C96D9A /* MIKMIDIEvent.m in Sources */, + E6DF6A85EB8117DDBB18A008479BF66E /* MIKMIDIEventIterator.m in Sources */, + 9D0439D5E4DA21D0DD272E363FEFD22E /* MIKMIDIInputPort.m in Sources */, + F5183E5536CEF22BEFBD2EDC52AA394B /* MIKMIDIMacDebugQuickLookSupport.m in Sources */, + 52D6FECF92B3511D90AF4B06972D3814 /* MIKMIDIMapping.m in Sources */, + 100D8155BE5B9CB6F7F071F451A5033D /* MIKMIDIMappingGenerator.m in Sources */, + 67FA663C1BBEBEF50B9089F8FB49418C /* MIKMIDIMappingItem.m in Sources */, + 5CED2A98414D23D22A201E217C1BA2A0 /* MIKMIDIMappingManager.m in Sources */, + 80F65A94BD5ED2FD87C79B4605F0A187 /* MIKMIDIMappingXMLParser.m in Sources */, + 05B7721987C840DEBD8C17EF749EEAB0 /* MIKMIDIMetaCopyrightEvent.m in Sources */, + 162064222917CEB14D652D6518B30221 /* MIKMIDIMetaCuePointEvent.m in Sources */, + 0EFDE3A3113D5C6233A2FB09D6A78B55 /* MIKMIDIMetaEvent.m in Sources */, + 11AFB3040CF6D023EC175A1CEA0EEE36 /* MIKMIDIMetaInstrumentNameEvent.m in Sources */, + A0C4816078B950B46F8167F1E7B7D942 /* MIKMIDIMetaKeySignatureEvent.m in Sources */, + E5DE6C77166FB542286655EA3FE5A0F6 /* MIKMIDIMetaLyricEvent.m in Sources */, + 25D14CC8ABB6EC2094B93425E19889D0 /* MIKMIDIMetaMarkerTextEvent.m in Sources */, + 1BF820BE85E5F97681E1F6EDEC007CD8 /* MIKMIDIMetaSequenceEvent.m in Sources */, + 62B39DDA61B6FFD30FE53204B2A3F1EC /* MIKMIDIMetaTextEvent.m in Sources */, + 0AEC948129048C26375B3840FB0E735C /* MIKMIDIMetaTimeSignatureEvent.m in Sources */, + B03C3D033D9D7F922ECE147B534A2BA9 /* MIKMIDIMetaTrackSequenceNameEvent.m in Sources */, + E5DA66AD5AAEF8EBBC71174149537DB5 /* MIKMIDIMetronome.m in Sources */, + F783007C24B605813454F158579A35F6 /* MIKMIDINoteCommand.m in Sources */, + F4E35CF3914355CACC85CAFC0837CD85 /* MIKMIDINoteEvent.m in Sources */, + 79E971F26CDA18124BCA9D46E3074FB1 /* MIKMIDINoteOffCommand.m in Sources */, + 9D399881DA6632C8174F627C64728BEE /* MIKMIDINoteOnCommand.m in Sources */, + F29BC6F92214FDB07233AF727CB788CA /* MIKMIDIObject.m in Sources */, + EE7057E480A09AF98C398C7363190660 /* MIKMIDIOutputPort.m in Sources */, + C3876371CD8B07E554657EDDA967D181 /* MIKMIDIPitchBendChangeCommand.m in Sources */, + F605E61A3ED4FF48F558601ACED519B3 /* MIKMIDIPitchBendChangeEvent.m in Sources */, + 28F7377DF75A179FEE0D05F05A4FA469 /* MIKMIDIPlayer.m in Sources */, + 4DB81C1B9D51A0523931BE805BFE6726 /* MIKMIDIPolyphonicKeyPressureCommand.m in Sources */, + FCDE9A93B4E90375C997AC072398093E /* MIKMIDIPolyphonicKeyPressureEvent.m in Sources */, + 0240EB9A174938D67B19CC63C5626A46 /* MIKMIDIPort.m in Sources */, + 75BCA99C1A8D300CB661ECD24739B730 /* MIKMIDIPrivateUtilities.m in Sources */, + C2B231C963C21812A1F1A347716CA6B8 /* MIKMIDIProgramChangeCommand.m in Sources */, + D37189908AD3964C981C1D41443EE2E6 /* MIKMIDIProgramChangeEvent.m in Sources */, + 4E34B6C27C0550AF72D4DED05245A8AA /* MIKMIDISequence.m in Sources */, + 0982151698AA4E16DEC1C2F358AB04C4 /* MIKMIDISequencer.m in Sources */, + 4579C8CB184B05DA684B6073DCE3E429 /* MIKMIDISourceEndpoint.m in Sources */, + 212F61A57DC9D98A4EF1CC438D03205B /* MIKMIDISynthesizer.m in Sources */, + 268964F14AAE7B0A0B1B0EC6D2662BAE /* MIKMIDISynthesizerInstrument.m in Sources */, + 1EB9E66E9A3AA4AFD137C78C91C538B5 /* MIKMIDISystemExclusiveCommand.m in Sources */, + 0AB1A7FF49CDAD6E50F72F4F239C426B /* MIKMIDISystemKeepAliveCommand.m in Sources */, + C92F0B143746145974A13472C207505A /* MIKMIDISystemMessageCommand.m in Sources */, + 9AF1CB6C02DB161463DCF46F7936D1F2 /* MIKMIDITempoEvent.m in Sources */, + C6C7509F1F3E090DD78040DE9B4A99B0 /* MIKMIDITrack.m in Sources */, + A56B3264D8E7FE4C9C79F9C0A88DAF04 /* MIKMIDIUtilities.m in Sources */, + 00F0B55E4429B6E73CA85006EE4BF375 /* NSUIApplication+MIKMIDI.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5ADBDE8D1C1CA75A11E61AA290C7D6BF /* Sources */ = { + B9D2D94A605548E9D4DA2AA8E73C3C9F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 531A17541EE08D7521FB2C7C6941679C /* CocoaAsyncSocket-dummy.m in Sources */, - 700F6E5384742D753CC9F1E7A415DE6F /* GCDAsyncSocket.m in Sources */, - 55AF705CCDAF7AD6DFF61228E6B25175 /* GCDAsyncUdpSocket.m in Sources */, + B382FBC6E3BA0B875D4A95531573AEA8 /* ORSSerialBuffer.m in Sources */, + 08F305261B5A89E56A8446696BF82A52 /* ORSSerialPacketDescriptor.m in Sources */, + 3B8F7B47CE9F5CF0728DDA5651F58D53 /* ORSSerialPort.m in Sources */, + 0A42D532A718D5B97FE4847730FED4A9 /* ORSSerialPort-dummy.m in Sources */, + E96C274175846879B4D78DED63C88840 /* ORSSerialPortManager.m in Sources */, + 9CC4F1E6B2F7EA2BEBC134C8566B6F51 /* ORSSerialRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6FE99D9D50AB5C263A05091DD1366D53 /* Sources */ = { + C09EEE9686595E30C20A4D9EC72FA814 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7C8319EBBD6D670B99418A7784872620 /* ASCIImage-dummy.m in Sources */, - B09E65D80C6737EB9083234BD9890687 /* PARImage+ASCIIInput.m in Sources */, + CBD0E242B9E68A900E492E21CF39D237 /* NSRunLoop+SRWebSocket.m in Sources */, + 077663D5F9DF9D9995AFFF181538AA7F /* NSURLRequest+SRWebSocket.m in Sources */, + 06E48B6287F8BF2F717D37DC51EAED05 /* SocketRocket-dummy.m in Sources */, + 24F260A45898A35168ABC37B7EC93487 /* SRConstants.m in Sources */, + 690AFDF2CF55CCA402ED31C6E236825F /* SRDelegateController.m in Sources */, + B422C7E18C35A69D7E74CEC164FF7D4A /* SRError.m in Sources */, + D861908C7B2FFBFC6F0C2F9DF20AE3B8 /* SRHash.m in Sources */, + E3CA30DB8C3DD4DB675507632B34342C /* SRHTTPConnectMessage.m in Sources */, + CB1E4AA2993620771B46B2F226EEC046 /* SRIOConsumer.m in Sources */, + E6020011AEFCB2595B82F3CC7B2DC604 /* SRIOConsumerPool.m in Sources */, + C586FEF4BD9ED734EE11A4464839B39E /* SRLog.m in Sources */, + E70A122B925EF88DE4868945EDAA9F45 /* SRMutex.m in Sources */, + FE6B5F1DB62B560D7965D2F66D64DB80 /* SRPinningSecurityPolicy.m in Sources */, + 530DA3E0A81C6288672E056A239DE9C7 /* SRProxyConnect.m in Sources */, + A72B9B390411E61766A4E2B2D376B95F /* SRRandom.m in Sources */, + E5E06E6C9B84E85646A06525A26F56A3 /* SRRunLoopThread.m in Sources */, + 2E4E8391D62C329D939117D00DFC9667 /* SRSecurityPolicy.m in Sources */, + 62E4952E25CDA63102A0F02B92EB62E9 /* SRSIMDHelpers.m in Sources */, + D55B22CCA981119E53D4ADDA0F6AE71C /* SRURLUtilities.m in Sources */, + 6CB2E6C4235B35D01253874F2B0811E5 /* SRWebSocket.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A9105BE00AE9D556514F5218AD9F45D0 /* Sources */ = { + C73635D4C903279C3227756C5BC02A18 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FA2EB56D3D930D4F1D29E8C288A7B1D0 /* MIKMIDI-dummy.m in Sources */, - AD49CA5FBD63B1A721BE6047FDB8F587 /* MIKMIDIChannelEvent.m in Sources */, - B6A6E98E43556C4D014CD29C28B06C8E /* MIKMIDIChannelPressureCommand.m in Sources */, - A58555A30D3F6DD2932F199645F0D437 /* MIKMIDIChannelPressureEvent.m in Sources */, - 8C42085E9127F5691C510980F0DAEA24 /* MIKMIDIChannelVoiceCommand.m in Sources */, - C162EE65FF31798132A0B793F60DFDEE /* MIKMIDIClientDestinationEndpoint.m in Sources */, - F9B3790686CA650B9A9346F9937DBB02 /* MIKMIDIClientSourceEndpoint.m in Sources */, - 287833B18BDEB94DFEE726CE0E453506 /* MIKMIDIClock.m in Sources */, - 2C26D337526DE8AB3BDFD567F9CE27B5 /* MIKMIDICommand.m in Sources */, - D2F7AE0BA57849870A155D649C5EEC9F /* MIKMIDICommandThrottler.m in Sources */, - 7FC034144E26E62685B76EC0CCA6485C /* MIKMIDIConnectionManager.m in Sources */, - E6DA76DC4789F5BFA0EEE6AA94096DEB /* MIKMIDIControlChangeCommand.m in Sources */, - 74A921ACEEB7CB0866659A20DE64D996 /* MIKMIDIControlChangeEvent.m in Sources */, - 19BFF9BACA2C5E676A270EF3BD619308 /* MIKMIDIDestinationEndpoint.m in Sources */, - D9A8A45CAF0F24EC4113AFD40A3BCB41 /* MIKMIDIDevice.m in Sources */, - FBCB4E88FBC660C812CE998B90B2FF63 /* MIKMIDIDeviceManager.m in Sources */, - E78AA3E2AD53ABFE436F8DE545D6D8F5 /* MIKMIDIEndpoint.m in Sources */, - 071445CE899C2D3B6AE82D24A9E49013 /* MIKMIDIEndpointSynthesizer.m in Sources */, - 393E66B17C8A58E6F2098C481CB13A7E /* MIKMIDIEntity.m in Sources */, - 48B954BB81ECDCA4894ABF8D7EA4DB58 /* MIKMIDIErrors.m in Sources */, - C62B9DF23414FDEE33C217EF2B10C24D /* MIKMIDIEvent.m in Sources */, - 7DDE118F704FD73F0CA77397BF6413BA /* MIKMIDIEventIterator.m in Sources */, - 9206AE70952347D99BD7BAAC77CEC5E3 /* MIKMIDIInputPort.m in Sources */, - 3D658814A8D5571B6B15F7A62791B871 /* MIKMIDIMacDebugQuickLookSupport.m in Sources */, - 2D47F7A217124316FBF88E37BF881C09 /* MIKMIDIMapping.m in Sources */, - 054FA633E5005D0160E5DE762A272BA4 /* MIKMIDIMappingGenerator.m in Sources */, - 9D1AED1520BBD43A57BA15734A6B1504 /* MIKMIDIMappingItem.m in Sources */, - F26AB78038CEE7072D26F9789716CCD8 /* MIKMIDIMappingManager.m in Sources */, - A36354EDB20466346A0C06451A76BE78 /* MIKMIDIMappingXMLParser.m in Sources */, - 279617E8712710CD0A260B9E03BD065C /* MIKMIDIMetaCopyrightEvent.m in Sources */, - 50A2DDA4ED1E97E054323B53F1002664 /* MIKMIDIMetaCuePointEvent.m in Sources */, - BC35D7657B3AD144723712BFF1ECC6E9 /* MIKMIDIMetaEvent.m in Sources */, - CCB6450269D4F69F905811DC51CCE78B /* MIKMIDIMetaInstrumentNameEvent.m in Sources */, - 06CAC698E10ACB37E9C4DB97E5D124A0 /* MIKMIDIMetaKeySignatureEvent.m in Sources */, - 76B78F10D8F1ED3B66E27C9E3AF62A2F /* MIKMIDIMetaLyricEvent.m in Sources */, - 6D005EFB76167519BC753220396A4827 /* MIKMIDIMetaMarkerTextEvent.m in Sources */, - 8B8242BDCD2E86428AE907C4CDDA68BA /* MIKMIDIMetaSequenceEvent.m in Sources */, - 9096504782451451A412B3B074E0FA27 /* MIKMIDIMetaTextEvent.m in Sources */, - CE99A8C794C12E493EBB3DB6D4856318 /* MIKMIDIMetaTimeSignatureEvent.m in Sources */, - 057A031CB391F52A4AA77E6E6378B429 /* MIKMIDIMetaTrackSequenceNameEvent.m in Sources */, - 8C15BDB0DB7D4EF10D101E3D74EF7711 /* MIKMIDIMetronome.m in Sources */, - 8C7B6BA65F94B81FF2F9F514595B93A5 /* MIKMIDINoteCommand.m in Sources */, - 74FB18586283DC91B96DB8EB712B8247 /* MIKMIDINoteEvent.m in Sources */, - 8414C55579CDB206B3CB9BA62AC679E7 /* MIKMIDINoteOffCommand.m in Sources */, - BC163EB4E262D1EE7978BEBB84E1B8C9 /* MIKMIDINoteOnCommand.m in Sources */, - B5F06813924F7B2790F17FBA0492F3CC /* MIKMIDIObject.m in Sources */, - 5057CAA3A9C1CD3B1EFCF8E479E651E4 /* MIKMIDIOutputPort.m in Sources */, - D09A9580276166FC435D6A3B942F77E7 /* MIKMIDIPitchBendChangeCommand.m in Sources */, - E1B704839B804D2B6AC561DFAF4B6D9F /* MIKMIDIPitchBendChangeEvent.m in Sources */, - E0D3BEBF63D6E283F8582E4005466222 /* MIKMIDIPlayer.m in Sources */, - E80A2661BCD934058977B8DD6E99835F /* MIKMIDIPolyphonicKeyPressureCommand.m in Sources */, - 0558D2AE0C2C157FF29960CCA9905ED6 /* MIKMIDIPolyphonicKeyPressureEvent.m in Sources */, - 3AA0B05D8DC45C3A8113AC2D765D9579 /* MIKMIDIPort.m in Sources */, - 987991DCAE89D3C3117F3EB941CE664A /* MIKMIDIPrivateUtilities.m in Sources */, - 2D7B4FE30A2376B3E95C6729C141FA1F /* MIKMIDIProgramChangeCommand.m in Sources */, - E5D5F6E7715630F9C611CA7E04F18BF7 /* MIKMIDIProgramChangeEvent.m in Sources */, - 9D511C0170D35116B03790DB91DBB4F6 /* MIKMIDISequence.m in Sources */, - 58545F7E457F94FC62F576CF83C8BAC2 /* MIKMIDISequencer.m in Sources */, - 3E732873C7AE00FB5B8E172AA9066A43 /* MIKMIDISourceEndpoint.m in Sources */, - 2F1117E6C75CDAF26C59E98397B8B278 /* MIKMIDISynthesizer.m in Sources */, - 3BE45F5B3583FFCD586313E01D10C45A /* MIKMIDISynthesizerInstrument.m in Sources */, - 74EE49854A4933286B871678F94EF44C /* MIKMIDISystemExclusiveCommand.m in Sources */, - 3024EE23C37B029B2CD1C02CA87767DB /* MIKMIDISystemKeepAliveCommand.m in Sources */, - AF66282BFFAA24795BDE7C194206D35C /* MIKMIDISystemMessageCommand.m in Sources */, - 3847382D331C35C0A4A4C28D5BE8A193 /* MIKMIDITempoEvent.m in Sources */, - A70FBF5807414C1F32D97CD190D1E5F9 /* MIKMIDITrack.m in Sources */, - 2DFE9AA399844A600A982C94EE2A1EAB /* MIKMIDIUtilities.m in Sources */, - 42F87D1A78B298270CE4DB1E8607B7FC /* NSUIApplication+MIKMIDI.m in Sources */, + 981BEEF652C9A3EF5D56BEB909131DC1 /* CocoaHTTPServer-dummy.m in Sources */, + 1E3629C68D10C2807461237A9B30653E /* DAVConnection.m in Sources */, + 0FD9F19E06CFC9816F39BBF6FF96419E /* DAVResponse.m in Sources */, + 28EE2E62017948158BD66EA2DB9B54E2 /* DDData.m in Sources */, + 8A1022B711D2E3E22723D6B46789EC96 /* DDNumber.m in Sources */, + 4DE070DFC7B193BAA5D4ECC976694B27 /* DDRange.m in Sources */, + 2B9916AF8E33232A507932205F074157 /* DELETEResponse.m in Sources */, + F1BFD0889EF0A495816E5EAE3D6DA604 /* HTTPAsyncFileResponse.m in Sources */, + A2B01B7679A4D260125A880A9749DD8B /* HTTPAuthenticationRequest.m in Sources */, + D41B1558F2B194DABF746BAF8ED4E866 /* HTTPConnection.m in Sources */, + 10198DF66B3B8F5BAEC4097295F9080E /* HTTPDataResponse.m in Sources */, + 61F591259210DDB9B38281D1DA7B5372 /* HTTPDynamicFileResponse.m in Sources */, + 88C659BEFC573D1B91C1E8469FC8522E /* HTTPErrorResponse.m in Sources */, + EEEB92CF6F67BE8DB04ED29870C0F67D /* HTTPFileResponse.m in Sources */, + 9CA1D04D105C20D235BC67A4D4A0408B /* HTTPMessage.m in Sources */, + 0B2E42C2A468B2F81B6722732E89C303 /* HTTPRedirectResponse.m in Sources */, + 629DB43B6857920AEEE5B92B84CC52AA /* HTTPServer.m in Sources */, + AF33F6FBBE8EA390F8A5BE73204F6BD6 /* MultipartFormDataParser.m in Sources */, + 5BF3D4B5C5334360BA48D00CF40D27BB /* MultipartMessageHeader.m in Sources */, + 0D2163C2362A2AC3F7DFD2F868457046 /* MultipartMessageHeaderField.m in Sources */, + 2366789ED077638C6F8EDFAD93830B08 /* PUTResponse.m in Sources */, + 8DE2B5A8C7B621F655940787B8FD6328 /* WebSocket.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AF279A098DAA60A73AA8FCE0DF4DB73B /* Sources */ = { + EF5E329682CCE7D0B31CBA9F24DABA50 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 49F2E634C941C405E65E6A2D6B68CE6E /* CocoaAsyncSocket-dummy.m in Sources */, + 3AE7E602A9326AFE4943A994B3A05E88 /* GCDAsyncSocket.m in Sources */, + AE39FB2AF34CC8B76D353E8FBE41696F /* GCDAsyncUdpSocket.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F1C16B21F1B552E01C2246F2C7E91544 /* Sources */ = { + F36D54D493D795E9C52F6451DB7D3E51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1060E0A4B58AB0BAA641A937F98AB740 /* Pods-Hammerspoon-dummy.m in Sources */, + 90592C9439CD2BA46B9DD0DCF7E38087 /* PocketSocket-dummy.m in Sources */, + C6788627E0105DA895379A2ABF451563 /* PSWebSocket.m in Sources */, + 2F694601BC31E5488E6DA981ECE99C12 /* PSWebSocketBuffer.m in Sources */, + 5AF145AA310DAA5F2FC25071882C6922 /* PSWebSocketDeflater.m in Sources */, + 5BD9319BFFF7E6F98EF781E465A4E099 /* PSWebSocketDriver.m in Sources */, + 44FB816D3DC0546A2BA7237A812C3F73 /* PSWebSocketInflater.m in Sources */, + F61752584F3FCD856C7597C48409047E /* PSWebSocketNetworkThread.m in Sources */, + E0056BA55FE1377B22B94F7674864D44 /* PSWebSocketUTF8Decoder.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 00D6569A640D9D27D6CCE0BB950E54AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CocoaHTTPServer; - target = ADF9F3B1BBEC7F642AA07171CF4B2509 /* CocoaHTTPServer */; - targetProxy = 6163E4293E3820766CDB11A8807C63A0 /* PBXContainerItemProxy */; - }; - 2287F9E2A43E1614E3CBB88C3177F424 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SocketRocket; - target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */; - targetProxy = C875ED04A734CA02BD07A6BB143667A8 /* PBXContainerItemProxy */; - }; - 29CBCDA2266ED4B22EB054EAEE9639B7 /* PBXTargetDependency */ = { + 052EF0B5BDBAC1874A6F81BEDA9D1381 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ASCIImage; - target = BB446757690D70C17D8A0A56E3FE1C37 /* ASCIImage */; - targetProxy = A59C8166B1670B6C0EBA0496F50ACE80 /* PBXContainerItemProxy */; + name = CocoaLumberjack; + target = E95654B155D25890BE8E26081FCA8265 /* CocoaLumberjack */; + targetProxy = 25EDC0409EB03E174D9171F0411D27B1 /* PBXContainerItemProxy */; }; - 37B9FD9413123380585125A1C1812ADF /* PBXTargetDependency */ = { + 19AC128454BDFDFBD6F3291F16943A21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ORSSerialPort; target = 18ABAA2950D5B4418A5DBF7F07F33088 /* ORSSerialPort */; - targetProxy = D5DA9ADF79485913B4BA2C2FFF8AD895 /* PBXContainerItemProxy */; - }; - 7115000615248DF8188239319A41A78A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - target = 94BDCD90B52278D1FB244A66E8B95A4A /* Sentry */; - targetProxy = 153B011777FD92C53882013EF118F4E2 /* PBXContainerItemProxy */; - }; - 71AE8240788EEB781FE23A03C16DE964 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MIKMIDI; - target = 9310B3A9161D4A357995A672BC027CBF /* MIKMIDI */; - targetProxy = 336D80FADEE195A6C01BDBC0E224FD23 /* PBXContainerItemProxy */; + targetProxy = 5D2DB1C7C9D8C3B1678EDD86D19D016C /* PBXContainerItemProxy */; }; - 97E911443DF13762040A9E91B734B12C /* PBXTargetDependency */ = { + 3AE06E0FCFCF7C5458964620CA7ABA47 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Sparkle; - target = ED77B4B88587C894E85C361023D67C53 /* Sparkle */; - targetProxy = F1EEC7A79844ED15519CFB1F0012C3FD /* PBXContainerItemProxy */; + name = SocketRocket; + target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */; + targetProxy = C8126301BEF4FCBB6FDB98684CD66FFE /* PBXContainerItemProxy */; }; - C4D3E183BAC8C82A3AB68391309B101A /* PBXTargetDependency */ = { + 3FCBAB53310918D4F0F2EBFD573ADB2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CocoaLumberjack; target = E95654B155D25890BE8E26081FCA8265 /* CocoaLumberjack */; - targetProxy = 18F9CFACC79073DEBF05739447958F5D /* PBXContainerItemProxy */; + targetProxy = 395C18F33C0F0ABF92A965EEFAF2C22D /* PBXContainerItemProxy */; }; - D3998B908F7D28C9CA35598E0369F120 /* PBXTargetDependency */ = { + 476ACA10259E8AA0B3BA59BD104DF22F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = PocketSocket; target = 83EFF9537A7F38964851032EF617DE38 /* PocketSocket */; - targetProxy = 0C33701A2EF5965F295B7FB6B5E81424 /* PBXContainerItemProxy */; + targetProxy = D4DBAB5C30C3200CE86C4820D6F9B86C /* PBXContainerItemProxy */; + }; + 4FA0D89C27366D65C5A3301909BD96BF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Sentry-Sentry"; + target = 97C36B3C576D3765DAAE4EA7AC1E9ADC /* Sentry-Sentry */; + targetProxy = 9DDB3A9AECFE8B00D45937BD9CA84082 /* PBXContainerItemProxy */; + }; + 723D3081CA9D7F0F0DFC386D7B99276C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ASCIImage; + target = BB446757690D70C17D8A0A56E3FE1C37 /* ASCIImage */; + targetProxy = 1BC3579B9752E49C76B967DA8F79DE65 /* PBXContainerItemProxy */; }; - E4F3A0FB85F47D8DC0E6E5434FEC8D30 /* PBXTargetDependency */ = { + 783EF7BC032ABCB10ED915D814AC61CA /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CocoaAsyncSocket; target = 6083682834ABE0AE7BD1CBF06CADD036 /* CocoaAsyncSocket */; - targetProxy = 5164237F76A6DEDB999ABCAD4743E1E9 /* PBXContainerItemProxy */; + targetProxy = 1326597EF8ACAE918E763F110246C0E7 /* PBXContainerItemProxy */; }; - E965A62B2ADE8A94A0B2343914935851 /* PBXTargetDependency */ = { + ABAA76FFA14A1AAAAC158C5885034A18 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "CocoaLumberjack-CocoaLumberjackPrivacy"; target = 276021C4482165D46E0CBBEFB822FE95 /* CocoaLumberjack-CocoaLumberjackPrivacy */; - targetProxy = A27E3C39A61E64FE888F18C5815B0618 /* PBXContainerItemProxy */; + targetProxy = 4801A47976E0EA1F57613B11F4E383EE /* PBXContainerItemProxy */; + }; + B624D10C4BCDE94FAB36292078D04084 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + target = 94BDCD90B52278D1FB244A66E8B95A4A /* Sentry */; + targetProxy = FF3EC4BE31EED64024155978FAADC316 /* PBXContainerItemProxy */; + }; + C00B3C86B1080688F345EE6052EB6239 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CocoaHTTPServer; + target = ADF9F3B1BBEC7F642AA07171CF4B2509 /* CocoaHTTPServer */; + targetProxy = BCED0731327EA89A35B5C313CE08069D /* PBXContainerItemProxy */; }; - EECCDCB61A33ED73A5A15BE3C36193E3 /* PBXTargetDependency */ = { + C41D870FB8CCAA579C25E6A3204A10B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = CocoaAsyncSocket; target = 6083682834ABE0AE7BD1CBF06CADD036 /* CocoaAsyncSocket */; - targetProxy = FFD7A0DEE8C0AFDF2992C67336AFBA8F /* PBXContainerItemProxy */; + targetProxy = 87F8F8F4BA2482EF09D4CA59133DA842 /* PBXContainerItemProxy */; }; - EF2C3CFC6BBFF5A3D7B2354627E8C140 /* PBXTargetDependency */ = { + D683C55C1F3BD30E47F4BCE57632E6DF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = CocoaLumberjack; - target = E95654B155D25890BE8E26081FCA8265 /* CocoaLumberjack */; - targetProxy = C63313907FBE0765C8410FBE552FB99E /* PBXContainerItemProxy */; + name = MIKMIDI; + target = 9310B3A9161D4A357995A672BC027CBF /* MIKMIDI */; + targetProxy = D3842F6D63B14BAAEF05E47F1C488FD5 /* PBXContainerItemProxy */; }; - FC78F17866FFBE0466DFF0DEC5EBDE05 /* PBXTargetDependency */ = { + E6542B6D74B126496BA30E0EFB2D727E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Sentry-Sentry"; - target = 97C36B3C576D3765DAAE4EA7AC1E9ADC /* Sentry-Sentry */; - targetProxy = F9169E41DEA0C5E6DF22FF430C3E5CD6 /* PBXContainerItemProxy */; + name = Sparkle; + target = ED77B4B88587C894E85C361023D67C53 /* Sparkle */; + targetProxy = 92DDEAF53C106B56478C2972F29623C3 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 054C5D8F175EAE73FE8E50E41BCB2C0B /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5D6D6B8527C99A3626003480ADAB5D99 /* ORSSerialPort.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - ENABLE_NS_ASSERTIONS = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/ORSSerialPort/ORSSerialPort-prefix.pch"; - MACOSX_DEPLOYMENT_TARGET = 13.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ORSSerial; - PRODUCT_NAME = ORSSerialPort; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - }; - name = Profile; - }; - 07E359AFB5B76CAF8515BB836ADCCA49 /* Debug */ = { + 0444AE06D73721D218399EEF3D45B217 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16A6A10301EC58EDE0CC9CE0D9DC20D4 /* Sentry.debug.xcconfig */; + baseConfigurationReference = 9192462197B734C4F024DF6F3202D421 /* SocketRocket.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/Sentry/Sentry-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "SENTRY_NO_UIKIT=1", - ); + GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = Headers/Public/Sentry/Sentry.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Sentry; - PRODUCT_NAME = Sentry; + PRODUCT_MODULE_NAME = SocketRocket; + PRODUCT_NAME = SocketRocket; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.5; - }; - name = Debug; - }; - 09C63D416D74C08185A967D37FDB701E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2DFCF710C9D6BDCE5850D34283ABC015 /* Sparkle.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - COMBINE_HIDPI_IMAGES = YES; - ENABLE_NS_ASSERTIONS = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 13.0; - SDKROOT = macosx; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Release; }; - 0B6B77B0752CECE826E22CFAF3243099 /* Profile */ = { + 08BE7EF8089D2ED8C39D8065988A5A75 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 682A6FCEC27897DEB0D430B5077B7C24 /* ASCIImage.debug.xcconfig */; + baseConfigurationReference = 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/ASCIImage/ASCIImage-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/CocoaLumberjack/CocoaLumberjack-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ASCIImage; - PRODUCT_NAME = ASCIImage; + PRODUCT_MODULE_NAME = CocoaLumberjack; + PRODUCT_NAME = CocoaLumberjack; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.8; }; - name = Profile; + name = Debug; }; - 15DB7492AB178924DF87D7B483312302 /* Profile */ = { + 0B0D8021214BCD963F3F56CEDC17EED2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 446B4CF957F3C0C801C5F70DBA29E7D1 /* CocoaAsyncSocket.debug.xcconfig */; + baseConfigurationReference = 9F051BC38B6E2DBC7610F5942CF80BD6 /* SocketRocket.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/CocoaAsyncSocket/CocoaAsyncSocket-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaAsyncSocket; - PRODUCT_NAME = CocoaAsyncSocket; + PRODUCT_MODULE_NAME = SocketRocket; + PRODUCT_NAME = SocketRocket; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Profile; + name = Debug; }; - 1CF7292B3F82F178FAF33EF002212C84 /* Debug */ = { + 0CC3345CBEE840B1628CDCB91975F9A1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */; + baseConfigurationReference = 13C059366E835989D34DEE142C564130 /* CocoaLumberjack.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "Target Support Files/CocoaLumberjack/CocoaLumberjack-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; @@ -5036,160 +5272,121 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.8; }; - name = Debug; + name = Release; }; - 275A6A0C109DD2BEEF43FE27E9714D23 /* Debug */ = { + 10322045D0CA4E40BAA37E4D67C0DCE4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5D6D6B8527C99A3626003480ADAB5D99 /* ORSSerialPort.debug.xcconfig */; + baseConfigurationReference = 13C059366E835989D34DEE142C564130 /* CocoaLumberjack.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CODE_SIGNING_ALLOWED = NO; + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; ENABLE_NS_ASSERTIONS = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/ORSSerialPort/ORSSerialPort-prefix.pch"; + IBSC_MODULE = CocoaLumberjack; + INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; MACOSX_DEPLOYMENT_TARGET = 13.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ORSSerial; - PRODUCT_NAME = ORSSerialPort; - PUBLIC_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = CocoaLumberjackPrivacy; SDKROOT = macosx; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - 452084A909FB2BE5E0FE49FF45B3C647 /* Release */ = { + 152F42FE599BC83FFF21FBDAC1888BB1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1ECA7EE8F3613DD9FB96F4C7B50C1D74 /* MIKMIDI.release.xcconfig */; + baseConfigurationReference = 1AC3A001C7140AC553441ED14700B82E /* Sentry.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/MIKMIDI/MIKMIDI-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Sentry/Sentry-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "SENTRY_NO_UIKIT=1", + ); + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; + MODULEMAP_FILE = Headers/Public/Sentry/Sentry.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MIKMIDI; - PRODUCT_NAME = MIKMIDI; + PRODUCT_MODULE_NAME = Sentry; + PRODUCT_NAME = Sentry; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.5; }; - name = Release; + name = Debug; }; - 462289DEFE6AF66AAE40DBC7C8F5CFB0 /* Release */ = { + 15B454C9A21872BF31DD5BD2FC0532A8 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 431907C6B101D87A5D1F3C262A594167 /* CocoaHTTPServer.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - ENABLE_NS_ASSERTIONS = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/CocoaHTTPServer/CocoaHTTPServer-prefix.pch"; - MACOSX_DEPLOYMENT_TARGET = 13.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaHTTPServer; - PRODUCT_NAME = CocoaHTTPServer; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - }; - name = Release; - }; - 47062D7D4D53660AA946D6AEDCA4E0DB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 467A45C14018529DF04D635A1F3E01BB /* PocketSocket.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - ENABLE_NS_ASSERTIONS = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/PocketSocket/PocketSocket-prefix.pch"; - MACOSX_DEPLOYMENT_TARGET = 13.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = PocketSocket; - PRODUCT_NAME = PocketSocket; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - }; - name = Release; - }; - 4BC411C130D0CA204260E8256DE72CBC /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 16A6A10301EC58EDE0CC9CE0D9DC20D4 /* Sentry.debug.xcconfig */; + baseConfigurationReference = 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Sentry"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; ENABLE_NS_ASSERTIONS = YES; - IBSC_MODULE = Sentry; - INFOPLIST_FILE = "Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist"; + IBSC_MODULE = CocoaLumberjack; + INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; MACOSX_DEPLOYMENT_TARGET = 13.0; - PRODUCT_NAME = Sentry; + PRODUCT_NAME = CocoaLumberjackPrivacy; SDKROOT = macosx; SKIP_INSTALL = YES; WRAPPER_EXTENSION = bundle; }; name = Profile; }; - 4CB2FA1BB05294E2C2876DD169ABACE2 /* Profile */ = { + 1644BABC52EB1D07198302A3AAF020B6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16A6A10301EC58EDE0CC9CE0D9DC20D4 /* Sentry.debug.xcconfig */; + baseConfigurationReference = 1ECA7EE8F3613DD9FB96F4C7B50C1D74 /* MIKMIDI.release.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/Sentry/Sentry-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "SENTRY_NO_UIKIT=1", - ); + GCC_PREFIX_HEADER = "Target Support Files/MIKMIDI/MIKMIDI-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = Headers/Public/Sentry/Sentry.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Sentry; - PRODUCT_NAME = Sentry; + PRODUCT_MODULE_NAME = MIKMIDI; + PRODUCT_NAME = MIKMIDI; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.5; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Profile; + name = Release; }; - 4FCE2320EAC074142EE84CC8BED6A868 /* Release */ = { + 165C27C972DA8F906303D8F6B992E76B /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 976B6373B6050F75B5F22384B0FE1A73 /* Pods-Hammerspoon.release.xcconfig */; + baseConfigurationReference = A40744E74F20D172729FD70C1DC93565 /* Pods-Hammerspoon.profile.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; MACH_O_TYPE = staticlib; MACOSX_DEPLOYMENT_TARGET = 13.0; @@ -5201,72 +5398,75 @@ SDKROOT = macosx; SKIP_INSTALL = YES; }; - name = Release; + name = Profile; }; - 53501BD4808A2F5F9A2B7F832A33C681 /* Release */ = { + 22E81969E3E93E979D06680CA50FD8CB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9192462197B734C4F024DF6F3202D421 /* SocketRocket.release.xcconfig */; + baseConfigurationReference = 446B4CF957F3C0C801C5F70DBA29E7D1 /* CocoaAsyncSocket.debug.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/CocoaAsyncSocket/CocoaAsyncSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SocketRocket; - PRODUCT_NAME = SocketRocket; + PRODUCT_MODULE_NAME = CocoaAsyncSocket; + PRODUCT_NAME = CocoaAsyncSocket; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Release; + name = Debug; }; - 593450329C0BD9BB2A5CF706990ADDEA /* Release */ = { + 27ED7E0C6967CC703E5993A11253CA90 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F694C933B6EA4B00D70FB167F8452D36 /* Sentry.release.xcconfig */; + baseConfigurationReference = 431907C6B101D87A5D1F3C262A594167 /* CocoaHTTPServer.release.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/Sentry/Sentry-prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "SENTRY_NO_UIKIT=1", - ); + GCC_PREFIX_HEADER = "Target Support Files/CocoaHTTPServer/CocoaHTTPServer-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = Headers/Public/Sentry/Sentry.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Sentry; - PRODUCT_NAME = Sentry; + PRODUCT_MODULE_NAME = CocoaHTTPServer; + PRODUCT_NAME = CocoaHTTPServer; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.5; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Release; }; - 5E1031519DA812ABF866CCE8FF52C2F2 /* Profile */ = { + 2E12AB086D8339F7B965FD1EDA58FB09 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 32E6A74A3156E5EE30317B4653A10CB0 /* MIKMIDI.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "Target Support Files/MIKMIDI/MIKMIDI-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; @@ -5277,12 +5477,32 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Profile; }; - 645BF19318AA1997E83984F58C2FADA8 /* Debug */ = { + 3286E07118F4174AD451BC34F32C3FB3 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16A6A10301EC58EDE0CC9CE0D9DC20D4 /* Sentry.debug.xcconfig */; + baseConfigurationReference = AB750EFEFD0E374DF078145FF41774B0 /* Sparkle.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + COMBINE_HIDPI_IMAGES = YES; + ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 13.0; + SDKROOT = macosx; + }; + name = Profile; + }; + 3D7EA2AEC2F43FA02F45F5C19E3685E4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1AC3A001C7140AC553441ED14700B82E /* Sentry.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; COMBINE_HIDPI_IMAGES = YES; @@ -5299,93 +5519,128 @@ }; name = Debug; }; - 6EB733D69A06B162F9AAE1C991CC4982 /* Profile */ = { + 42411345F487C056C25463265A00B1F7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AB750EFEFD0E374DF078145FF41774B0 /* Sparkle.debug.xcconfig */; + baseConfigurationReference = 682A6FCEC27897DEB0D430B5077B7C24 /* ASCIImage.debug.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_OBJC_WEAK = NO; - COMBINE_HIDPI_IMAGES = YES; - ENABLE_NS_ASSERTIONS = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 13.0; - SDKROOT = macosx; - }; - name = Profile; - }; - 6EE9047286AA1118E13C29B5D3098D74 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 42AC81B40B97DF56D08CB62B5AF871C6 /* Pods-Hammerspoon.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - MACH_O_TYPE = staticlib; + GCC_PREFIX_HEADER = "Target Support Files/ASCIImage/ASCIImage-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = "Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ASCIImage; + PRODUCT_NAME = ASCIImage; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Debug; }; - 70103D49FA3421DD925ABF710681B39E /* Profile */ = { + 590EA38FD0E5F319EDB8D029584B949F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0BFD0976454B209FBB8282EB93D35336 /* PocketSocket.debug.xcconfig */; + baseConfigurationReference = D1C609420D7B4F4A83097742A69BB86E /* ASCIImage.release.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/PocketSocket/PocketSocket-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/ASCIImage/ASCIImage-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = PocketSocket; - PRODUCT_NAME = PocketSocket; + PRODUCT_MODULE_NAME = ASCIImage; + PRODUCT_NAME = ASCIImage; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + }; + name = Release; + }; + 5DF9F6E3A70E348FCC2EFF2D7C9B98A9 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AED3FF866171BE6D1B84822B6AD1D03C /* Sentry.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Sentry"; + ENABLE_NS_ASSERTIONS = YES; + IBSC_MODULE = Sentry; + INFOPLIST_FILE = "Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 13.0; + PRODUCT_NAME = Sentry; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 62E6B6139DEB80FE3A8A45B8A53A005E /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1AC3A001C7140AC553441ED14700B82E /* Sentry.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Sentry"; + ENABLE_NS_ASSERTIONS = YES; + IBSC_MODULE = Sentry; + INFOPLIST_FILE = "Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 13.0; + PRODUCT_NAME = Sentry; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; }; name = Profile; }; - 704851729066A3F16CEBAA56C37FA381 /* Debug */ = { + 6F874A3198CEF82A7EDDC0DF37BFEBAB /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 32E6A74A3156E5EE30317B4653A10CB0 /* MIKMIDI.debug.xcconfig */; + baseConfigurationReference = 446B4CF957F3C0C801C5F70DBA29E7D1 /* CocoaAsyncSocket.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/MIKMIDI/MIKMIDI-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/CocoaAsyncSocket/CocoaAsyncSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MIKMIDI; - PRODUCT_NAME = MIKMIDI; + PRODUCT_MODULE_NAME = CocoaAsyncSocket; + PRODUCT_NAME = CocoaAsyncSocket; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Debug; + name = Profile; }; - 7067A0B9F4E6F24F2303A45B3B5DC0AB /* Profile */ = { + 72A15AEC078F8CF61C9716766D5D2256 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9F051BC38B6E2DBC7610F5942CF80BD6 /* SocketRocket.debug.xcconfig */; buildSettings = { @@ -5393,9 +5648,12 @@ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; @@ -5406,90 +5664,122 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Profile; }; - 7A67160A8E999CBB8F3AF283058CE920 /* Release */ = { + 7D644E9BF6111D91CB3B10742E7CEC02 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 13C059366E835989D34DEE142C564130 /* CocoaLumberjack.release.xcconfig */; + baseConfigurationReference = 0BFD0976454B209FBB8282EB93D35336 /* PocketSocket.debug.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; - IBSC_MODULE = CocoaLumberjack; - INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/PocketSocket/PocketSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - PRODUCT_NAME = CocoaLumberjackPrivacy; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = PocketSocket; + PRODUCT_NAME = PocketSocket; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Release; + name = Profile; }; - 7D95E80A89A22791E504979D8C0020F6 /* Profile */ = { + 8DAB881E7FE222C1A094ABDCE06B1C17 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */; + baseConfigurationReference = 5D6D6B8527C99A3626003480ADAB5D99 /* ORSSerialPort.debug.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; - IBSC_MODULE = CocoaLumberjack; - INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/ORSSerialPort/ORSSerialPort-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - PRODUCT_NAME = CocoaLumberjackPrivacy; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ORSSerial; + PRODUCT_NAME = ORSSerialPort; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Profile; + name = Debug; }; - 835BCCEAB1E7470E3B79B881A4E29E38 /* Profile */ = { + 8F0E6017E6BADC5007FA905560E40844 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 839BB12438C2C096A2A438810D182307 /* CocoaHTTPServer.debug.xcconfig */; + baseConfigurationReference = 1AC3A001C7140AC553441ED14700B82E /* Sentry.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/CocoaHTTPServer/CocoaHTTPServer-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Sentry/Sentry-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "SENTRY_NO_UIKIT=1", + ); + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; + MODULEMAP_FILE = Headers/Public/Sentry/Sentry.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaHTTPServer; - PRODUCT_NAME = CocoaHTTPServer; + PRODUCT_MODULE_NAME = Sentry; + PRODUCT_NAME = Sentry; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.5; }; name = Profile; }; - 8D606B9BA3D92C8E924E089D0E583522 /* Release */ = { + 910CB51E7DEA6E02B1C3A9665112C87B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E81FC29C83D18A980D23CF2D8A344796 /* ORSSerialPort.release.xcconfig */; + baseConfigurationReference = 467A45C14018529DF04D635A1F3E01BB /* PocketSocket.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/ORSSerialPort/ORSSerialPort-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/PocketSocket/PocketSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ORSSerial; - PRODUCT_NAME = ORSSerialPort; + PRODUCT_MODULE_NAME = PocketSocket; + PRODUCT_NAME = PocketSocket; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Release; }; @@ -5555,39 +5845,38 @@ }; name = Release; }; - 9725115EE0D48A4BD7BD9054339C6EF9 /* Debug */ = { + 9D156F18A8C26F45FF9D683ECB5F94A3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0BFD0976454B209FBB8282EB93D35336 /* PocketSocket.debug.xcconfig */; + baseConfigurationReference = 2DFCF710C9D6BDCE5850D34283ABC015 /* Sparkle.release.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + COMBINE_HIDPI_IMAGES = YES; ENABLE_NS_ASSERTIONS = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/PocketSocket/PocketSocket-prefix.pch"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); MACOSX_DEPLOYMENT_TARGET = 13.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = PocketSocket; - PRODUCT_NAME = PocketSocket; - PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; }; - name = Debug; + name = Release; }; - 98E35C8667C39D0328B85F37CF82444D /* Release */ = { + 9D5A737D1E1EEDEE7E0BB9966A6F2054 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = E1F5717CF01EC7655B5006E8A05C5E4E /* CocoaAsyncSocket.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "Target Support Files/CocoaAsyncSocket/CocoaAsyncSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; @@ -5598,104 +5887,117 @@ SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Release; }; - 9EE56814351073FAF485CD524B8A1E19 /* Profile */ = { + A62975698736F0105E0037D21BA79BBB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */; + baseConfigurationReference = 839BB12438C2C096A2A438810D182307 /* CocoaHTTPServer.debug.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/CocoaLumberjack/CocoaLumberjack-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/CocoaHTTPServer/CocoaHTTPServer-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaLumberjack; - PRODUCT_NAME = CocoaLumberjack; + PRODUCT_MODULE_NAME = CocoaHTTPServer; + PRODUCT_NAME = CocoaHTTPServer; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.8; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Profile; + name = Debug; }; - A0B46A221E3E56FAF655FDE5FFC1774E /* Debug */ = { + A8D702B6F6F56A5ABC41B8485E65852A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 682A6FCEC27897DEB0D430B5077B7C24 /* ASCIImage.debug.xcconfig */; + baseConfigurationReference = AED3FF866171BE6D1B84822B6AD1D03C /* Sentry.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/ASCIImage/ASCIImage-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Sentry/Sentry-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "SENTRY_NO_UIKIT=1", + ); + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; + MODULEMAP_FILE = Headers/Public/Sentry/Sentry.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ASCIImage; - PRODUCT_NAME = ASCIImage; + PRODUCT_MODULE_NAME = Sentry; + PRODUCT_NAME = Sentry; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.5; }; - name = Debug; + name = Release; }; - A23DCC1FAD0C1653E318F64E98D5E41B /* Debug */ = { + B25C65A1F25445A03E7175C76A4C5A19 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 839BB12438C2C096A2A438810D182307 /* CocoaHTTPServer.debug.xcconfig */; + baseConfigurationReference = 682A6FCEC27897DEB0D430B5077B7C24 /* ASCIImage.debug.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/CocoaHTTPServer/CocoaHTTPServer-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/ASCIImage/ASCIImage-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaHTTPServer; - PRODUCT_NAME = CocoaHTTPServer; + PRODUCT_MODULE_NAME = ASCIImage; + PRODUCT_NAME = ASCIImage; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Debug; + name = Profile; }; - B5AA2FB8C0911CD7031FD4B8DECD2FAB /* Release */ = { + B4DC8FC636E924601CADA1E24D89FD8E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D1C609420D7B4F4A83097742A69BB86E /* ASCIImage.release.xcconfig */; + baseConfigurationReference = AB750EFEFD0E374DF078145FF41774B0 /* Sparkle.debug.xcconfig */; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; ENABLE_NS_ASSERTIONS = YES; - EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/ASCIImage/ASCIImage-prefix.pch"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); MACOSX_DEPLOYMENT_TARGET = 13.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = ASCIImage; - PRODUCT_NAME = ASCIImage; - PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; }; - name = Release; + name = Debug; }; B71873917D0ED6E1C976C88704C05BF3 /* Debug */ = { isa = XCBuildConfiguration; @@ -5763,46 +6065,59 @@ }; name = Debug; }; - BA12386F66411A1D6EDA84986C09955A /* Profile */ = { + BC1A17B8A0713956A2B33E7855A2AFEF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A40744E74F20D172729FD70C1DC93565 /* Pods-Hammerspoon.profile.xcconfig */; + baseConfigurationReference = 0BFD0976454B209FBB8282EB93D35336 /* PocketSocket.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - MACH_O_TYPE = staticlib; + GCC_PREFIX_HEADER = "Target Support Files/PocketSocket/PocketSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - MODULEMAP_FILE = "Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = PocketSocket; + PRODUCT_NAME = PocketSocket; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Profile; + name = Debug; }; - CD5FC35F21DCD21A2A70B52906C4C324 /* Release */ = { + BDCB32E468E795C82BDFC483F3B70150 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F694C933B6EA4B00D70FB167F8452D36 /* Sentry.release.xcconfig */; + baseConfigurationReference = 839BB12438C2C096A2A438810D182307 /* CocoaHTTPServer.debug.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Sentry"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; - IBSC_MODULE = Sentry; - INFOPLIST_FILE = "Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/CocoaHTTPServer/CocoaHTTPServer-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; - PRODUCT_NAME = Sentry; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = CocoaHTTPServer; + PRODUCT_NAME = CocoaHTTPServer; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Release; + name = Profile; }; CE7A9C75F3FCA20BB70CA426E9B4E4FC /* Profile */ = { isa = XCBuildConfiguration; @@ -5870,31 +6185,34 @@ }; name = Profile; }; - D16E2D929A1DD59B5B2AE7D3C6CFBFC4 /* Debug */ = { + D8619B8C36C6555DEAD874E4E9DE7080 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9F051BC38B6E2DBC7610F5942CF80BD6 /* SocketRocket.debug.xcconfig */; + baseConfigurationReference = 32E6A74A3156E5EE30317B4653A10CB0 /* MIKMIDI.debug.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/MIKMIDI/MIKMIDI-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SocketRocket; - PRODUCT_NAME = SocketRocket; + PRODUCT_MODULE_NAME = MIKMIDI; + PRODUCT_NAME = MIKMIDI; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Debug; }; - DA29EF2CEF5CC0F25E7C82D8EECAA768 /* Debug */ = { + DA2E1C3A5CF7B1BD6D4C2EA3B7BE6DEF /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */; buildSettings = { @@ -5913,211 +6231,276 @@ }; name = Debug; }; - E72C4822CA1C45A67316373440F6076D /* Debug */ = { + E4F4C17F7DF0149A671629303D14E9AF /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AB750EFEFD0E374DF078145FF41774B0 /* Sparkle.debug.xcconfig */; + baseConfigurationReference = 5D6D6B8527C99A3626003480ADAB5D99 /* ORSSerialPort.debug.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - COMBINE_HIDPI_IMAGES = YES; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/ORSSerialPort/ORSSerialPort-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ORSSerial; + PRODUCT_NAME = ORSSerialPort; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; }; - name = Debug; + name = Profile; }; - EECFF5172A5765E397A5CC9585844D42 /* Release */ = { + EAE3D1680D798F8700464110687E5A93 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 13C059366E835989D34DEE142C564130 /* CocoaLumberjack.release.xcconfig */; + baseConfigurationReference = 976B6373B6050F75B5F22384B0FE1A73 /* Pods-Hammerspoon.release.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/CocoaLumberjack/CocoaLumberjack-prefix.pch"; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MODULEMAP_FILE = "Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + EEE7FE153A663DE703E18ABE9DCEFE8A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E81FC29C83D18A980D23CF2D8A344796 /* ORSSerialPort.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/ORSSerialPort/ORSSerialPort-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaLumberjack; - PRODUCT_NAME = CocoaLumberjack; + PRODUCT_MODULE_NAME = ORSSerial; + PRODUCT_NAME = ORSSerialPort; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.8; + SWIFT_INSTALL_OBJC_HEADER = YES; }; name = Release; }; - F4F110A4B6D12223E15AF0059F34B732 /* Debug */ = { + EFE5A5A9C517637127DD30DFFAC1C7A2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 446B4CF957F3C0C801C5F70DBA29E7D1 /* CocoaAsyncSocket.debug.xcconfig */; + baseConfigurationReference = 42AC81B40B97DF56D08CB62B5AF871C6 /* Pods-Hammerspoon.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; EXECUTABLE_PREFIX = lib; - GCC_PREFIX_HEADER = "Target Support Files/CocoaAsyncSocket/CocoaAsyncSocket-prefix.pch"; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 13.0; + MODULEMAP_FILE = "Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + F9D263FE51E939DF98B396D72B4A06F9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5963CE4ED5DF209DB22E173273A64DF6 /* CocoaLumberjack.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_NS_ASSERTIONS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/CocoaLumberjack/CocoaLumberjack-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; MACOSX_DEPLOYMENT_TARGET = 13.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = CocoaAsyncSocket; - PRODUCT_NAME = CocoaAsyncSocket; + PRODUCT_MODULE_NAME = CocoaLumberjack; + PRODUCT_NAME = CocoaLumberjack; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.8; }; - name = Debug; + name = Profile; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 04B6A687169C3E116AD092944E8FD282 /* Build configuration list for PBXNativeTarget "MIKMIDI" */ = { + 0F7FC4F825AA745DBADE5157C3524581 /* Build configuration list for PBXNativeTarget "Pods-Hammerspoon" */ = { isa = XCConfigurationList; buildConfigurations = ( - 704851729066A3F16CEBAA56C37FA381 /* Debug */, - 5E1031519DA812ABF866CCE8FF52C2F2 /* Profile */, - 452084A909FB2BE5E0FE49FF45B3C647 /* Release */, + EFE5A5A9C517637127DD30DFFAC1C7A2 /* Debug */, + 165C27C972DA8F906303D8F6B992E76B /* Profile */, + EAE3D1680D798F8700464110687E5A93 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 05EEF490E75D4177CC632F7C841DD5BC /* Build configuration list for PBXNativeTarget "ORSSerialPort" */ = { + 1EA5BA88DB900271C1985A8F3132E29D /* Build configuration list for PBXNativeTarget "MIKMIDI" */ = { isa = XCConfigurationList; buildConfigurations = ( - 275A6A0C109DD2BEEF43FE27E9714D23 /* Debug */, - 054C5D8F175EAE73FE8E50E41BCB2C0B /* Profile */, - 8D606B9BA3D92C8E924E089D0E583522 /* Release */, + D8619B8C36C6555DEAD874E4E9DE7080 /* Debug */, + 2E12AB086D8339F7B965FD1EDA58FB09 /* Profile */, + 1644BABC52EB1D07198302A3AAF020B6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 0AFC659E74200C20AE52A49DE8DC8817 /* Build configuration list for PBXNativeTarget "CocoaAsyncSocket" */ = { + 22FCD60B5505615F8126577DA5A80316 /* Build configuration list for PBXNativeTarget "PocketSocket" */ = { isa = XCConfigurationList; buildConfigurations = ( - F4F110A4B6D12223E15AF0059F34B732 /* Debug */, - 15DB7492AB178924DF87D7B483312302 /* Profile */, - 98E35C8667C39D0328B85F37CF82444D /* Release */, + BC1A17B8A0713956A2B33E7855A2AFEF /* Debug */, + 7D644E9BF6111D91CB3B10742E7CEC02 /* Profile */, + 910CB51E7DEA6E02B1C3A9665112C87B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2B68FF68BD2B7D7B6D76ECB8B45402AD /* Build configuration list for PBXNativeTarget "CocoaHTTPServer" */ = { + 27618C86EC535704D0F1A7BC5C490F1F /* Build configuration list for PBXNativeTarget "SocketRocket" */ = { isa = XCConfigurationList; buildConfigurations = ( - A23DCC1FAD0C1653E318F64E98D5E41B /* Debug */, - 835BCCEAB1E7470E3B79B881A4E29E38 /* Profile */, - 462289DEFE6AF66AAE40DBC7C8F5CFB0 /* Release */, + 0B0D8021214BCD963F3F56CEDC17EED2 /* Debug */, + 72A15AEC078F8CF61C9716766D5D2256 /* Profile */, + 0444AE06D73721D218399EEF3D45B217 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D6090864D20A1FFF3E63ABF54079DD2 /* Build configuration list for PBXNativeTarget "CocoaLumberjack" */ = { + 32148AD0D8DFCE60770A00B1370F344D /* Build configuration list for PBXNativeTarget "Sentry" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1CF7292B3F82F178FAF33EF002212C84 /* Debug */, - 9EE56814351073FAF485CD524B8A1E19 /* Profile */, - EECFF5172A5765E397A5CC9585844D42 /* Release */, + 152F42FE599BC83FFF21FBDAC1888BB1 /* Debug */, + 8F0E6017E6BADC5007FA905560E40844 /* Profile */, + A8D702B6F6F56A5ABC41B8485E65852A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + 34F9C93F3A770AE98CEF6933DC4D9B21 /* Build configuration list for PBXNativeTarget "ASCIImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - B71873917D0ED6E1C976C88704C05BF3 /* Debug */, - CE7A9C75F3FCA20BB70CA426E9B4E4FC /* Profile */, - 930E226C21F64A571D1CB76E18AB1F7D /* Release */, + 42411345F487C056C25463265A00B1F7 /* Debug */, + B25C65A1F25445A03E7175C76A4C5A19 /* Profile */, + 590EA38FD0E5F319EDB8D029584B949F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5429302C3A1387B69841B3555032FBF9 /* Build configuration list for PBXNativeTarget "Sentry-Sentry" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 645BF19318AA1997E83984F58C2FADA8 /* Debug */, - 4BC411C130D0CA204260E8256DE72CBC /* Profile */, - CD5FC35F21DCD21A2A70B52906C4C324 /* Release */, + B71873917D0ED6E1C976C88704C05BF3 /* Debug */, + CE7A9C75F3FCA20BB70CA426E9B4E4FC /* Profile */, + 930E226C21F64A571D1CB76E18AB1F7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5C01ED195F55EB14EB60F564A79328C3 /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */ = { + 48BE55049CD6A15D7C95A556FF88AF70 /* Build configuration list for PBXNativeTarget "CocoaAsyncSocket" */ = { isa = XCConfigurationList; buildConfigurations = ( - DA29EF2CEF5CC0F25E7C82D8EECAA768 /* Debug */, - 7D95E80A89A22791E504979D8C0020F6 /* Profile */, - 7A67160A8E999CBB8F3AF283058CE920 /* Release */, + 22E81969E3E93E979D06680CA50FD8CB /* Debug */, + 6F874A3198CEF82A7EDDC0DF37BFEBAB /* Profile */, + 9D5A737D1E1EEDEE7E0BB9966A6F2054 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 61721BB03D331B1840B009E83F802328 /* Build configuration list for PBXNativeTarget "PocketSocket" */ = { + 96BAB02D08D8984F43AC9FEAAD356D81 /* Build configuration list for PBXNativeTarget "CocoaHTTPServer" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9725115EE0D48A4BD7BD9054339C6EF9 /* Debug */, - 70103D49FA3421DD925ABF710681B39E /* Profile */, - 47062D7D4D53660AA946D6AEDCA4E0DB /* Release */, + A62975698736F0105E0037D21BA79BBB /* Debug */, + BDCB32E468E795C82BDFC483F3B70150 /* Profile */, + 27ED7E0C6967CC703E5993A11253CA90 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7098E1B8812EF1847D8F730F8D17A787 /* Build configuration list for PBXNativeTarget "ASCIImage" */ = { + 9A52699C3429BCEDD2B7FF67082F32E0 /* Build configuration list for PBXNativeTarget "CocoaLumberjack" */ = { isa = XCConfigurationList; buildConfigurations = ( - A0B46A221E3E56FAF655FDE5FFC1774E /* Debug */, - 0B6B77B0752CECE826E22CFAF3243099 /* Profile */, - B5AA2FB8C0911CD7031FD4B8DECD2FAB /* Release */, + 08BE7EF8089D2ED8C39D8065988A5A75 /* Debug */, + F9D263FE51E939DF98B396D72B4A06F9 /* Profile */, + 0CC3345CBEE840B1628CDCB91975F9A1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AE8C58F18A3A8AE69F366674D0C0B27B /* Build configuration list for PBXNativeTarget "Pods-Hammerspoon" */ = { + B684CA759B891E702C8C9EA3F2B4573E /* Build configuration list for PBXNativeTarget "ORSSerialPort" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6EE9047286AA1118E13C29B5D3098D74 /* Debug */, - BA12386F66411A1D6EDA84986C09955A /* Profile */, - 4FCE2320EAC074142EE84CC8BED6A868 /* Release */, + 8DAB881E7FE222C1A094ABDCE06B1C17 /* Debug */, + E4F4C17F7DF0149A671629303D14E9AF /* Profile */, + EEE7FE153A663DE703E18ABE9DCEFE8A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BA6136ACE1E250A44C0B62B635656E78 /* Build configuration list for PBXNativeTarget "SocketRocket" */ = { + DFD76CF3BA88B1E29302E27ACFBF9960 /* Build configuration list for PBXAggregateTarget "Sparkle" */ = { isa = XCConfigurationList; buildConfigurations = ( - D16E2D929A1DD59B5B2AE7D3C6CFBFC4 /* Debug */, - 7067A0B9F4E6F24F2303A45B3B5DC0AB /* Profile */, - 53501BD4808A2F5F9A2B7F832A33C681 /* Release */, + B4DC8FC636E924601CADA1E24D89FD8E /* Debug */, + 3286E07118F4174AD451BC34F32C3FB3 /* Profile */, + 9D156F18A8C26F45FF9D683ECB5F94A3 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DF056DA25BC7C0D683012738627EEA95 /* Build configuration list for PBXNativeTarget "Sentry" */ = { + EDA75518194F2C81B301E2548DE30D54 /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - 07E359AFB5B76CAF8515BB836ADCCA49 /* Debug */, - 4CB2FA1BB05294E2C2876DD169ABACE2 /* Profile */, - 593450329C0BD9BB2A5CF706990ADDEA /* Release */, + DA2E1C3A5CF7B1BD6D4C2EA3B7BE6DEF /* Debug */, + 15B454C9A21872BF31DD5BD2FC0532A8 /* Profile */, + 10322045D0CA4E40BAA37E4D67C0DCE4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DFD76CF3BA88B1E29302E27ACFBF9960 /* Build configuration list for PBXAggregateTarget "Sparkle" */ = { + F3F0CCECB430E649FF388433A50EBB6E /* Build configuration list for PBXNativeTarget "Sentry-Sentry" */ = { isa = XCConfigurationList; buildConfigurations = ( - E72C4822CA1C45A67316373440F6076D /* Debug */, - 6EB733D69A06B162F9AAE1C991CC4982 /* Profile */, - 09C63D416D74C08185A967D37FDB701E /* Release */, + 3D7EA2AEC2F43FA02F45F5C19E3685E4 /* Debug */, + 62E6B6139DEB80FE3A8A45B8A53A005E /* Profile */, + 5DF9F6E3A70E348FCC2EFF2D7C9B98A9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Sentry/LICENSE.md b/Pods/Sentry/LICENSE.md index 95b14dbf9..6b2b8e3e4 100644 --- a/Pods/Sentry/LICENSE.md +++ b/Pods/Sentry/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015-2024 Sentry +Copyright (c) 2015 Sentry Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/Pods/Sentry/README.md b/Pods/Sentry/README.md index aa3082199..c1aa5c3f5 100644 --- a/Pods/Sentry/README.md +++ b/Pods/Sentry/README.md @@ -16,17 +16,25 @@ _Bad software is everywhere, and we're tired of it. Sentry is on a mission to he [![SwiftPM compatible](https://img.shields.io/badge/spm-compatible-brightgreen.svg?style=flat)](https://swift.org/package-manager) ![platforms](https://img.shields.io/cocoapods/p/Sentry.svg?style=flat) [![Swift Package Index](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fgetsentry%2Fsentry-cocoa%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/getsentry/sentry-cocoa) -[![Discord Chat](https://img.shields.io/discord/621778831602221064?logo=discord&logoColor=ffffff&color=7389D8)](https://discord.gg/PXa5Apfe7K) +[![Discord Chat](https://img.shields.io/discord/621778831602221064?logo=discord&logoColor=ffffff&color=7389D8)](https://discord.gg/PXa5Apfe7K) This SDK is written in Objective-C but also provides a nice Swift interface. +# Releases + +This repo uses the following ways to release SDK updates: + +- `Pre-release`: We create pre-releases (alpha, beta, RC,…) for larger and potentially more impactful changes, such as new features or major versions. +- `Latest`: We continuously release major/minor/hotfix versions from the `main` branch. These releases go through all our internal quality gates and are very safe to use and intended to be the default for most teams. +- `Stable`: We promote releases from `Latest` when they have been used in the field for some time and in scale, considering time since release, adoption, and other quality and stability metrics. These releases will be indicated on the [releases page](https://github.com/getsentry/sentry-cocoa/releases/) with the `Stable` suffix. + **Where is the master branch?** We renamed the default branch from `master` to `main`. # Initialization -*Remember to call this as early in your application life cycle as possible* +_Remember to call this as early in your application life cycle as possible_ Ideally in `applicationDidFinishLaunching` in `AppDelegate` ```swift @@ -37,7 +45,7 @@ import Sentry SentrySDK.start { options in options.dsn = "___PUBLIC_DSN___" options.debug = true // Helpful to see what's going on -} +} ``` ```objc @@ -49,7 +57,6 @@ SentrySDK.start { options in options.dsn = @"___PUBLIC_DSN___"; options.debug = @YES; // Helpful to see what's going on }]; - ``` For more information checkout the [docs](https://docs.sentry.io/platforms/apple). @@ -68,9 +75,9 @@ For more information checkout the [docs](https://docs.sentry.io/platforms/apple) # Resources -* [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/apple/) -* [![Discussions](https://img.shields.io/github/discussions/getsentry/sentry-cocoa.svg)](https://github.com/getsentry/sentry-cocoa/discussions) -* [![Discord Chat](https://img.shields.io/discord/621778831602221064?logo=discord&logoColor=ffffff&color=7389D8)](https://discord.gg/PXa5Apfe7K) -* [![Stack Overflow](https://img.shields.io/badge/stack%20overflow-sentry-green.svg)](http://stackoverflow.com/questions/tagged/sentry) -* [![Code of Conduct](https://img.shields.io/badge/code%20of%20conduct-sentry-green.svg)](https://github.com/getsentry/.github/blob/master/CODE_OF_CONDUCT.md) -* [![Twitter Follow](https://img.shields.io/twitter/follow/getsentry?label=getsentry&style=social)](https://twitter.com/intent/follow?screen_name=getsentry) +- [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/apple/) +- [![Discussions](https://img.shields.io/github/discussions/getsentry/sentry-cocoa.svg)](https://github.com/getsentry/sentry-cocoa/discussions) +- [![Discord Chat](https://img.shields.io/discord/621778831602221064?logo=discord&logoColor=ffffff&color=7389D8)](https://discord.gg/PXa5Apfe7K) +- [![Stack Overflow](https://img.shields.io/badge/stack%20overflow-sentry-green.svg)](http://stackoverflow.com/questions/tagged/sentry) +- [![Code of Conduct](https://img.shields.io/badge/code%20of%20conduct-sentry-green.svg)](https://github.com/getsentry/.github/blob/master/CODE_OF_CONDUCT.md) +- [![Twitter Follow](https://img.shields.io/twitter/follow/getsentry?label=getsentry&style=social)](https://twitter.com/intent/follow?screen_name=getsentry) diff --git a/Pods/Sentry/Sources/Sentry/NSLocale+Sentry.m b/Pods/Sentry/Sources/Sentry/NSLocale+Sentry.m index 19eaaed98..42740905e 100644 --- a/Pods/Sentry/Sources/Sentry/NSLocale+Sentry.m +++ b/Pods/Sentry/Sources/Sentry/NSLocale+Sentry.m @@ -14,4 +14,10 @@ + (BOOL)timeIs24HourFormat return is24Hour; } ++ (BOOL)isRightToLeftLanguage +{ + return [NSLocale characterDirectionForLanguage:NSLocale.currentLocale.languageCode] + == NSLocaleLanguageDirectionRightToLeft; +} + @end diff --git a/Pods/Sentry/Sources/Sentry/PrivateSentrySDKOnly.mm b/Pods/Sentry/Sources/Sentry/PrivateSentrySDKOnly.mm index 7b867c9d7..822f0920b 100644 --- a/Pods/Sentry/Sources/Sentry/PrivateSentrySDKOnly.mm +++ b/Pods/Sentry/Sources/Sentry/PrivateSentrySDKOnly.mm @@ -8,20 +8,21 @@ #import "SentryInstallation.h" #import "SentryInternalDefines.h" #import "SentryMeta.h" -#import "SentryOptions.h" +#import "SentryOptions+Private.h" +#import "SentryPropagationContext.h" #import "SentrySDK+Private.h" #import "SentrySerialization.h" -#import "SentrySessionReplayIntegration.h" +#import "SentrySessionReplayIntegration+Private.h" #import "SentrySwift.h" #import "SentryThreadHandle.hpp" #import "SentryUser+Private.h" #import "SentryViewHierarchy.h" #import #import +#import #import #import #import -#import #import #if SENTRY_TARGET_PROFILING_SUPPORTED @@ -61,8 +62,11 @@ + (nullable SentryEnvelope *)envelopeWithData:(NSData *)data + (NSArray *)getDebugImagesCrashed:(BOOL)isCrash { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return [[SentryDependencyContainer sharedInstance].debugImageProvider getDebugImagesCrashed:isCrash]; +#pragma clang diagnostic pop } + (nullable SentryAppStartMeasurement *)appStartMeasurement @@ -186,11 +190,24 @@ + (NSString *)getSdkVersionString return SentryMeta.versionString; } ++ (void)addSdkPackage:(nonnull NSString *)name version:(nonnull NSString *)version +{ + [SentryExtraPackages addPackageName:name version:version]; +} + + (NSDictionary *)getExtraContext { return [SentryDependencyContainer.sharedInstance.extraContextProvider getExtraContext]; } ++ (void)setTrace:(SentryId *)traceId spanId:(SentrySpanId *)spanId +{ + [SentrySDK.currentHub configureScope:^(SentryScope *scope) { + scope.propagationContext = [[SentryPropagationContext alloc] initWithTraceId:traceId + spanId:spanId]; + }]; +} + #if SENTRY_TARGET_PROFILING_SUPPORTED + (uint64_t)startProfilerForTrace:(SentryId *)traceId; { @@ -218,7 +235,7 @@ + (uint64_t)startProfilerForTrace:(SentryId *)traceId; + (void)discardProfilerForTrace:(SentryId *)traceId; { - sentry_discardProfilerForTracer(traceId); + sentry_discardProfilerCorrelatedToTrace(traceId, SentrySDK.currentHub); } #endif // SENTRY_TARGET_PROFILING_SUPPORTED @@ -272,8 +289,8 @@ + (SentryScreenFrames *)currentScreenFrames + (NSArray *)captureScreenshots { -#if SENTRY_HAS_UIKIT - return [SentryDependencyContainer.sharedInstance.screenshot appScreenshots]; +#if SENTRY_TARGET_REPLAY_SUPPORTED + return [SentryDependencyContainer.sharedInstance.screenshot appScreenshotsData]; #else SENTRY_LOG_DEBUG( @"PrivateSentrySDKOnly.captureScreenshots only works with UIKit enabled. Ensure you're " @@ -313,6 +330,12 @@ + (SentryBreadcrumb *)breadcrumbWithDictionary:(NSDictionary *)dictionary } #if SENTRY_TARGET_REPLAY_SUPPORTED + ++ (UIView *)sessionReplayMaskingOverlay:(id)options +{ + return [[SentryMaskingPreviewView alloc] initWithRedactOptions:options]; +} + + (nullable SentrySessionReplayIntegration *)getReplayIntegration { @@ -351,13 +374,31 @@ + (NSString *__nullable)getReplayId + (void)addReplayIgnoreClasses:(NSArray *_Nonnull)classes { - [SentryViewPhotographer.shared addIgnoreClasses:classes]; + [[PrivateSentrySDKOnly getReplayIntegration].viewPhotographer addIgnoreClasses:classes]; } + (void)addReplayRedactClasses:(NSArray *_Nonnull)classes { - [SentryViewPhotographer.shared addRedactClasses:classes]; + [[PrivateSentrySDKOnly getReplayIntegration].viewPhotographer addRedactClasses:classes]; +} + ++ (void)setIgnoreContainerClass:(Class _Nonnull)containerClass +{ + [[PrivateSentrySDKOnly getReplayIntegration].viewPhotographer + setIgnoreContainerClass:containerClass]; } + ++ (void)setRedactContainerClass:(Class _Nonnull)containerClass +{ + [[PrivateSentrySDKOnly getReplayIntegration].viewPhotographer + setRedactContainerClass:containerClass]; +} + ++ (void)setReplayTags:(NSDictionary *)tags +{ + [[PrivateSentrySDKOnly getReplayIntegration] setReplayTags:tags]; +} + #endif @end diff --git a/Pods/Sentry/Sources/Sentry/Processors/SentryWatchdogTerminationBreadcrumbProcessor.m b/Pods/Sentry/Sources/Sentry/Processors/SentryWatchdogTerminationBreadcrumbProcessor.m new file mode 100644 index 000000000..033d86033 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/Processors/SentryWatchdogTerminationBreadcrumbProcessor.m @@ -0,0 +1,120 @@ +#import "SentryWatchdogTerminationBreadcrumbProcessor.h" +#import "SentryFileManager.h" +#import "SentryLog.h" +#import "SentrySerialization.h" + +@interface SentryWatchdogTerminationBreadcrumbProcessor () + +@property (strong, nonatomic) SentryFileManager *fileManager; + +@property (strong, nonatomic) NSFileHandle *fileHandle; +@property (strong, nonatomic) NSString *activeFilePath; +@property (nonatomic) NSInteger maxBreadcrumbs; +@property (nonatomic) NSInteger breadcrumbCounter; + +@end + +@implementation SentryWatchdogTerminationBreadcrumbProcessor + +- (instancetype)initWithMaxBreadcrumbs:(NSInteger)maxBreadcrumbs + fileManager:(SentryFileManager *)fileManager +{ + if (self = [super init]) { + self.fileManager = fileManager; + + self.breadcrumbCounter = 0; + self.maxBreadcrumbs = maxBreadcrumbs; + + [self switchFileHandle]; + } + + return self; +} + +- (void)dealloc +{ + [self.fileHandle closeFile]; +} + +- (void)addSerializedBreadcrumb:(NSDictionary *)crumb +{ + SENTRY_LOG_DEBUG(@"Adding breadcrumb: %@", crumb); + NSData *_Nullable jsonData = [SentrySerialization dataWithJSONObject:crumb]; + if (jsonData == nil) { + SENTRY_LOG_ERROR(@"Error serializing breadcrumb to JSON"); + return; + } + [self storeBreadcrumb:jsonData]; +} + +- (void)clear +{ + [self clearBreadcrumbs]; +} + +- (void)clearBreadcrumbs +{ + [self deleteFiles]; + [self switchFileHandle]; +} + +// MARK: - Helpers + +- (void)switchFileHandle +{ + if ([self.activeFilePath isEqualToString:self.fileManager.breadcrumbsFilePathOne]) { + self.activeFilePath = self.fileManager.breadcrumbsFilePathTwo; + } else { + self.activeFilePath = self.fileManager.breadcrumbsFilePathOne; + } + + // Close the current filehandle (if any) + [self.fileHandle closeFile]; + + // Create a fresh file for the new active path + [self.fileManager removeFileAtPath:self.activeFilePath]; + [[NSFileManager defaultManager] createFileAtPath:self.activeFilePath + contents:nil + attributes:nil]; + + // Open the file for writing + self.fileHandle = [NSFileHandle fileHandleForWritingAtPath:self.activeFilePath]; + + if (!self.fileHandle) { + SENTRY_LOG_ERROR(@"Couldn't open file handle for %@", self.activeFilePath); + } +} + +- (void)deleteFiles +{ + [self.fileHandle closeFile]; + self.fileHandle = nil; + self.activeFilePath = nil; + self.breadcrumbCounter = 0; + + [self.fileManager removeFileAtPath:self.fileManager.breadcrumbsFilePathOne]; + [self.fileManager removeFileAtPath:self.fileManager.breadcrumbsFilePathTwo]; +} + +- (void)storeBreadcrumb:(NSData *_Nonnull)data +{ + unsigned long long fileSize; + @try { + fileSize = [self.fileHandle seekToEndOfFile]; + + [self.fileHandle writeData:data]; + [self.fileHandle writeData:[@"\n" dataUsingEncoding:NSASCIIStringEncoding]]; + + self.breadcrumbCounter += 1; + } @catch (NSException *exception) { + SENTRY_LOG_ERROR(@"Error while writing data to end file with size (%llu): %@ ", fileSize, + exception.description); + } @finally { + if (self.breadcrumbCounter >= self.maxBreadcrumbs) { + [self switchFileHandle]; + self.breadcrumbCounter = 0; + } + } +} + +@end diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryContinuousProfiler.mm b/Pods/Sentry/Sources/Sentry/Profiling/SentryContinuousProfiler.mm index 30a2d41a7..7f8819d02 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryContinuousProfiler.mm +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryContinuousProfiler.mm @@ -24,6 +24,8 @@ # pragma mark - Private +NSTimeInterval kSentryProfilerChunkExpirationInterval = 60; + namespace { /** @warning: Must be used from a synchronized context. */ std::mutex _threadUnsafe_gContinuousProfilerLock; @@ -79,6 +81,15 @@ ); [SentrySDK captureEnvelope:envelope]; } + +void +_sentry_unsafe_stopTimerAndCleanup() +{ + disableTimer(); + + [_threadUnsafe_gContinuousCurrentProfiler stopForReason:SentryProfilerTruncationReasonNormal]; + _threadUnsafe_gContinuousCurrentProfiler = nil; +} } // namespace @implementation SentryContinuousProfiler @@ -90,6 +101,8 @@ + (void)start { std::lock_guard l(_threadUnsafe_gContinuousProfilerLock); + _stopCalled = NO; + if ([_threadUnsafe_gContinuousCurrentProfiler isRunning]) { SENTRY_LOG_DEBUG(@"A continuous profiler is already running."); return; @@ -101,8 +114,6 @@ + (void)start return; } - _stopCalled = NO; - static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _profileSessionID = [[SentryId alloc] init]; }); _threadUnsafe_gContinuousCurrentProfiler.profilerId = _profileSessionID; @@ -136,16 +147,29 @@ + (BOOL)isCurrentlyProfiling + (void)stop { - { - std::lock_guard l(_threadUnsafe_gContinuousProfilerLock); + std::lock_guard l(_threadUnsafe_gContinuousProfilerLock); - if (![_threadUnsafe_gContinuousCurrentProfiler isRunning]) { - SENTRY_LOG_DEBUG(@"No continuous profiler is currently running."); - return; - } + if (![_threadUnsafe_gContinuousCurrentProfiler isRunning]) { + SENTRY_LOG_DEBUG(@"No continuous profiler is currently running."); + return; + } - _stopCalled = YES; +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) + // we want to allow immediately stopping a continuous profile for a UI test, since those + // currently only test launch profiles, and there is no reliable way to make the UI test + // wait until the continuous profile chunk would finish (behavior introduced in + // https://github.com/getsentry/sentry-cocoa/pull/4214). we just want to look in its samples + // for a call to main() + if ([NSProcessInfo.processInfo.arguments + containsObject:@"--io.sentry.continuous-profiler-immediate-stop"]) { + _sentry_threadUnsafe_transmitChunkEnvelope(); + _sentry_unsafe_stopTimerAndCleanup(); + return; } +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) + + SENTRY_LOG_DEBUG(@"Stopping continuous profiler after current chunk completes."); + _stopCalled = YES; } + (nullable SentryId *)currentProfilerID @@ -196,6 +220,9 @@ + (void)timerExpired } } + SENTRY_LOG_DEBUG( + @"Last continuous profile chunk transmitted after stop called, shutting down profiler."); + # if SENTRY_HAS_UIKIT if (_observerToken != nil) { [SentryDependencyContainer.sharedInstance.notificationCenterWrapper @@ -209,22 +236,18 @@ + (void)timerExpired + (void)stopTimerAndCleanup { std::lock_guard l(_threadUnsafe_gContinuousProfilerLock); - - disableTimer(); - - [_threadUnsafe_gContinuousCurrentProfiler stopForReason:SentryProfilerTruncationReasonNormal]; - _threadUnsafe_gContinuousCurrentProfiler = nil; + _sentry_unsafe_stopTimerAndCleanup(); } # pragma mark - Testing -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) + (nullable SentryProfiler *)profiler { std::lock_guard l(_threadUnsafe_gContinuousProfilerLock); return _threadUnsafe_gContinuousCurrentProfiler; } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) @end diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryLaunchProfiling.m b/Pods/Sentry/Sources/Sentry/Profiling/SentryLaunchProfiling.m index e3af3a4ef..9e61dc6da 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryLaunchProfiling.m +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryLaunchProfiling.m @@ -15,9 +15,10 @@ # import "SentrySamplerDecision.h" # import "SentrySampling.h" # import "SentrySamplingContext.h" +# import "SentrySpanOperation.h" # import "SentrySwift.h" # import "SentryTime.h" -# import "SentryTraceOrigins.h" +# import "SentryTraceOrigin.h" # import "SentryTracer+Private.h" # import "SentryTracerConfiguration.h" # import "SentryTransactionContext+Private.h" @@ -26,8 +27,14 @@ BOOL isProfilingAppLaunch; NSString *const kSentryLaunchProfileConfigKeyTracesSampleRate = @"traces"; +NSString *const kSentryLaunchProfileConfigKeyTracesSampleRand = @"traces.sample_rand"; NSString *const kSentryLaunchProfileConfigKeyProfilesSampleRate = @"profiles"; +NSString *const kSentryLaunchProfileConfigKeyProfilesSampleRand = @"profiles.sample_rand"; NSString *const kSentryLaunchProfileConfigKeyContinuousProfiling = @"continuous-profiling"; +NSString *const kSentryLaunchProfileConfigKeyContinuousProfilingV2 + = @"continuous-profiling-v2-enabled"; +NSString *const kSentryLaunchProfileConfigKeyContinuousProfilingV2Lifecycle + = @"continuous-profiling-v2-lifecycle"; static SentryTracer *_Nullable launchTracer; # pragma mark - Private @@ -35,12 +42,15 @@ SentryTracer *_Nullable sentry_launchTracer; SentryTracerConfiguration * -sentry_config(NSNumber *profilesRate) +sentry_configForLaunchProfilerForTrace( + NSNumber *profilesRate, NSNumber *profilesRand, SentryProfileOptions *_Nullable profileOptions) { SentryTracerConfiguration *config = [SentryTracerConfiguration defaultConfiguration]; config.profilesSamplerDecision = [[SentrySamplerDecision alloc] initWithDecision:kSentrySampleDecisionYes - forSampleRate:profilesRate]; + forSampleRate:profilesRate + withSampleRand:profilesRand]; + config.profileOptions = profileOptions; return config; } @@ -48,72 +58,146 @@ typedef struct { BOOL shouldProfile; - /** Only needed for trace launch profiling; unused with continuous profiling. */ + /** Only needed for trace launch profiling or continuous profiling v2 with trace lifecycle; + * unused with continuous profiling. */ SentrySamplerDecision *_Nullable tracesDecision; SentrySamplerDecision *_Nullable profilesDecision; } SentryLaunchProfileConfig; SentryLaunchProfileConfig -sentry_shouldProfileNextLaunch(SentryOptions *options) +sentry_launchShouldHaveTransactionProfiling(SentryOptions *options) { - if (options.enableAppLaunchProfiling && [options isContinuousProfilingEnabled]) { - return (SentryLaunchProfileConfig) { YES, nil, nil }; - } # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" BOOL shouldProfileNextLaunch = options.enableAppLaunchProfiling && options.enableTracing; if (!shouldProfileNextLaunch) { - SENTRY_LOG_DEBUG(@"Won't profile next launch due to specified options configuration: " - @"options.enableAppLaunchProfiling: %d; options.enableTracing: %d", + SENTRY_LOG_DEBUG(@"Specified options configuration doesn't enable launch profiling: " + @"options.enableAppLaunchProfiling: %d; options.enableTracing: %d; won't " + @"profile launch", options.enableAppLaunchProfiling, options.enableTracing); return (SentryLaunchProfileConfig) { NO, nil, nil }; } # pragma clang diagnostic pop + SentryTransactionContext *transactionContext = [[SentryTransactionContext alloc] initWithName:@"app.launch" operation:@"profile"]; transactionContext.forNextAppLaunch = YES; SentrySamplingContext *context = [[SentrySamplingContext alloc] initWithTransactionContext:transactionContext]; - SentrySamplerDecision *tracesSamplerDecision = sentry_sampleTrace(context, options); if (tracesSamplerDecision.decision != kSentrySampleDecisionYes) { - SENTRY_LOG_DEBUG(@"Sampling out the launch trace."); + SENTRY_LOG_DEBUG( + @"Sampling out the launch trace for transaction profiling; won't profile launch."); return (SentryLaunchProfileConfig) { NO, nil, nil }; } SentrySamplerDecision *profilesSamplerDecision = sentry_sampleTraceProfile(context, tracesSamplerDecision, options); if (profilesSamplerDecision.decision != kSentrySampleDecisionYes) { - SENTRY_LOG_DEBUG(@"Sampling out the launch trace profile."); + SENTRY_LOG_DEBUG( + @"Sampling out the launch profile for transaction profiling; won't profile launch."); return (SentryLaunchProfileConfig) { NO, nil, nil }; } - SENTRY_LOG_DEBUG(@"Will start trace profile next launch."); + SENTRY_LOG_DEBUG(@"Will start transaction profile next launch; will profile launch."); return (SentryLaunchProfileConfig) { YES, tracesSamplerDecision, profilesSamplerDecision }; } +SentryLaunchProfileConfig +sentry_launchShouldHaveContinuousProfilingV2(SentryOptions *options) +{ + if (!options.profiling.profileAppStarts) { + SENTRY_LOG_DEBUG(@"Continuous profiling v2 enabled but disabled app start profiling, " + @"won't profile launch."); + return (SentryLaunchProfileConfig) { NO, nil, nil }; + } + if (options.profiling.lifecycle == SentryProfileLifecycleTrace) { + if (!options.isTracingEnabled) { + SENTRY_LOG_DEBUG(@"Continuous profiling v2 enabled for trace lifecycle but tracing is " + @"disabled, won't profile launch."); + SENTRY_LOG_WARN( + @"Tracing must be enabled in order to configure app start profiling with trace " + @"lifecycle. See SentryOptions.tracesSampleRate and SentryOptions.tracesSampler."); + return (SentryLaunchProfileConfig) { NO, nil, nil }; + } + + SentryTransactionContext *transactionContext = + [[SentryTransactionContext alloc] initWithName:@"app.launch" operation:@"profile"]; + transactionContext.forNextAppLaunch = YES; + SentrySamplingContext *context = + [[SentrySamplingContext alloc] initWithTransactionContext:transactionContext]; + SentrySamplerDecision *tracesSamplerDecision = sentry_sampleTrace(context, options); + if (tracesSamplerDecision.decision != kSentrySampleDecisionYes) { + SENTRY_LOG_DEBUG(@"Sampling out the launch trace for continuous profile v2 trace " + @"lifecycle, won't profile launch."); + return (SentryLaunchProfileConfig) { NO, nil, nil }; + } + + SentrySamplerDecision *profileSamplerDecision + = sentry_sampleProfileSession(options.profiling.sessionSampleRate); + if (profileSamplerDecision.decision != kSentrySampleDecisionYes) { + SENTRY_LOG_DEBUG( + @"Sampling out continuous v2 trace lifecycle profile, won't profile launch."); + return (SentryLaunchProfileConfig) { NO, nil, nil }; + } + + SENTRY_LOG_DEBUG( + @"Continuous profiling v2 trace lifecycle conditions satisfied, will profile launch."); + return (SentryLaunchProfileConfig) { YES, tracesSamplerDecision, profileSamplerDecision }; + } + + SentrySamplerDecision *profileSampleDecision + = sentry_sampleProfileSession(options.profiling.sessionSampleRate); + if (profileSampleDecision.decision != kSentrySampleDecisionYes) { + SENTRY_LOG_DEBUG(@"Sampling out continuous v2 profile, won't profile launch."); + return (SentryLaunchProfileConfig) { NO, nil, nil }; + } + + SENTRY_LOG_DEBUG(@"Continuous profiling v2 conditions satisfied, will profile launch."); + return (SentryLaunchProfileConfig) { YES, nil, profileSampleDecision }; +} + +SentryLaunchProfileConfig +sentry_shouldProfileNextLaunch(SentryOptions *options) +{ + if ([options isContinuousProfilingV2Enabled]) { + return sentry_launchShouldHaveContinuousProfilingV2(options); + } + + if ([options isContinuousProfilingEnabled] && options.enableAppLaunchProfiling) { + return (SentryLaunchProfileConfig) { YES, nil, nil }; + } + + if ([options isContinuousProfilingEnabled]) { + return (SentryLaunchProfileConfig) { NO, nil, nil }; + } + + return sentry_launchShouldHaveTransactionProfiling(options); +} + SentryTransactionContext * -sentry_context(NSNumber *tracesRate) +sentry_contextForLaunchProfilerForTrace(NSNumber *tracesRate, NSNumber *tracesRand) { SentryTransactionContext *context = [[SentryTransactionContext alloc] initWithName:@"launch" nameSource:kSentryTransactionNameSourceCustom - operation:@"app.lifecycle" + operation:SentrySpanOperationAppLifecycle origin:SentryTraceOriginAutoAppStartProfile - sampled:kSentrySampleDecisionYes]; - context.sampleRate = tracesRate; + sampled:kSentrySampleDecisionYes + sampleRate:tracesRate + sampleRand:tracesRand]; return context; } # pragma mark - Testing only -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) BOOL sentry_willProfileNextLaunch(SentryOptions *options) { return sentry_shouldProfileNextLaunch(options).shouldProfile; } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) # pragma mark - Exposed only to tests @@ -121,6 +205,7 @@ _sentry_nondeduplicated_startLaunchProfile(void) { if (!appLaunchProfileConfigFileExists()) { + SENTRY_LOG_DEBUG(@"No launch profile config exists, will not profile launch."); return; } @@ -128,21 +213,69 @@ // quick and dirty way to get debug logging this early in the process run. this will get // overwritten once SentrySDK.startWithOptions is called according to the values of // SentryOptions.debug and SentryOptions.diagnosticLevel - [SentryLog configure:YES diagnosticLevel:kSentryLevelDebug]; + [SentryLogSwiftSupport configure:YES diagnosticLevel:kSentryLevelDebug]; # endif // defined(DEBUG) - NSDictionary *launchConfig = appLaunchProfileConfiguration(); + NSDictionary *launchConfig = sentry_appLaunchProfileConfiguration(); if ([launchConfig[kSentryLaunchProfileConfigKeyContinuousProfiling] boolValue]) { + SENTRY_LOG_DEBUG(@"Starting continuous launch profile v1."); [SentryContinuousProfiler start]; return; } + SentryProfileOptions *profileOptions = nil; + if ([launchConfig[kSentryLaunchProfileConfigKeyContinuousProfilingV2] boolValue]) { + SENTRY_LOG_DEBUG(@"Starting continuous launch profile v2."); + NSNumber *lifecycleValue + = launchConfig[kSentryLaunchProfileConfigKeyContinuousProfilingV2Lifecycle]; + if (lifecycleValue == nil) { + SENTRY_TEST_FATAL( + @"Missing expected launch profile config parameter for lifecycle. Will " + @"not proceed with launch profile."); + return; + } + + SentryProfileLifecycle lifecycle = lifecycleValue.intValue; + if (lifecycle == SentryProfileLifecycleManual) { + NSNumber *sampleRate = launchConfig[kSentryLaunchProfileConfigKeyProfilesSampleRate]; + NSNumber *sampleRand = launchConfig[kSentryLaunchProfileConfigKeyProfilesSampleRand]; + + if (sampleRate == nil || sampleRand == nil) { + SENTRY_TEST_FATAL( + @"Tried to start a continuous profile v2 with no configured sample " + @"rate/rand. Will not run profiler."); + return; + } + + SentrySamplerDecision *decision = + [[SentrySamplerDecision alloc] initWithDecision:kSentrySampleDecisionYes + forSampleRate:sampleRate + withSampleRand:sampleRand]; + sentry_profilerSessionSampleDecision = decision; + + [SentryContinuousProfiler start]; + return; + } + + profileOptions = [[SentryProfileOptions alloc] init]; + profileOptions.lifecycle = lifecycle; + profileOptions.profileAppStarts = true; + } + NSNumber *profilesRate = launchConfig[kSentryLaunchProfileConfigKeyProfilesSampleRate]; if (profilesRate == nil) { SENTRY_LOG_DEBUG(@"Received a nil configured launch profile sample rate, will not " @"start trace profiler for launch."); return; } + profileOptions.sessionSampleRate = profilesRate.floatValue; + + NSNumber *profilesRand = launchConfig[kSentryLaunchProfileConfigKeyProfilesSampleRand]; + if (profilesRate == nil) { + SENTRY_LOG_DEBUG(@"Received a nil configured launch profile sample rand, will not " + @"start trace profiler for launch."); + return; + } NSNumber *tracesRate = launchConfig[kSentryLaunchProfileConfigKeyTracesSampleRate]; if (tracesRate == nil) { @@ -151,12 +284,29 @@ return; } - SENTRY_LOG_INFO(@"Starting app launch trace profile at %llu.", getAbsoluteTime()); + NSNumber *tracesRand = launchConfig[kSentryLaunchProfileConfigKeyTracesSampleRand]; + if (tracesRate == nil) { + SENTRY_LOG_DEBUG(@"Received a nil configured launch trace sample rand, will not start " + @"trace profiler for launch."); + return; + } + + SENTRY_LOG_INFO(@"Starting app launch trace profile at %llu.", + [SentryDefaultCurrentDateProvider getAbsoluteTime]); sentry_isTracingAppLaunch = YES; - sentry_launchTracer = - [[SentryTracer alloc] initWithTransactionContext:sentry_context(tracesRate) - hub:nil - configuration:sentry_config(profilesRate)]; + + SentryTransactionContext *context + = sentry_contextForLaunchProfilerForTrace(tracesRate, tracesRand); + SentryTracerConfiguration *config + = sentry_configForLaunchProfilerForTrace(profilesRate, profilesRand, profileOptions); + SentrySamplerDecision *decision = + [[SentrySamplerDecision alloc] initWithDecision:kSentrySampleDecisionYes + forSampleRate:profilesRate + withSampleRand:profilesRand]; + sentry_profilerSessionSampleDecision = decision; + sentry_launchTracer = [[SentryTracer alloc] initWithTransactionContext:context + hub:nil + configuration:config]; } # pragma mark - Public @@ -169,6 +319,7 @@ [SentryDependencyContainer.sharedInstance.dispatchQueueWrapper dispatchAsyncWithBlock:^{ SentryLaunchProfileConfig config = sentry_shouldProfileNextLaunch(options); if (!config.shouldProfile) { + SENTRY_LOG_DEBUG(@"Removing launch profile config file."); removeAppLaunchProfilingConfigFile(); return; } @@ -176,12 +327,35 @@ NSMutableDictionary *configDict = [NSMutableDictionary dictionary]; if ([options isContinuousProfilingEnabled]) { - configDict[kSentryLaunchProfileConfigKeyContinuousProfiling] = @YES; + if ([options isContinuousProfilingV2Enabled]) { + SENTRY_LOG_DEBUG(@"Configuring continuous launch profile v2."); + configDict[kSentryLaunchProfileConfigKeyContinuousProfilingV2] = @YES; + configDict[kSentryLaunchProfileConfigKeyContinuousProfilingV2Lifecycle] = + @(options.profiling.lifecycle); + if (options.profiling.lifecycle == SentryProfileLifecycleTrace) { + configDict[kSentryLaunchProfileConfigKeyTracesSampleRate] + = config.tracesDecision.sampleRate; + configDict[kSentryLaunchProfileConfigKeyTracesSampleRand] + = config.tracesDecision.sampleRand; + } + configDict[kSentryLaunchProfileConfigKeyProfilesSampleRate] + = config.profilesDecision.sampleRate; + configDict[kSentryLaunchProfileConfigKeyProfilesSampleRand] + = config.profilesDecision.sampleRand; + } else { + SENTRY_LOG_DEBUG(@"Configuring continuous launch profile."); + configDict[kSentryLaunchProfileConfigKeyContinuousProfiling] = @YES; + } } else { + SENTRY_LOG_DEBUG(@"Configuring trace launch profile."); configDict[kSentryLaunchProfileConfigKeyTracesSampleRate] = config.tracesDecision.sampleRate; + configDict[kSentryLaunchProfileConfigKeyTracesSampleRand] + = config.tracesDecision.sampleRand; configDict[kSentryLaunchProfileConfigKeyProfilesSampleRate] = config.profilesDecision.sampleRate; + configDict[kSentryLaunchProfileConfigKeyProfilesSampleRand] + = config.profilesDecision.sampleRand; } writeAppLaunchProfilingConfigFile(configDict); }]; diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfiledTracerConcurrency.mm b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfiledTracerConcurrency.mm index f809cbd1f..7c6d687d5 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfiledTracerConcurrency.mm +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfiledTracerConcurrency.mm @@ -2,13 +2,34 @@ #if SENTRY_TARGET_PROFILING_SUPPORTED +# import "SentryContinuousProfiler.h" # import "SentryInternalDefines.h" # import "SentryLog.h" +# import "SentryOptions+Private.h" # import "SentryProfiler+Private.h" # import "SentrySwift.h" # include +# import "SentryDependencyContainer.h" +# import "SentryDispatchQueueWrapper.h" +# import "SentryEvent+Private.h" +# import "SentryHub+Private.h" +# import "SentryInternalDefines.h" +# import "SentryLaunchProfiling.h" +# import "SentryLog.h" +# import "SentryOptions+Private.h" +# import "SentryProfiledTracerConcurrency.h" +# import "SentryProfiler+Private.h" +# import "SentryProfilerSerialization.h" +# import "SentryProfilerState.h" +# import "SentrySamplerDecision.h" +# import "SentrySwift.h" +# import "SentryTraceProfiler.h" +# import "SentryTracer+Private.h" +# import "SentryTransaction.h" + # if SENTRY_HAS_UIKIT +# import "SentryAppStartMeasurement.h" # import "SentryDependencyContainer.h" # import "SentryFramesTracker.h" # import "SentryScreenFrames.h" @@ -28,17 +49,20 @@ static NSMutableDictionary *_gTracersToProfilers; +static unsigned int _gInFlightRootSpans = 0; + namespace { +std::mutex _gStateLock; + /** * Remove a profiler from tracking given the id of the tracer it's associated with. * @warning Must be called from a synchronized context. */ void -_unsafe_cleanUpProfiler(SentryProfiler *profiler, NSString *tracerKey) +_unsafe_cleanUpTraceProfiler(SentryProfiler *profiler, NSString *tracerKey) { const auto profilerKey = profiler.profilerId.sentryIdString; - [_gTracersToProfilers removeObjectForKey:tracerKey]; _gProfilersToTracers[profilerKey] = @(_gProfilersToTracers[profilerKey].unsignedIntValue - 1); if ([_gProfilersToTracers[profilerKey] unsignedIntValue] == 0) { @@ -49,12 +73,74 @@ } } -} // namespace +/** + * Decrement number of root spans in flight and stop continuous profiler if there are none left. + * @warning Must be called from a synchronized context. + */ +void +_unsafe_cleanUpContinuousProfilerV2() +{ + if (_gInFlightRootSpans == 0) { + SENTRY_TEST_FATAL(@"Attempted to decrement count of root spans to less than zero."); + } else { + _gInFlightRootSpans -= 1; + } -std::mutex _gStateLock; + if (_gInFlightRootSpans == 0) { + SENTRY_LOG_DEBUG(@"Last root span ended, stopping profiler."); + [SentryContinuousProfiler stop]; + } else { + SENTRY_LOG_DEBUG(@"Waiting for remaining root spans to finish before stopping profiler."); + } +} + +void +sentry_trackRootSpanForContinuousProfilerV2() +{ + std::lock_guard l(_gStateLock); + + if (![SentryContinuousProfiler isCurrentlyProfiling] && _gInFlightRootSpans != 0) { + SENTRY_TEST_FATAL(@"Unbalanced tracking of root spans and profiler detected."); + return; + } + + [SentryContinuousProfiler start]; + _gInFlightRootSpans += 1; +} void -sentry_trackProfilerForTracer(SentryProfiler *profiler, SentryId *internalTraceId) +sentry_stopTrackingRootSpanForContinuousProfilerV2() +{ + std::lock_guard l(_gStateLock); + _unsafe_cleanUpContinuousProfilerV2(); +} + +SentryId *_Nullable _sentry_startContinuousProfilerV2ForTrace( + SentryProfileOptions *profileOptions, SentryTransactionContext *transactionContext) +{ + if (profileOptions.lifecycle != SentryProfileLifecycleTrace) { + return nil; + } + if (transactionContext.sampled != kSentrySampleDecisionYes) { + return nil; + } + + if (sentry_profilerSessionSampleDecision.decision != kSentrySampleDecisionYes) { + return nil; + } + + SentryId *profilerReferenceId = [[SentryId alloc] init]; + SENTRY_LOG_DEBUG( + @"Starting continuous profiler for root span tracer with profilerReferenceId %@", + profilerReferenceId.sentryIdString); + sentry_trackRootSpanForContinuousProfilerV2(); + return profilerReferenceId; +} + +} // namespace + +void +sentry_trackTransactionProfilerForTrace(SentryProfiler *profiler, SentryId *internalTraceId) { std::lock_guard l(_gStateLock); @@ -82,27 +168,44 @@ } void -sentry_discardProfilerForTracer(SentryId *internalTraceId) +sentry_discardProfilerCorrelatedToTrace(SentryId *internalTraceId, SentryHub *hub) { std::lock_guard l(_gStateLock); - SENTRY_CASSERT(_gTracersToProfilers != nil && _gProfilersToTracers != nil, - @"Structures should have already been initialized by the time they are being queried"); + if ([SentryContinuousProfiler isCurrentlyProfiling]) { + SENTRY_LOG_DEBUG(@"Stopping tracking discarded tracer with profileReferenceId %@", + internalTraceId.sentryIdString); + _unsafe_cleanUpContinuousProfilerV2(); + } else if (internalTraceId != nil) { + if ([hub.getClient.options isContinuousProfilingEnabled]) { + SENTRY_TEST_FATAL(@"Tracers are not tracked with continuous profiling V1."); + return; + } - const auto tracerKey = internalTraceId.sentryIdString; - const auto profiler = _gTracersToProfilers[tracerKey]; + if (_gTracersToProfilers == nil) { + SENTRY_TEST_FATAL(@"Tracer to profiler should have already been initialized by the " + @"time they are being queried"); + } - if (profiler == nil) { - return; - } + const auto tracerKey = internalTraceId.sentryIdString; + const auto profiler = _gTracersToProfilers[tracerKey]; + + if (profiler == nil) { + return; + } - _unsafe_cleanUpProfiler(profiler, tracerKey); + _unsafe_cleanUpTraceProfiler(profiler, tracerKey); # if SENTRY_HAS_UIKIT - if (_gProfilersToTracers.count == 0) { - [SentryDependencyContainer.sharedInstance.framesTracker resetProfilingTimestamps]; - } + if (_gProfilersToTracers == nil) { + SENTRY_TEST_FATAL(@"Profiler to tracer structure should have already been " + @"initialized by the time they are being queried"); + } + if (_gProfilersToTracers.count == 0) { + [SentryDependencyContainer.sharedInstance.framesTracker resetProfilingTimestamps]; + } # endif // SENTRY_HAS_UIKIT + } } SentryProfiler *_Nullable sentry_profilerForFinishedTracer(SentryId *internalTraceId) @@ -120,7 +223,7 @@ return nil; } - _unsafe_cleanUpProfiler(profiler, tracerKey); + _unsafe_cleanUpTraceProfiler(profiler, tracerKey); # if SENTRY_HAS_UIKIT profiler.screenFrameData = @@ -136,7 +239,123 @@ return profiler; } -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +void +sentry_stopProfilerDueToFinishedTransaction( + SentryHub *hub, SentryDispatchQueueWrapper *dispatchQueue, SentryTransaction *transaction, + BOOL isProfiling, NSDate *traceStartTimestamp, uint64_t startSystemTime +# if SENTRY_HAS_UIKIT + , + SentryAppStartMeasurement *appStartMeasurement +# endif // SENTRY_HAS_UIKIT +) +{ + if (isProfiling && [hub.getClient.options isContinuousProfilingV2Enabled] && + [hub.getClient.options isProfilingCorrelatedToTraces]) { + SENTRY_LOG_DEBUG(@"Stopping tracking root span tracer with profilerReferenceId %@", + transaction.trace.profilerReferenceID.sentryIdString); + sentry_stopTrackingRootSpanForContinuousProfilerV2(); + [hub captureTransaction:transaction withScope:hub.scope]; + return; + } + + if (!isProfiling) { + [hub captureTransaction:transaction withScope:hub.scope]; + return; + } + + NSDate *startTimestamp; + +# if SENTRY_HAS_UIKIT + if (appStartMeasurement != nil) { + startTimestamp = appStartMeasurement.runtimeInitTimestamp; + } +# endif // SENTRY_HAS_UIKIT + + if (startTimestamp == nil) { + startTimestamp = traceStartTimestamp; + } + if (!SENTRY_CASSERT_RETURN(startTimestamp != nil, + @"A transaction with a profile should have a start timestamp already. We will " + @"assign the current time but this will be incorrect.")) { + startTimestamp = [SentryDependencyContainer.sharedInstance.dateProvider date]; + } + + // if we have an app start span, use its app start timestamp. otherwise use the tracer's + // start system time as we currently do + SENTRY_LOG_DEBUG(@"Tracer start time: %llu", startSystemTime); + + transaction.startSystemTime = startSystemTime; +# if SENTRY_HAS_UIKIT + if (appStartMeasurement != nil) { + SENTRY_LOG_DEBUG(@"Assigning transaction start time as app start system time (%llu)", + appStartMeasurement.runtimeInitSystemTimestamp); + transaction.startSystemTime = appStartMeasurement.runtimeInitSystemTimestamp; + } +# endif // SENTRY_HAS_UIKIT + + [SentryTraceProfiler recordMetrics]; + transaction.endSystemTime = SentryDependencyContainer.sharedInstance.dateProvider.systemTime; + + const auto profiler = sentry_profilerForFinishedTracer(transaction.trace.profilerReferenceID); + if (!profiler) { + [hub captureTransaction:transaction withScope:hub.scope]; + return; + } + + // This code can run on the main thread, and the profile serialization can take a couple of + // milliseconds. Therefore, we move this to a background thread to avoid potentially + // blocking the main thread. + [dispatchQueue dispatchAsyncWithBlock:^{ + const auto profilingData = [profiler.state copyProfilingData]; + + const auto profileEnvelopeItem = sentry_traceProfileEnvelopeItem( + hub, profiler, profilingData, transaction, startTimestamp); + + if (!profileEnvelopeItem) { + [hub captureTransaction:transaction withScope:hub.scope]; + } else { + [hub captureTransaction:transaction + withScope:hub.scope + additionalEnvelopeItems:@[ profileEnvelopeItem ]]; + } + }]; +} + +SentryId *_Nullable sentry_startProfilerForTrace(SentryTracerConfiguration *configuration, + SentryHub *hub, SentryTransactionContext *transactionContext) +{ + if (configuration.profileOptions != nil) { + // launch profile; there's no hub to get options from, so they're read from the launch + // profile config file and packaged into the tracer configuration in the launch profile + // codepath + return _sentry_startContinuousProfilerV2ForTrace( + configuration.profileOptions, transactionContext); + } else if ([hub.getClient.options isContinuousProfilingV2Enabled]) { + // non launch profile + if (transactionContext.parentSpanId != nil) { + SENTRY_LOG_DEBUG(@"Not a root span, will not start automatically for trace lifecycle."); + return nil; + } + return _sentry_startContinuousProfilerV2ForTrace( + hub.getClient.options.profiling, transactionContext); + } else { + BOOL profileShouldBeSampled + = configuration.profilesSamplerDecision.decision == kSentrySampleDecisionYes; + BOOL isContinuousProfiling = [hub.client.options isContinuousProfilingEnabled]; + BOOL shouldStartNormalTraceProfile = !isContinuousProfiling && profileShouldBeSampled; + if (sentry_isTracingAppLaunch || shouldStartNormalTraceProfile) { + SentryId *internalID = [[SentryId alloc] init]; + if ([SentryTraceProfiler startWithTracer:internalID]) { + SENTRY_LOG_DEBUG(@"Started profiler for trace %@ with internal id %@", + transactionContext.traceId.sentryIdString, internalID.sentryIdString); + return internalID; + } + } + return nil; + } +} + +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) void sentry_resetConcurrencyTracking() { @@ -151,6 +370,6 @@ std::lock_guard l(_gStateLock); return [_gTracersToProfilers count]; } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) #endif // SENTRY_TARGET_PROFILING_SUPPORTED diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization+Test.h b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization+Test.h index cf75d8f69..7250a7fac 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization+Test.h +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization+Test.h @@ -2,11 +2,10 @@ #if SENTRY_TARGET_PROFILING_SUPPORTED -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) # import "SentryDefines.h" # import "SentryProfiler+Private.h" -# import @class SentryDebugMeta; @class SentryHub; @@ -36,6 +35,6 @@ SENTRY_EXTERN NSMutableDictionary *sentry_serializedTraceProfile NS_ASSUME_NONNULL_END -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) #endif // SENTRY_TARGET_PROFILING_SUPPORTED diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization.mm b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization.mm index eff964d19..72f4ccb9a 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization.mm +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerSerialization.mm @@ -4,8 +4,7 @@ # import "SentryClient+Private.h" # import "SentryDateUtils.h" -# import "SentryDebugImageProvider.h" -# import "SentryDebugMeta.h" +# import "SentryDebugImageProvider+HybridSDKs.h" # import "SentryDependencyContainer.h" # import "SentryDevice.h" # import "SentryEnvelope.h" @@ -13,12 +12,10 @@ # import "SentryEnvelopeItemType.h" # import "SentryEvent+Private.h" # import "SentryFormatter.h" -# import "SentryHub.h" # import "SentryInternalDefines.h" # import "SentryLog.h" # import "SentryMeta.h" # import "SentryMetricProfiler.h" -# import "SentryOptions.h" # import "SentryProfileTimeseries.h" # import "SentryProfiledTracerConcurrency.h" # import "SentryProfiler+Private.h" @@ -31,7 +28,6 @@ # import "SentryScope+Private.h" # import "SentrySerialization.h" # import "SentrySwift.h" -# import "SentryThread.h" # import "SentryTime.h" # import "SentryTracer+Private.h" # import "SentryTransaction.h" @@ -317,7 +313,7 @@ const auto chunkID = [[SentryId alloc] init]; const auto payload = sentry_serializedContinuousProfileChunk( profileID, chunkID, profileState, metricProfilerState, - [SentryDependencyContainer.sharedInstance.debugImageProvider getDebugImagesCrashed:NO], + [SentryDependencyContainer.sharedInstance.debugImageProvider getDebugImagesFromCache], SentrySDK.currentHub # if SENTRY_HAS_UIKIT , @@ -336,37 +332,36 @@ return nil; } -# if defined(TEST) || defined(TESTCI) + SENTRY_LOG_DEBUG(@"Transmitting continuous profile chunk."); + +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) // only write profile payloads to disk for UI tests if (NSProcessInfo.processInfo.environment[@"--io.sentry.ui-test.test-name"] != nil) { - sentry_writeProfileFile(JSONData); + sentry_writeProfileFile(JSONData, true /*continuous*/); } -# endif // defined(TEST) || defined(TESTCI) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) const auto header = [[SentryEnvelopeItemHeader alloc] initWithType:SentryEnvelopeItemTypeProfileChunk length:JSONData.length]; + header.platform = @"cocoa"; const auto envelopeItem = [[SentryEnvelopeItem alloc] initWithHeader:header data:JSONData]; return [[SentryEnvelope alloc] initWithId:chunkID singleItem:envelopeItem]; } -SentryEnvelopeItem *_Nullable sentry_traceProfileEnvelopeItem( +SentryEnvelopeItem *_Nullable sentry_traceProfileEnvelopeItem(SentryHub *hub, + SentryProfiler *profiler, NSDictionary *profilingData, SentryTransaction *transaction, NSDate *startTimestamp) { - SENTRY_LOG_DEBUG(@"Creating profiling envelope item"); - const auto profiler = sentry_profilerForFinishedTracer(transaction.trace.internalID); - if (!profiler) { - return nil; - } - + const auto images = + [SentryDependencyContainer.sharedInstance.debugImageProvider getDebugImagesFromCache]; const auto payload = sentry_serializedTraceProfileData( - [profiler.state copyProfilingData], transaction.startSystemTime, transaction.endSystemTime, + profilingData, transaction.startSystemTime, transaction.endSystemTime, sentry_profilerTruncationReasonName(profiler.truncationReason), [profiler.metricProfiler serializeTraceProfileMetricsBetween:transaction.startSystemTime and:transaction.endSystemTime], - [SentryDependencyContainer.sharedInstance.debugImageProvider getDebugImagesCrashed:NO], - transaction.trace.hub + images, hub # if SENTRY_HAS_UIKIT , profiler.screenFrameData @@ -393,9 +388,9 @@ return nil; } -# if defined(TEST) || defined(TESTCI) - sentry_writeProfileFile(JSONData); -# endif // defined(TEST) || defined(TESTCI) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) + sentry_writeProfileFile(JSONData, false /*continuous*/); +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) const auto header = [[SentryEnvelopeItemHeader alloc] initWithType:SentryEnvelopeItemTypeProfile length:JSONData.length]; @@ -414,7 +409,7 @@ endSystemTime, sentry_profilerTruncationReasonName(profiler.truncationReason), [profiler.metricProfiler serializeTraceProfileMetricsBetween:startSystemTime and:endSystemTime], - [SentryDependencyContainer.sharedInstance.debugImageProvider getDebugImagesCrashed:NO], hub + [SentryDependencyContainer.sharedInstance.debugImageProvider getDebugImagesFromCache], hub # if SENTRY_HAS_UIKIT , profiler.screenFrameData diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerState.mm b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerState.mm index 437c9f235..2d9becb4a 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerState.mm +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerState.mm @@ -127,7 +127,7 @@ - (void)appendBacktrace:(const Backtrace &)backtrace const auto stack = [NSMutableArray array]; for (std::vector::size_type backtraceAddressIdx = 0; - backtraceAddressIdx < backtrace.addresses.size(); backtraceAddressIdx++) { + backtraceAddressIdx < backtrace.addresses.size(); backtraceAddressIdx++) { const auto instructionAddress = sentry_formatHexAddressUInt64(backtrace.addresses[backtraceAddressIdx]); const auto frameIndex = state.frameIndexLookup[instructionAddress]; diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerTestHelpers.m b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerTestHelpers.m index aeaf3997d..6ba57d70d 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerTestHelpers.m +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerTestHelpers.m @@ -21,27 +21,27 @@ return NO; } -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) void -sentry_writeProfileFile(NSData *JSONData) +sentry_writeProfileFile(NSData *JSONData, BOOL continuous) { NSFileManager *fm = [NSFileManager defaultManager]; - NSString *testProfileDirPath = - [sentryApplicationSupportPath() stringByAppendingPathComponent:@"profiles"]; + NSString *testProfileDirPath = [sentryStaticBasePath() + stringByAppendingPathComponent:continuous ? @"continuous-profiles" : @"trace-profiles"]; if (![fm fileExistsAtPath:testProfileDirPath]) { - SENTRY_LOG_DEBUG(@"Creating app support directory."); + SENTRY_LOG_DEBUG(@"Creating Sentry static cache directory."); NSError *error; if (!SENTRY_CASSERT_RETURN([fm createDirectoryAtPath:testProfileDirPath withIntermediateDirectories:YES attributes:nil error:&error], - @"Failed to create sentry app support directory")) { + @"Failed to create Sentry static cache directory")) { return; } } else { - SENTRY_LOG_DEBUG(@"App support directory already exists."); + SENTRY_LOG_DEBUG(@"Sentry static cache directory already exists."); } NSError *error; @@ -54,7 +54,7 @@ NSUInteger numberOfProfiles = [contents count]; NSString *pathToWrite = [testProfileDirPath stringByAppendingPathComponent:[NSString stringWithFormat:@"profile%lld", - (long long)numberOfProfiles]]; + (long long)numberOfProfiles]]; if ([fm fileExistsAtPath:pathToWrite]) { SENTRY_LOG_DEBUG(@"Already a profile file present; make sure to remove them right after " @@ -68,6 +68,6 @@ @"Failed to write data to path %@: %@", pathToWrite, error); } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) #endif // SENTRY_TARGET_PROFILING_SUPPORTED diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryTraceProfiler.mm b/Pods/Sentry/Sources/Sentry/Profiling/SentryTraceProfiler.mm index 636a6f65f..909bd7a7b 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryTraceProfiler.mm +++ b/Pods/Sentry/Sources/Sentry/Profiling/SentryTraceProfiler.mm @@ -9,11 +9,13 @@ # import "SentryNSTimerFactory.h" # import "SentryProfiledTracerConcurrency.h" # import "SentryProfiler+Private.h" +# import "SentrySwift.h" # include # pragma mark - Private NSTimer *_Nullable _sentry_threadUnsafe_traceProfileTimeoutTimer; +NSTimeInterval kSentryProfilerTimeoutInterval = 30; namespace { /** @warning: Must be used from a synchronized context. */ @@ -34,7 +36,7 @@ + (BOOL)startWithTracer:(SentryId *)traceId if ([_threadUnsafe_gTraceProfiler isRunning]) { SENTRY_LOG_DEBUG(@"A trace profiler is already running."); - sentry_trackProfilerForTracer(_threadUnsafe_gTraceProfiler, traceId); + sentry_trackTransactionProfilerForTrace(_threadUnsafe_gTraceProfiler, traceId); // record a new metric sample for every concurrent span start [_threadUnsafe_gTraceProfiler.metricProfiler recordMetrics]; return YES; @@ -48,7 +50,7 @@ + (BOOL)startWithTracer:(SentryId *)traceId } _threadUnsafe_gTraceProfiler.profilerId = [[SentryId alloc] init]; - sentry_trackProfilerForTracer(_threadUnsafe_gTraceProfiler, traceId); + sentry_trackTransactionProfilerForTrace(_threadUnsafe_gTraceProfiler, traceId); } [self scheduleTimeoutTimer]; @@ -112,7 +114,7 @@ + (void)timeoutTimerExpired # pragma mark - Testing helpers -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) + (SentryProfiler *_Nullable)getCurrentProfiler { return _threadUnsafe_gTraceProfiler; @@ -127,7 +129,7 @@ + (NSUInteger)currentProfiledTracers { return sentry_currentProfiledTracers(); } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) @end diff --git a/Pods/Sentry/Sources/Sentry/Public/Sentry.h b/Pods/Sentry/Sources/Sentry/Public/Sentry.h index 83d298589..8484ad34d 100644 --- a/Pods/Sentry/Sources/Sentry/Public/Sentry.h +++ b/Pods/Sentry/Sources/Sentry/Public/Sentry.h @@ -20,16 +20,19 @@ FOUNDATION_EXPORT const unsigned char SentryVersionString[]; # import # import # import +# import # import # import # import # import +# import # import # import # import # import # import # import +# import # import # import # import diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryAttachment.h b/Pods/Sentry/Sources/Sentry/Public/SentryAttachment.h index 47648b3e6..8b0e904fe 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryAttachment.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryAttachment.h @@ -1,4 +1,10 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryBaggage.h b/Pods/Sentry/Sources/Sentry/Public/SentryBaggage.h index e306060f3..54223b084 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryBaggage.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryBaggage.h @@ -45,6 +45,13 @@ NS_SWIFT_NAME(Baggage) */ @property (nullable, nonatomic, readonly) NSString *userSegment; +/** + * The random value used to determine if the trace is sampled. + * + * A float (`0.1234` notation) in the range of `[0, 1)` (including 0.0, excluding 1.0). + */ +@property (nullable, nonatomic, readonly) NSString *sampleRand; + /** * The sample rate. */ @@ -67,6 +74,17 @@ NS_SWIFT_NAME(Baggage) sampled:(nullable NSString *)sampled replayId:(nullable NSString *)replayId; +- (instancetype)initWithTraceId:(SentryId *)traceId + publicKey:(NSString *)publicKey + releaseName:(nullable NSString *)releaseName + environment:(nullable NSString *)environment + transaction:(nullable NSString *)transaction + userSegment:(nullable NSString *)userSegment + sampleRate:(nullable NSString *)sampleRate + sampleRand:(nullable NSString *)sampleRand + sampled:(nullable NSString *)sampled + replayId:(nullable NSString *)replayId; + - (NSString *)toHTTPHeaderWithOriginalBaggage:(NSDictionary *_Nullable)originalBaggage; @end diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryBreadcrumb.h b/Pods/Sentry/Sources/Sentry/Public/SentryBreadcrumb.h index d6a10b8ca..559d6a492 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryBreadcrumb.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryBreadcrumb.h @@ -1,7 +1,12 @@ #import - -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN @@ -21,23 +26,29 @@ NS_SWIFT_NAME(Breadcrumb) /** * @c NSDate when the breadcrumb happened */ -@property (nonatomic, strong) NSDate *_Nullable timestamp; +@property (nonatomic, strong, nullable) NSDate *timestamp; /** * Type of breadcrumb, can be e.g.: http, empty, user, navigation * This will be used as icon of the breadcrumb */ -@property (nonatomic, copy) NSString *_Nullable type; +@property (nonatomic, copy, nullable) NSString *type; /** * Message for the breadcrumb */ -@property (nonatomic, copy) NSString *_Nullable message; +@property (nonatomic, copy, nullable) NSString *message; + +/** + * Origin of the breadcrumb that is used to identify source of the breadcrumb + * For example hybrid SDKs can identify native breadcrumbs from JS or Flutter + */ +@property (nonatomic, copy, nullable) NSString *origin; /** * Arbitrary additional data that will be sent with the breadcrumb */ -@property (nonatomic, strong) NSDictionary *_Nullable data; +@property (nonatomic, strong, nullable) NSDictionary *data; /** * Initializer for @c SentryBreadcrumb diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryClient.h b/Pods/Sentry/Sources/Sentry/Public/SentryClient.h index facf674f3..e6e298512 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryClient.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryClient.h @@ -1,7 +1,19 @@ -#import "SentryDefines.h" - -@class SentryOptions, SentryEvent, SentryScope, SentryFileManager, SentryId, SentryUserFeedback, - SentryTransaction; +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif + +@class SentryEvent; +@class SentryFeedback; +@class SentryFileManager; +@class SentryId; +@class SentryOptions; +@class SentryScope; +@class SentryTransaction; +@class SentryUserFeedback; NS_ASSUME_NONNULL_BEGIN @@ -86,9 +98,19 @@ SENTRY_NO_INIT /** * Captures a manually created user feedback and sends it to Sentry. * @param userFeedback The user feedback to send to Sentry. + * @deprecated Use @c -[SentryClient @c captureFeedback:withScope:] . */ - (void)captureUserFeedback:(SentryUserFeedback *)userFeedback - NS_SWIFT_NAME(capture(userFeedback:)); + NS_SWIFT_NAME(capture(userFeedback:)) + DEPRECATED_MSG_ATTRIBUTE("Use -[SentryClient captureFeedback:withScope:]."); + +/** + * 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 *)feedback + withScope:(SentryScope *)scope NS_SWIFT_NAME(capture(feedback:scope:)); /** * Waits synchronously for the SDK to flush out all queued and cached items for up to the specified diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryCrashExceptionApplication.h b/Pods/Sentry/Sources/Sentry/Public/SentryCrashExceptionApplication.h index 44531561b..4eda2b780 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryCrashExceptionApplication.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryCrashExceptionApplication.h @@ -9,8 +9,5 @@ #if TARGET_OS_OSX # import @interface SentryCrashExceptionApplication : NSApplication -#else -@interface SentryCrashExceptionApplication : NSObject -#endif - @end +#endif diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryDebugImageProvider.h b/Pods/Sentry/Sources/Sentry/Public/SentryDebugImageProvider.h index 12c3f08a0..552ef8bd0 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryDebugImageProvider.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryDebugImageProvider.h @@ -1,6 +1,8 @@ #import -@class SentryDebugMeta, SentryThread, SentryFrame; +@class SentryDebugMeta; +@class SentryFrame; +@class SentryThread; NS_ASSUME_NONNULL_BEGIN @@ -31,7 +33,10 @@ NS_ASSUME_NONNULL_BEGIN * crash, each image's data section crash info is also included. */ - (NSArray *)getDebugImagesForThreads:(NSArray *)threads - isCrash:(BOOL)isCrash; + isCrash:(BOOL)isCrash + DEPRECATED_MSG_ATTRIBUTE("This method is slow and will be removed in a future version. Use " + "-[getDebugImagesFromCacheForThreads:] instead."); +; /** * Returns a list of debug images that are being referenced by the given frames. @@ -52,7 +57,9 @@ NS_ASSUME_NONNULL_BEGIN * crash, each image's data section crash info is also included. */ - (NSArray *)getDebugImagesForFrames:(NSArray *)frames - isCrash:(BOOL)isCrash; + isCrash:(BOOL)isCrash + DEPRECATED_MSG_ATTRIBUTE("This method is slow and will be removed in a future version. Use " + "-[getDebugImagesFromCacheForFrames:] instead."); /** * Returns the current list of debug images. Be aware that the @c SentryDebugMeta is actually @@ -71,8 +78,12 @@ NS_ASSUME_NONNULL_BEGIN * @param isCrash @c YES if we're collecting binary images for a crash report, @c NO if we're * gathering them for other backtrace information, like a performance transaction. If this is for a * crash, each image's data section crash info is also included. + * + * @warning This method is slow. Please consider using @c getDebugImagesFromCache. */ -- (NSArray *)getDebugImagesCrashed:(BOOL)isCrash; +- (NSArray *)getDebugImagesCrashed:(BOOL)isCrash + DEPRECATED_MSG_ATTRIBUTE("This method is slow and will be removed in a future version. Use " + "-[getDebugImagesFromCache:] instead."); @end diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryDebugMeta.h b/Pods/Sentry/Sources/Sentry/Public/SentryDebugMeta.h index 0f41f76ea..a451beff7 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryDebugMeta.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryDebugMeta.h @@ -1,6 +1,12 @@ #import - -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryDefines.h b/Pods/Sentry/Sources/Sentry/Public/SentryDefines.h index ca087667d..4c002843d 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryDefines.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryDefines.h @@ -1,5 +1,37 @@ #import +// 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 + +// Clang warns if a double quoted include is used instead of angle brackets in a public header +// These 3 import variations are how public headers can be imported with angle brackets +// for Sentry, SentryWithoutUIKit, and SPM +#if __has_include() +# define SENTRY_HEADER(file) +#elif __has_include() +# define SENTRY_HEADER(file) +#else +# define SENTRY_HEADER(file) +#endif + #ifdef __cplusplus # define SENTRY_EXTERN extern "C" __attribute__((visibility("default"))) #else @@ -60,7 +92,10 @@ # define SENTRY_HAS_REACHABILITY 0 #endif -@class SentryEvent, SentryBreadcrumb, SentrySamplingContext; +@class SentryBreadcrumb; +@class SentryEvent; +@class SentrySamplingContext; +@class SentryUserFeedbackConfiguration; @protocol SentrySpan; /** @@ -133,17 +168,8 @@ typedef NSNumber *_Nullable (^SentryTracesSamplerCallback)( * Function pointer for span manipulation. * @param span The span to be used. */ -typedef void (^SentrySpanCallback)(id _Nullable span); - -/** - * A callback block which gets called right before a metric is about to be emitted. - - * @param key The key of the metric. - * @param tags A dictionary of key-value pairs associated with the metric. - * @return BOOL YES if the metric should be emitted, NO otherwise. - */ -typedef BOOL (^SentryBeforeEmitMetricCallback)( - NSString *_Nonnull key, NSDictionary *_Nonnull tags); +typedef void (^SentrySpanCallback)(id _Nullable span DEPRECATED_MSG_ATTRIBUTE( + "See `SentryScope.useSpan` for reasoning of deprecation.")); /** * Log level. @@ -185,3 +211,14 @@ static NSString *_Nonnull const kSentryFalseString = @"false"; */ typedef NS_ENUM(NSInteger, SentryTransactionNameSource); // This is a forward declaration, the // actual enum is implemented in Swift. + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + +/** + * Block used to configure the user feedback widget, form, behaviors and submission data. + */ +API_AVAILABLE(ios(13.0)) +typedef void (^SentryUserFeedbackConfigurationBlock)( + SentryUserFeedbackConfiguration *_Nonnull configuration); + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryEnvelopeItemHeader.h b/Pods/Sentry/Sources/Sentry/Public/SentryEnvelopeItemHeader.h index 6fb43820d..3df7c324e 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryEnvelopeItemHeader.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryEnvelopeItemHeader.h @@ -1,4 +1,11 @@ -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN @@ -16,6 +23,11 @@ SENTRY_NO_INIT filenname:(NSString *)filename contentType:(NSString *)contentType; +- (instancetype)initWithType:(NSString *)type + length:(NSUInteger)length + contentType:(NSString *)contentType + itemCount:(NSNumber *)itemCount; + /** * The type of the envelope item. */ @@ -23,6 +35,13 @@ SENTRY_NO_INIT @property (nonatomic, readonly) NSUInteger length; @property (nonatomic, readonly, copy, nullable) NSString *filename; @property (nonatomic, readonly, copy, nullable) NSString *contentType; +@property (nonatomic, readonly, copy, nullable) NSNumber *itemCount; + +/** + * Some envelopes need to report the platform name for enhanced rate limiting functionality in + * relay. + */ +@property (nonatomic, copy, nullable) NSString *platform; @end diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryError.h b/Pods/Sentry/Sources/Sentry/Public/SentryError.h index 2dc46decb..e26bf0c7f 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryError.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryError.h @@ -1,4 +1,10 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryEvent.h b/Pods/Sentry/Sources/Sentry/Public/SentryEvent.h index 58d0e1ebc..cfbabd52c 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryEvent.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryEvent.h @@ -1,12 +1,25 @@ #import - -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN -@class SentryThread, SentryException, SentryStacktrace, SentryUser, SentryDebugMeta, SentryContext, - SentryBreadcrumb, SentryId, SentryMessage, SentryRequest; +@class SentryBreadcrumb; +@class SentryContext; +@class SentryDebugMeta; +@class SentryException; +@class SentryId; +@class SentryMessage; +@class SentryRequest; +@class SentryStacktrace; +@class SentryThread; +@class SentryUser; NS_SWIFT_NAME(Event) @interface SentryEvent : NSObject @@ -183,4 +196,24 @@ NS_SWIFT_NAME(Event) @end +/** + * Subclass of SentryEvent so we can add the Decodable implementation via a Swift extension. We need + * this due to our mixed use of public Swift and ObjC classes. We could avoid this class by + * converting SentryReplayEvent back to ObjC, but we rather accept this tradeoff as we want to + * convert all public classes to Swift in the future. This class needs to be public as we can't add + * the Decodable extension implementation to a class that is not public. + * + * @note: We can’t add the extension for Decodable directly on SentryEvent, because we get an error + * in SentryReplayEvent: 'required' initializer 'init(from:)' must be provided by subclass of + * 'Event' Once we add the initializer with required convenience public init(from decoder: any + * Decoder) throws { fatalError("init(from:) has not been implemented") + * } + * we get the error initializer 'init(from:)' is declared in extension of 'Event' and cannot be + * overridden. Therefore, we add the Decodable implementation not on the Event, but to a subclass of + * the event. + */ +@interface SentryEventDecodable : SentryEvent + +@end + NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryException.h b/Pods/Sentry/Sources/Sentry/Public/SentryException.h index 344566a90..a3d37a270 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryException.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryException.h @@ -1,11 +1,17 @@ #import - -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN -@class SentryStacktrace, SentryMechanism; +@class SentryMechanism; +@class SentryStacktrace; NS_SWIFT_NAME(Exception) @interface SentryException : NSObject diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryFeedbackAPI.h b/Pods/Sentry/Sources/Sentry/Public/SentryFeedbackAPI.h new file mode 100644 index 000000000..be068cef5 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/Public/SentryFeedbackAPI.h @@ -0,0 +1,38 @@ +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + +# import + +NS_ASSUME_NONNULL_BEGIN + +API_AVAILABLE(ios(13.0)) +@interface SentryFeedbackAPI : NSObject + +/** + * Show the feedback widget button. + * @warning This is an experimental feature and may still have bugs. + * @seealso See @c SentryOptions.configureUserFeedback to configure the widget. + * @note User feedback widget is only available for iOS 13 or later. + */ +- (void)showWidget API_AVAILABLE(ios(13.0)); + +/** + * Hide the feedback widget button. + * @warning This is an experimental feature and may still have bugs. + * @seealso See @c SentryOptions.configureUserFeedback to configure the widget. + * @note User feedback widget is only available for iOS 13 or later. + */ +- (void)hideWidget API_AVAILABLE(ios(13.0)); + +@end + +NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryFrame.h b/Pods/Sentry/Sources/Sentry/Public/SentryFrame.h index 0d40a76bf..5ec3057c2 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryFrame.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryFrame.h @@ -1,6 +1,12 @@ #import - -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryGeo.h b/Pods/Sentry/Sources/Sentry/Public/SentryGeo.h index ef63b737d..17de42719 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryGeo.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryGeo.h @@ -1,6 +1,12 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" #import +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryHttpStatusCodeRange.h b/Pods/Sentry/Sources/Sentry/Public/SentryHttpStatusCodeRange.h index ce50f0bb9..42057399e 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryHttpStatusCodeRange.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryHttpStatusCodeRange.h @@ -1,4 +1,10 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryHub.h b/Pods/Sentry/Sources/Sentry/Public/SentryHub.h index 355665825..02df7b764 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryHub.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryHub.h @@ -1,9 +1,22 @@ -#import "SentryDefines.h" -#import "SentrySpanProtocol.h" - -@class SentryEvent, SentryClient, SentryScope, SentryUser, SentryBreadcrumb, SentryId, - SentryUserFeedback, SentryTransactionContext; +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySpanProtocol) + +@class SentryBreadcrumb; +@class SentryClient; +@class SentryEvent; +@class SentryFeedback; +@class SentryId; @class SentryMetricsAPI; +@class SentryScope; +@class SentryTransactionContext; +@class SentryUser; +@class SentryUserFeedback; NS_ASSUME_NONNULL_BEGIN @interface SentryHub : NSObject @@ -163,9 +176,16 @@ SENTRY_NO_INIT /** * Captures a manually created user feedback and sends it to Sentry. * @param userFeedback The user feedback to send to Sentry. + * @deprecated Use @c -[SentryHub @c captureFeedback:] . + */ +- (void)captureUserFeedback:(SentryUserFeedback *)userFeedback NS_SWIFT_NAME(capture(userFeedback:)) + DEPRECATED_MSG_ATTRIBUTE("Use -[SentryHub captureFeedback:]."); + +/** + * Captures a new-style user feedback and sends it to Sentry. + * @param feedback The user feedback to send to Sentry. */ -- (void)captureUserFeedback:(SentryUserFeedback *)userFeedback - NS_SWIFT_NAME(capture(userFeedback:)); +- (void)captureFeedback:(SentryFeedback *)feedback; /** * Use this method to modify the Scope of the Hub. The SDK uses the Scope to attach diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryIntegrationProtocol.h b/Pods/Sentry/Sources/Sentry/Public/SentryIntegrationProtocol.h new file mode 100644 index 000000000..021d6a7ac --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/Public/SentryIntegrationProtocol.h @@ -0,0 +1,21 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class SentryOptions; + +@protocol SentryIntegrationProtocol + +/** + * Installs the integration and returns YES if successful. + */ +- (BOOL)installWithOptions:(SentryOptions *)options NS_SWIFT_NAME(install(with:)); + +/** + * Uninstalls the integration. + */ +- (void)uninstall; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryMeasurementUnit.h b/Pods/Sentry/Sources/Sentry/Public/SentryMeasurementUnit.h index 3e2183bcf..f39d1fcc4 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryMeasurementUnit.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryMeasurementUnit.h @@ -1,4 +1,10 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryMechanism.h b/Pods/Sentry/Sources/Sentry/Public/SentryMechanism.h index eb295e8dc..d2bf603d9 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryMechanism.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryMechanism.h @@ -1,11 +1,17 @@ #import - -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN -@class SentryNSError, SentryMechanismMeta; +@class SentryNSError; +@class SentryMechanismMeta; NS_SWIFT_NAME(Mechanism) @interface SentryMechanism : NSObject diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryMechanismMeta.h b/Pods/Sentry/Sources/Sentry/Public/SentryMechanismMeta.h index 6a0099667..9f6dff6ff 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryMechanismMeta.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryMechanismMeta.h @@ -1,6 +1,12 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" #import +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) @class SentryNSError; diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryMessage.h b/Pods/Sentry/Sources/Sentry/Public/SentryMessage.h index 68269a682..59af411a8 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryMessage.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryMessage.h @@ -1,6 +1,12 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" #import +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN @@ -15,7 +21,7 @@ SENTRY_NO_INIT /** * Returns a @c SentryMessage with setting formatted. * @param formatted The fully formatted message. If missing, Sentry will try to interpolate the - * message. It must not exceed 8192 characters. Longer messages will be truncated. + * message. The backend will truncate messages longer than 8192 characters. */ - (instancetype)initWithFormatted:(NSString *)formatted; diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryNSError.h b/Pods/Sentry/Sources/Sentry/Public/SentryNSError.h index a4e6fd8d5..c58d5422a 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryNSError.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryNSError.h @@ -1,6 +1,12 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" #import +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryOptions.h b/Pods/Sentry/Sources/Sentry/Public/SentryOptions.h index 9b549a326..4ca1f56d6 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryOptions.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryOptions.h @@ -1,11 +1,23 @@ -#import "SentryDefines.h" -#import "SentryProfilingConditionals.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentryProfilingConditionals) NS_ASSUME_NONNULL_BEGIN -@class SentryDsn, SentryMeasurementValue, SentryHttpStatusCodeRange, SentryScope, - SentryReplayOptions; +@class SentryDsn; @class SentryExperimentalOptions; +@class SentryHttpStatusCodeRange; +@class SentryMeasurementValue; +@class SentryReplayOptions; +#if SENTRY_TARGET_PROFILING_SUPPORTED +@class SentryProfileOptions; +#endif // SENTRY_TARGET_PROFILING_SUPPORTED +@class SentryScope; NS_SWIFT_NAME(Options) @interface SentryOptions : NSObject @@ -75,6 +87,27 @@ NS_SWIFT_NAME(Options) */ @property (nonatomic, assign) BOOL enableCrashHandler; +#if TARGET_OS_OSX + +/** + * When enabled, the SDK captures uncaught NSExceptions. As this feature uses swizzling, disabling + * @c enableSwizzling also disables this feature. + * + * @discussion This option registers the `NSApplicationCrashOnExceptions` 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 `SentryCrashExceptionApplication`. Either enable this + * feature or use the `SentryCrashExceptionApplication`. Having both enabled can lead to duplicated + * reports. + * + * @note Default value is @c NO . + */ +@property (nonatomic, assign) BOOL enableUncaughtNSExceptionReporting; + +#endif // TARGET_OS_OSX + #if !TARGET_OS_WATCH /** @@ -116,25 +149,27 @@ NS_SWIFT_NAME(Options) /** * This block can be used to modify the event before it will be serialized and sent. */ -@property (nullable, nonatomic, copy) SentryBeforeSendEventCallback beforeSend; +@property (nullable, nonatomic, copy) SentryBeforeSendEventCallback beforeSend NS_SWIFT_SENDABLE; /** * Use this callback to drop or modify a span before the SDK sends it to Sentry. Return @c nil to * drop the span. */ -@property (nullable, nonatomic, copy) SentryBeforeSendSpanCallback beforeSendSpan; +@property (nullable, nonatomic, copy) SentryBeforeSendSpanCallback beforeSendSpan NS_SWIFT_SENDABLE; /** * This block can be used to modify the event before it will be serialized and sent. */ -@property (nullable, nonatomic, copy) SentryBeforeBreadcrumbCallback beforeBreadcrumb; +@property (nullable, nonatomic, copy) + SentryBeforeBreadcrumbCallback beforeBreadcrumb NS_SWIFT_SENDABLE; /** * 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 (nullable, nonatomic, copy) SentryBeforeCaptureScreenshotCallback beforeCaptureScreenshot; +@property (nullable, nonatomic, copy) + SentryBeforeCaptureScreenshotCallback beforeCaptureScreenshot NS_SWIFT_SENDABLE; /** * You can use this callback to decide if the SDK should capture a view hierarchy or not. Return @c @@ -142,7 +177,7 @@ NS_SWIFT_NAME(Options) * work for crashes. */ @property (nullable, nonatomic, copy) - SentryBeforeCaptureScreenshotCallback beforeCaptureViewHierarchy; + SentryBeforeCaptureScreenshotCallback beforeCaptureViewHierarchy NS_SWIFT_SENDABLE; /** * A block called shortly after the initialization of the SDK when the last program execution @@ -154,7 +189,8 @@ NS_SWIFT_NAME(Options) * @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 (nullable, nonatomic, copy) SentryOnCrashedLastRunCallback onCrashedLastRun; +@property (nullable, nonatomic, copy) + SentryOnCrashedLastRunCallback onCrashedLastRun NS_SWIFT_SENDABLE; /** * Array of integrations to install. @@ -240,16 +276,25 @@ NS_SWIFT_NAME(Options) */ @property (nonatomic, assign) BOOL enableAutoPerformanceTracing; +/** + * We're working to update our Performance product offering in order to be able to provide better + * insights and highlight specific actions you can take to improve your mobile app's overall + * performance. The performanceV2 option changes the following behavior: The app start duration will + * now finish when the first frame is drawn instead of when the OS posts the + * UIWindowDidBecomeVisibleNotification. This change will be the default in the next major version. + */ +@property (nonatomic, assign) BOOL enablePerformanceV2; + /** * @warning This is an experimental feature and may still have bugs. * - * Sentry works on reworking the whole performance offering with the code Mobile Starfish, which - * aims to provide better insights into the performance of mobile apps and highlight clear actions - * to improve app performance to developers. This feature flag enables experimental features that - * impact the v1 performance offering and would require a major version update. Sentry aims to - * include most features in the next major by default. + * 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 NO . */ -@property (nonatomic, assign) BOOL enablePerformanceV2; +@property (nonatomic, assign) BOOL enablePersistingTracesWhenCrashing; /** * A block that configures the initial scope when starting the SDK. @@ -329,6 +374,15 @@ NS_SWIFT_NAME(Options) #endif // SENTRY_UIKIT_AVAILABLE +#if SENTRY_TARGET_REPLAY_SUPPORTED + +/** + * Settings to configure the session replay. + */ +@property (nonatomic, strong) SentryReplayOptions *sessionReplay; + +#endif // SENTRY_TARGET_REPLAY_SUPPORTED + /** * When enabled, the SDK tracks performance for HTTP requests if auto performance tracking and * @c enableSwizzling are enabled. @@ -374,7 +428,7 @@ NS_SWIFT_NAME(Options) * with @c SentrySamplingContext.forNextAppLaunch set to @c YES, and the result will be persisted to * disk for use on the next app launch. */ -@property (nullable, nonatomic) SentryTracesSamplerCallback tracesSampler; +@property (nullable, nonatomic) SentryTracesSamplerCallback tracesSampler NS_SWIFT_SENDABLE; /** * If tracing is enabled or not. @@ -441,17 +495,17 @@ NS_SWIFT_NAME(Options) @property (nonatomic, assign) BOOL enableSwizzling; /** - * An array of class names to ignore for swizzling. + * A set of class names to ignore for swizzling. * * @discussion 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. - * We can't use an @c NSArray here because we use this as a workaround for which users have + * We can't use an @c NSSet here because we use this as a workaround for which users have * to pass in class names that aren't available on specific iOS versions. By using @c - * NSArray, users can specify unavailable class names. + * NSSet, users can specify unavailable class names. * - * @note Default is an empty array. + * @note Default is an empty set. */ @property (nonatomic, strong) NSSet *swizzleClassNameExcludes; @@ -463,6 +517,20 @@ NS_SWIFT_NAME(Options) @property (nonatomic, assign) BOOL enableCoreDataTracing; #if SENTRY_TARGET_PROFILING_SUPPORTED +/** + * Block used to configure the continuous profiling options. + * @warning Continuous profiling is an experimental feature and may contain bugs. + * @seealso @c SentryProfileOptions, @c SentrySDK.startProfiler and @c SentrySDK.stopProfiler . + */ +typedef void (^SentryProfilingConfigurationBlock)(SentryProfileOptions *_Nonnull profiling); + +/** + * 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 (nullable, nonatomic, copy) SentryProfilingConfigurationBlock configureProfiling; + /** * @warning This is an experimental feature and may still have bugs. * Set to @c YES to run the profiler as early as possible in an app launch, before you would @@ -472,6 +540,8 @@ NS_SWIFT_NAME(Options) * @warning If @c profilesSampleRate is @c nil then a continuous profile will be started on every * launch; if you desire sampling profiled launches, you must compute your own sample rate to decide * whether to set this property to @c YES or @c NO . + * @warning This property is deprecated and will be removed in a future version of the SDK. See + * @c SentryProfileOptions.startOnAppStart and @c SentryProfileOptions.lifecycle . * @note Profiling is automatically disabled if a thread sanitizer is attached. */ @property (nonatomic, assign) BOOL enableAppLaunchProfiling; @@ -498,6 +568,8 @@ NS_SWIFT_NAME(Options) * @note The default is @c nil (which implies continuous profiling mode). * @warning The new continuous profiling mode is experimental and may still contain bugs. * @note Profiling is automatically disabled if a thread sanitizer is attached. + * @warning This property is deprecated and will be removed in a future version of the SDK. See + * @c SentryProfileOptions.sessionSampleRate. */ @property (nullable, nonatomic, strong) NSNumber *profilesSampleRate; @@ -510,8 +582,10 @@ NS_SWIFT_NAME(Options) * with @c SentrySamplingContext.forNextAppLaunch set to @c YES, and the result will be persisted to * disk for use on the next app launch. * @note Profiling is automatically disabled if a thread sanitizer is attached. + * @warning This property is deprecated and will be removed in a future version of the SDK. See + * @c SentryProfileOptions.sessionSampleRate . */ -@property (nullable, nonatomic) SentryTracesSamplerCallback profilesSampler; +@property (nullable, nonatomic) SentryTracesSamplerCallback profilesSampler NS_SWIFT_SENDABLE; /** * If profiling should be enabled or not. @@ -522,6 +596,7 @@ NS_SWIFT_NAME(Options) * @returns @c YES if either @c profilesSampleRate > @c 0 and \<= @c 1 , or @c profilesSampler is * set, otherwise @c NO. * @note Profiling is automatically disabled if a thread sanitizer is attached. + * @warning This property is deprecated and will be removed in a future version of the SDK. */ @property (nonatomic, assign, readonly) BOOL isProfilingEnabled; @@ -554,6 +629,38 @@ NS_SWIFT_NAME(Options) */ @property (nonatomic, assign) BOOL enableAppHangTracking; +#if SENTRY_UIKIT_AVAILABLE + +/** + * AppHangTrackingV2 can differentiate between fully-blocking and non-fully blocking app hangs. + * 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 This flag wins over enableAppHangTracking. When enabling both enableAppHangTracking and + enableAppHangTrackingV2, the SDK only enables enableAppHangTrackingV2 and disables + enableAppHangTracking. + */ +@property (nonatomic, assign) BOOL enableAppHangTrackingV2; + +/** + * When enabled the SDK reports non-fully-blocking app hangs. A non-fully-blocking app hang is when + * the app appears stuck to the user but can still render a few frames. For more information see @c + * enableAppHangTrackingV2. + * + * @note The default is @c YES. This feature only works when @c enableAppHangTrackingV2 is enabled. + */ +@property (nonatomic, assign) BOOL enableReportNonFullyBlockingAppHangs; + +#endif // SENTRY_UIKIT_AVAILABLE + /** * 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. @@ -676,42 +783,28 @@ NS_SWIFT_NAME(Options) @property (nonatomic, copy) NSString *spotlightUrl; /** - * Wether to enable DDM (delightful developer metrics) or not. For more information see - * https://docs.sentry.io/product/metrics/. - * - * @warning This is an experimental feature and may still have bugs. - * @note Default value is @c NO . + * This aggregates options for experimental features. + * Be aware that the options available for experimental can change at any time. */ -@property (nonatomic, assign) BOOL enableMetrics; +@property (nonatomic, readonly) SentryExperimentalOptions *experimental; -/** - * Wether to enable adding some default tags to every metrics or not. You need to enable @c - * enableMetrics for this flag to work. - * - * @warning This is an experimental feature and may still have bugs. - * @note Default value is @c YES . - */ -@property (nonatomic, assign) BOOL enableDefaultTagsForMetrics; +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT /** - * Wether to enable connecting metrics to spans and transactions or not. You need to enable @c - * enableMetrics for this flag to work. - * + * A block that can be defined that receives a user feedback configuration object to modify. * @warning This is an experimental feature and may still have bugs. - * @note Default value is @c YES . - */ -@property (nonatomic, assign) BOOL enableSpanLocalMetricAggregation; - -/** - * This block can be used to modify the event before it will be serialized and sent. - */ -@property (nullable, nonatomic, copy) SentryBeforeEmitMetricCallback beforeEmitMetric; - -/** - * This aggregates options for experimental features. - * Be aware that the options available for experimental can change at any time. - */ -@property (nonatomic, readonly) SentryExperimentalOptions *experimental; + * @note This is unrelated to @c SentrySDK.captureUserFeedback , which is the deprecated method of + * submitting user feedback you've already gathered via your own UI (see + * https://docs.sentry.io/platforms/apple/user-feedback/#user-feedback-api). The new strategy uses + * either this block to configure a widget and UI form to gather feedback, or directly submits + * feedback you've gathered using your own UI by calling the method @c SentrySDK.captureFeedback + * (se https://docs.sentry.io/platforms/apple/user-feedback/configuration/). + * @note User feedback widget is only available for iOS 13 or later. + */ +@property (nonatomic, copy, nullable) + SentryUserFeedbackConfigurationBlock configureUserFeedback API_AVAILABLE(ios(13.0)); + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT @end diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryProfilingConditionals.h b/Pods/Sentry/Sources/Sentry/Public/SentryProfilingConditionals.h index 3165d618a..c70e4f443 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryProfilingConditionals.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryProfilingConditionals.h @@ -4,8 +4,9 @@ #include // tvOS and watchOS do not support the kernel APIs required by our profiler -// e.g. mach_msg, thread_suspend, thread_resume -#if TARGET_OS_WATCH || TARGET_OS_TV +// e.g. mach_msg, thread_suspend, thread_resume; we haven't yet tested on +// visionOS +#if TARGET_OS_WATCH || TARGET_OS_TV || (defined(TARGET_OS_VISION) && TARGET_OS_VISION) # define SENTRY_TARGET_PROFILING_SUPPORTED 0 #else # define SENTRY_TARGET_PROFILING_SUPPORTED 1 diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryReplayApi.h b/Pods/Sentry/Sources/Sentry/Public/SentryReplayApi.h new file mode 100644 index 000000000..106537021 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/Public/SentryReplayApi.h @@ -0,0 +1,87 @@ +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif + +#if SENTRY_TARGET_REPLAY_SUPPORTED + +@class UIView; + +NS_ASSUME_NONNULL_BEGIN + +@interface SentryReplayApi : NSObject + +/** + * Marks this view to be masked during replays. + */ +- (void)maskView:(UIView *)view NS_SWIFT_NAME(maskView(_:)); + +/** + * Marks this view to not be masked during redact step of session replay. + */ +- (void)unmaskView:(UIView *)view NS_SWIFT_NAME(unmaskView(_:)); + +/** + * Pauses the replay. + */ +- (void)pause; + +/** + * Resumes the ongoing replay. + */ +- (void)resume; + +/** + * Start recording a session replay if not started. + */ +- (void)start; + +/** + * Stop the current session replay recording. + */ +- (void)stop; + +/** + * Shows an overlay on the app to debug session replay masking. + * + * By calling this function an overlay will appear covering the parts + * of the app that will be masked for the session replay. + * This will only work if the debbuger is attached and it will + * cause some slow frames. + * + * @warning This is an experimental feature and may still have bugs. + * Do not use this is production. + */ +- (void)showMaskPreview; + +/** + * Shows an overlay on the app to debug session replay masking. + * + * By calling this function an overlay will appear covering the parts + * of the app that will be masked for the session replay. + * This will only work if the debbuger is attached and it will + * cause some slow frames. + * + * @param opacity The opacity of the overlay. + * + * @warning This is an experimental feature and may still have bugs. + * Do not use this is production. + */ +- (void)showMaskPreview:(CGFloat)opacity; + +/** + * Removes the overlay that shows replay masking. + * + * @warning This is an experimental feature and may still have bugs. + * Do not use this is production. + */ +- (void)hideMaskPreview; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryRequest.h b/Pods/Sentry/Sources/Sentry/Public/SentryRequest.h index a036c7e3a..2a0dc3020 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryRequest.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryRequest.h @@ -1,5 +1,11 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentrySDK.h b/Pods/Sentry/Sources/Sentry/Public/SentrySDK.h index 9f728c263..bbad876d7 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentrySDK.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentrySDK.h @@ -1,10 +1,25 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif @protocol SentrySpan; -@class SentryOptions, SentryEvent, SentryBreadcrumb, SentryScope, SentryUser, SentryId, - SentryUserFeedback, SentryTransactionContext; +@class SentryBreadcrumb; +@class SentryEvent; +@class SentryFeedback; +@class SentryFeedbackAPI; +@class SentryId; @class SentryMetricsAPI; +@class SentryOptions; +@class SentryReplayApi; +@class SentryScope; +@class SentryTransactionContext; +@class SentryUser; +@class SentryUserFeedback; @class UIView; NS_ASSUME_NONNULL_BEGIN @@ -28,6 +43,13 @@ SENTRY_NO_INIT @property (class, nonatomic, readonly) SentryMetricsAPI *metrics; +#if SENTRY_TARGET_REPLAY_SUPPORTED +/** + * API to control session replay + */ +@property (class, nonatomic, readonly) SentryReplayApi *replay; +#endif + /** * Inits and configures Sentry (SentryHub, SentryClient) and sets up all integrations. Make sure to * set a valid DSN. @@ -232,11 +254,31 @@ SENTRY_NO_INIT NS_SWIFT_NAME(capture(message:block:)); /** - * Captures a manually created user feedback and sends it to Sentry. + * Captures user feedback that was manually gathered and sends it to Sentry. * @param userFeedback The user feedback to send to Sentry. + * @deprecated Use @c SentrySDK.captureFeedback or use or configure our new managed UX with + * @c SentryOptions.configureUserFeedback . */ + (void)captureUserFeedback:(SentryUserFeedback *)userFeedback - NS_SWIFT_NAME(capture(userFeedback:)); + NS_SWIFT_NAME(capture(userFeedback:)) DEPRECATED_MSG_ATTRIBUTE( + "Use SentrySDK.captureFeedback or use or configure our new managed UX with " + "SentryOptions.configureUserFeedback."); + +/** + * Captures user feedback that was manually gathered and sends it to Sentry. + * @warning This is an experimental feature and may still have bugs. + * @param feedback The feedback to send to Sentry. + * @note If you'd prefer not to have to build the UI required to gather the feedback from the user, + * see @c SentryOptions.configureUserFeedback to customize a fully managed integration. See + * https://docs.sentry.io/platforms/apple/user-feedback/ for more information. + */ ++ (void)captureFeedback:(SentryFeedback *)feedback NS_SWIFT_NAME(capture(feedback:)); + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + +@property (nonatomic, class, readonly) SentryFeedbackAPI *feedback API_AVAILABLE(ios(13.0)); + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT /** * Adds a Breadcrumb to the current Scope of the current Hub. If the total number of breadcrumbs @@ -270,6 +312,8 @@ SENTRY_NO_INIT /** * Set user to the current Scope of the current Hub. * @param user The user to set to the current Scope. + * + * @note You must start the SDK before calling this method, otherwise it doesn't set the user. */ + (void)setUser:(nullable SentryUser *)user; @@ -334,33 +378,26 @@ SENTRY_NO_INIT */ + (void)close; -#if SENTRY_TARGET_REPLAY_SUPPORTED - -/** - * @warning This is an experimental feature and may still have bugs. - * - * Marks this view to be redacted during replays. - */ -+ (void)replayRedactView:(UIView *)view; - -/** - * @warning This is an experimental feature and may still have bugs. - * - * Marks this view to be ignored during redact step - * of session replay. All its content will be visible in the replay. - */ -+ (void)replayIgnoreView:(UIView *)view; - -#endif - #if SENTRY_TARGET_PROFILING_SUPPORTED /** * Start a new continuous profiling session if one is not already running. - * @note Unlike trace-based profiling, continuous profiling does not take into account @c - * SentryOptions.profilesSampleRate ; a call to this method will always start a profile if one is - * not already running. This includes app launch profiles configured with @c - * SentryOptions.enableAppLaunchProfiling . * @warning Continuous profiling mode is experimental and may still contain bugs. + * @note Unlike transaction-based profiling, continuous profiling does not take into account + * @c SentryOptions.profilesSampleRate or @c SentryOptions.profilesSampler . If either of those + * options are set, this method does nothing. + * @note Taking into account the above note, if @c SentryOptions.configureProfiling is not set, + * calls to this method will always start a profile if one is not already running. This includes app + * launch profiles configured with @c SentryOptions.enableAppLaunchProfiling . + * @note If neither @c SentryOptions.profilesSampleRate nor @c SentryOptions.profilesSampler are + * set, and @c SentryOptions.configureProfiling is set, this method does nothing if the profiling + * session is not sampled with respect to @c SentryOptions.profileSessionSampleRate , or if it is + * sampled but the profiler is already running. + * @note If neither @c SentryOptions.profilesSampleRate nor @c SentryOptions.profilesSampler are + * set, and @c SentryOptions.configureProfiling is set, this method does nothing if + * @c SentryOptions.profileLifecycle is set to @c trace . 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; @@ -368,6 +405,13 @@ SENTRY_NO_INIT /** * 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 @c SentryOptions.profileLifecycle is set to @c trace . + * @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 @c startProfiler 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; diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryScope.h b/Pods/Sentry/Sources/Sentry/Public/SentryScope.h index 575baf8d0..23bc23bc8 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryScope.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryScope.h @@ -1,8 +1,17 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" -#import "SentrySpanProtocol.h" - -@class SentryUser, SentryOptions, SentryBreadcrumb, SentryAttachment; +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) +#import SENTRY_HEADER(SentrySpanProtocol) + +@class SentryAttachment; +@class SentryBreadcrumb; +@class SentryOptions; +@class SentryUser; NS_ASSUME_NONNULL_BEGIN @@ -149,7 +158,16 @@ NS_SWIFT_NAME(Scope) * Mutates the current transaction atomically. * @param callback the SentrySpanCallback. */ -- (void)useSpan:(SentrySpanCallback)callback; +- (void)useSpan:(SentrySpanCallback)callback + DEPRECATED_MSG_ATTRIBUTE( + "This method was used to create an atomic block that could be used to mutate the current " + "span. It is not atomic anymore and due to issues with memory safety in `NSBlock` it is " + "now considered unsafe and deprecated. Use `span` instead."); + +/** + * Returns the current span. + */ +- (id _Nullable)span; @end diff --git a/Pods/Sentry/Sources/Sentry/Public/SentrySerializable.h b/Pods/Sentry/Sources/Sentry/Public/SentrySerializable.h index 16d5fcf1e..974358882 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentrySerializable.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentrySerializable.h @@ -1,5 +1,11 @@ -#import "SentryDefines.h" #import +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentrySpanContext.h b/Pods/Sentry/Sources/Sentry/Public/SentrySpanContext.h index b8295ac95..5b65e9650 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentrySpanContext.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentrySpanContext.h @@ -1,11 +1,18 @@ -#import "SentryDefines.h" -#import "SentrySampleDecision.h" -#import "SentrySerializable.h" -#import "SentrySpanStatus.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySampleDecision) +#import SENTRY_HEADER(SentrySerializable) +#import SENTRY_HEADER(SentrySpanStatus) NS_ASSUME_NONNULL_BEGIN -@class SentryId, SentrySpanId; +@class SentryId; +@class SentrySpanId; static NSString const *SENTRY_TRACE_TYPE = @"trace"; diff --git a/Pods/Sentry/Sources/Sentry/Public/SentrySpanProtocol.h b/Pods/Sentry/Sources/Sentry/Public/SentrySpanProtocol.h index 4db933158..84605537c 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentrySpanProtocol.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentrySpanProtocol.h @@ -1,9 +1,20 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" -#import "SentrySpanContext.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) +#import SENTRY_HEADER(SentrySpanContext) + NS_ASSUME_NONNULL_BEGIN -@class SentrySpanId, SentryId, SentryTraceHeader, SentryMeasurementUnit, SentryTraceContext; +@class SentryId; +@class SentryMeasurementUnit; +@class SentrySpanId; +@class SentryTraceContext; +@class SentryTraceHeader; NS_SWIFT_NAME(Span) @protocol SentrySpan diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryStacktrace.h b/Pods/Sentry/Sources/Sentry/Public/SentryStacktrace.h index 6fd90bd8b..5c8d11f8b 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryStacktrace.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryStacktrace.h @@ -1,7 +1,12 @@ #import - -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryThread.h b/Pods/Sentry/Sources/Sentry/Public/SentryThread.h index 2a0223387..cbf942278 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryThread.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryThread.h @@ -1,5 +1,11 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryTraceContext.h b/Pods/Sentry/Sources/Sentry/Public/SentryTraceContext.h index 0d41a6d23..790440489 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryTraceContext.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryTraceContext.h @@ -6,8 +6,12 @@ NS_ASSUME_NONNULL_BEGIN -@class SentryScope, SentryOptions, SentryTracer, SentryUser, SentryBaggage; +@class SentryBaggage; @class SentryId; +@class SentryOptions; +@class SentryScope; +@class SentryTracer; +@class SentryUser; NS_SWIFT_NAME(TraceContext) @interface SentryTraceContext : NSObject @@ -44,10 +48,15 @@ NS_SWIFT_NAME(TraceContext) @property (nullable, nonatomic, readonly) NSString *userSegment; /** - * Sample rate used for this trace. + * Serialized sample rate used for this trace. */ @property (nullable, nonatomic, readonly) NSString *sampleRate; +/** + * Serialized random value used to determine if the trace is sampled. + */ +@property (nullable, nonatomic, readonly) NSString *sampleRand; + /** * Value indicating whether the trace was sampled. */ @@ -71,6 +80,20 @@ NS_SWIFT_NAME(TraceContext) sampled:(nullable NSString *)sampled replayId:(nullable NSString *)replayId; +/** + * Initializes a SentryTraceContext with given properties. + */ +- (instancetype)initWithTraceId:(SentryId *)traceId + publicKey:(NSString *)publicKey + releaseName:(nullable NSString *)releaseName + environment:(nullable NSString *)environment + transaction:(nullable NSString *)transaction + userSegment:(nullable NSString *)userSegment + sampleRate:(nullable NSString *)sampleRate + sampleRand:(nullable NSString *)sampleRand + sampled:(nullable NSString *)sampled + replayId:(nullable NSString *)replayId; + /** * Initializes a SentryTraceContext with data from scope and options. */ diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryTraceHeader.h b/Pods/Sentry/Sources/Sentry/Public/SentryTraceHeader.h index 7c9801b17..da488f486 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryTraceHeader.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryTraceHeader.h @@ -1,7 +1,14 @@ -#import "SentryDefines.h" -#import "SentrySampleDecision.h" - -@class SentryId, SentrySpanId; +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySampleDecision) + +@class SentryId; +@class SentrySpanId; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryTransactionContext.h b/Pods/Sentry/Sources/Sentry/Public/SentryTransactionContext.h index 5b58d4c5e..8b3c46af5 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryTransactionContext.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryTransactionContext.h @@ -1,5 +1,12 @@ -#import "SentrySampleDecision.h" -#import "SentrySpanContext.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySampleDecision) +#import SENTRY_HEADER(SentrySpanContext) NS_ASSUME_NONNULL_BEGIN @@ -16,15 +23,30 @@ SENTRY_NO_INIT @property (nonatomic, readonly) NSString *name; @property (nonatomic, readonly) SentryTransactionNameSource nameSource; +/** + * Rate of sampling + */ +@property (nonatomic, strong, nullable) NSNumber *sampleRate; + +/** + * Random value used to determine if the span is sampled. + */ +@property (nonatomic, strong, nullable) NSNumber *sampleRand; + /** * Parent sampled */ @property (nonatomic) SentrySampleDecision parentSampled; /** - * Sample rate used for this transaction + * Parent sample rate used for this transaction */ -@property (nonatomic, strong, nullable) NSNumber *sampleRate; +@property (nonatomic, strong, nullable) NSNumber *parentSampleRate; + +/** + * Parent random value used to determine if the trace is sampled. + */ +@property (nonatomic, strong, nullable) NSNumber *parentSampleRand; /** * If app launch profiling is enabled via @c SentryOptions.enableAppLaunchProfiling and @@ -49,7 +71,37 @@ SENTRY_NO_INIT */ - (instancetype)initWithName:(NSString *)name operation:(NSString *)operation - sampled:(SentrySampleDecision)sampled; + sampled:(SentrySampleDecision)sampled + DEPRECATED_MSG_ATTRIBUTE("Use initWithName:operation:sampled:sampleRate:sampleRand instead"); + +/** + * @param name Transaction name + * @param operation The operation this span is measuring. + * @param sampled Determines whether the trace should be sampled. + */ +- (instancetype)initWithName:(NSString *)name + operation:(NSString *)operation + sampled:(SentrySampleDecision)sampled + sampleRate:(nullable NSNumber *)sampleRate + sampleRand:(nullable NSNumber *)sampleRand; + +/** + * @param name Transaction name + * @param operation The operation this span is measuring. + * @param traceId Trace Id + * @param spanId Span Id + * @param parentSpanId Parent span id + * @param parentSampled Whether the parent is sampled + */ +- (instancetype)initWithName:(NSString *)name + operation:(NSString *)operation + traceId:(SentryId *)traceId + spanId:(SentrySpanId *)spanId + parentSpanId:(nullable SentrySpanId *)parentSpanId + parentSampled:(SentrySampleDecision)parentSampled + DEPRECATED_MSG_ATTRIBUTE("Use " + "initWithName:operation:traceId:spanId:parentSpanId:parentSampled:" + "parentSampleRate:parentSampleRand instead"); /** * @param name Transaction name @@ -64,7 +116,9 @@ SENTRY_NO_INIT traceId:(SentryId *)traceId spanId:(SentrySpanId *)spanId parentSpanId:(nullable SentrySpanId *)parentSpanId - parentSampled:(SentrySampleDecision)parentSampled; + parentSampled:(SentrySampleDecision)parentSampled + parentSampleRate:(nullable NSNumber *)parentSampleRate + parentSampleRand:(nullable NSNumber *)parentSampleRand; @end diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryUser.h b/Pods/Sentry/Sources/Sentry/Public/SentryUser.h index 3587e0e7a..685e786f5 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryUser.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryUser.h @@ -1,5 +1,11 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryUserFeedback.h b/Pods/Sentry/Sources/Sentry/Public/SentryUserFeedback.h index 430c5dec1..6dbef2b7d 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryUserFeedback.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryUserFeedback.h @@ -1,5 +1,11 @@ -#import "SentryDefines.h" -#import "SentrySerializable.h" +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif +#import SENTRY_HEADER(SentrySerializable) NS_ASSUME_NONNULL_BEGIN @@ -7,9 +13,10 @@ NS_ASSUME_NONNULL_BEGIN /** * Adds additional information about what happened to an event. + * @deprecated Use @c SentryFeedback . */ -NS_SWIFT_NAME(UserFeedback) -@interface SentryUserFeedback : NSObject +NS_SWIFT_NAME(UserFeedback) DEPRECATED_MSG_ATTRIBUTE("Use SentryFeedback.") + @interface SentryUserFeedback : NSObject SENTRY_NO_INIT /** diff --git a/Pods/Sentry/Sources/Sentry/Public/SentryWithoutUIKit.h b/Pods/Sentry/Sources/Sentry/Public/SentryWithoutUIKit.h index 82b500bf1..386d31b4a 100644 --- a/Pods/Sentry/Sources/Sentry/Public/SentryWithoutUIKit.h +++ b/Pods/Sentry/Sources/Sentry/Public/SentryWithoutUIKit.h @@ -21,16 +21,19 @@ FOUNDATION_EXPORT const unsigned char SentryVersionString[]; # import # import # import +# import # import # import # import # import +# import # import # import # import # import # import # import +# import # import # import # import diff --git a/Pods/Sentry/Sources/Sentry/SentryANRTracker.m b/Pods/Sentry/Sources/Sentry/SentryANRTrackerV1.m similarity index 85% rename from Pods/Sentry/Sources/Sentry/SentryANRTracker.m rename to Pods/Sentry/Sources/Sentry/SentryANRTrackerV1.m index c8e01679c..02b2549c4 100644 --- a/Pods/Sentry/Sources/Sentry/SentryANRTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryANRTrackerV1.m @@ -1,4 +1,4 @@ -#import "SentryANRTracker.h" +#import "SentryANRTrackerV1.h" #import "SentryCrashWrapper.h" #import "SentryDependencyContainer.h" #import "SentryDispatchQueueWrapper.h" @@ -16,8 +16,7 @@ typedef NS_ENUM(NSInteger, SentryANRTrackerState) { kSentryANRTrackerStopping }; -@interface -SentryANRTracker () +@interface SentryANRTrackerV1 () @property (nonatomic, strong) SentryCrashWrapper *crashWrapper; @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueueWrapper; @@ -27,7 +26,7 @@ typedef NS_ENUM(NSInteger, SentryANRTrackerState) { @end -@implementation SentryANRTracker { +@implementation SentryANRTrackerV1 { NSObject *threadLock; SentryANRTrackerState state; } @@ -49,6 +48,11 @@ - (instancetype)initWithTimeoutInterval:(NSTimeInterval)timeoutInterval return self; } +- (id)asProtocol +{ + return self; +} + - (void)detectANRs { NSUUID *threadID = [NSUUID UUID]; @@ -66,12 +70,13 @@ - (void)detectANRs } __block atomic_int ticksSinceUiUpdate = 0; - __block BOOL reported = NO; + __block atomic_bool reported = false; NSInteger reportThreshold = 5; NSTimeInterval sleepInterval = self.timeoutInterval / reportThreshold; - SentryCurrentDateProvider *dateProvider = SentryDependencyContainer.sharedInstance.dateProvider; + id dateProvider + = SentryDependencyContainer.sharedInstance.dateProvider; // Canceling the thread can take up to sleepInterval. while (YES) { @@ -88,7 +93,8 @@ - (void)detectANRs [self.dispatchQueueWrapper dispatchAsyncOnMainQueue:^{ atomic_store_explicit(&ticksSinceUiUpdate, 0, memory_order_relaxed); - if (reported) { + bool isReported = atomic_load_explicit(&reported, memory_order_relaxed); + if (isReported) { SENTRY_LOG_WARN(@"ANR stopped."); // The ANR stopped, don't block the main thread with calling ANRStopped listeners. @@ -99,7 +105,7 @@ - (void)detectANRs [self.dispatchQueueWrapper dispatchAsyncWithBlock:^{ [self ANRStopped]; }]; } - reported = NO; + atomic_store_explicit(&reported, false, memory_order_relaxed); }]; [self.threadWrapper sleepForTimeInterval:sleepInterval]; @@ -116,9 +122,12 @@ - (void)detectANRs continue; } - if (atomic_load_explicit(&ticksSinceUiUpdate, memory_order_relaxed) >= reportThreshold - && !reported) { - reported = YES; + bool isReported = atomic_load_explicit(&reported, memory_order_relaxed); + int currentTicks = atomic_load_explicit(&ticksSinceUiUpdate, memory_order_relaxed); + + if (currentTicks >= reportThreshold && !isReported) { + + atomic_store_explicit(&reported, true, memory_order_relaxed); if (![self.crashWrapper isApplicationInForeground]) { SENTRY_LOG_DEBUG(@"Ignoring ANR because the app is in the background"); @@ -144,7 +153,7 @@ - (void)ANRDetected } for (id target in localListeners) { - [target anrDetected]; + [target anrDetectedWithType:SentryANRTypeUnknown]; } } @@ -156,7 +165,9 @@ - (void)ANRStopped } for (id target in targets) { - [target anrStopped]; + // We intentionally don't measure the ANR duration, because V2 will replace V1, so it's not + // worth the effort. + [target anrStoppedWithResult:nil]; } } diff --git a/Pods/Sentry/Sources/Sentry/SentryANRTrackerV2.m b/Pods/Sentry/Sources/Sentry/SentryANRTrackerV2.m index c23f09a08..9f7318ef2 100644 --- a/Pods/Sentry/Sources/Sentry/SentryANRTrackerV2.m +++ b/Pods/Sentry/Sources/Sentry/SentryANRTrackerV2.m @@ -21,13 +21,12 @@ typedef NS_ENUM(NSInteger, SentryANRTrackerState) { kSentryANRTrackerStopping }; -@interface -SentryANRTrackerV2 () +@interface SentryANRTrackerV2 () @property (nonatomic, strong) SentryCrashWrapper *crashWrapper; @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueueWrapper; @property (nonatomic, strong) SentryThreadWrapper *threadWrapper; -@property (nonatomic, strong) NSHashTable> *listeners; +@property (nonatomic, strong) NSHashTable> *listeners; @property (nonatomic, strong) SentryFramesTracker *framesTracker; @property (nonatomic, assign) NSTimeInterval timeoutInterval; @@ -57,6 +56,11 @@ - (instancetype)initWithTimeoutInterval:(NSTimeInterval)timeoutInterval return self; } +- (id)asProtocol +{ + return self; +} + - (void)detectANRs { NSUUID *threadID = [NSUUID UUID]; @@ -73,12 +77,14 @@ - (void)detectANRs state = kSentryANRTrackerRunning; } - SentryCurrentDateProvider *dateProvider = SentryDependencyContainer.sharedInstance.dateProvider; + id dateProvider + = SentryDependencyContainer.sharedInstance.dateProvider; BOOL reported = NO; NSInteger reportThreshold = 5; NSTimeInterval sleepInterval = self.timeoutInterval / reportThreshold; + uint64_t sleepIntervalInNanos = timeIntervalToNanoseconds(sleepInterval); uint64_t timeoutIntervalInNanos = timeIntervalToNanoseconds(self.timeoutInterval); uint64_t appHangStoppedInterval = timeIntervalToNanoseconds(sleepInterval * 2); @@ -86,6 +92,7 @@ - (void)detectANRs = nanosecondsToTimeInterval(appHangStoppedInterval) * 0.2; uint64_t lastAppHangStoppedSystemTime = dateProvider.systemTime - timeoutIntervalInNanos; + uint64_t lastAppHangStartedSystemTime = 0; // Canceling the thread can take up to sleepInterval. while (YES) { @@ -135,9 +142,21 @@ - (void)detectANRs if (appHangStopped) { SENTRY_LOG_DEBUG(@"App hang stopped."); + // As we check every sleepInterval if the app is hanging, the app could already be + // hanging for almost the sleepInterval until we detect it and it could already + // stopped hanging almost a sleepInterval until we again detect it's not. + uint64_t appHangDurationNanos + = timeoutIntervalInNanos + nowSystemTime - lastAppHangStartedSystemTime; + NSTimeInterval appHangDurationMinimum + = nanosecondsToTimeInterval(appHangDurationNanos - sleepIntervalInNanos); + NSTimeInterval appHangDurationMaximum + = nanosecondsToTimeInterval(appHangDurationNanos + sleepIntervalInNanos); + // The App Hang stopped, don't block the App Hangs thread or the main thread with // calling ANRStopped listeners. - [self.dispatchQueueWrapper dispatchAsyncWithBlock:^{ [self ANRStopped]; }]; + [self.dispatchQueueWrapper dispatchAsyncWithBlock:^{ + [self ANRStopped:appHangDurationMinimum to:appHangDurationMaximum]; + }]; lastAppHangStoppedSystemTime = dateProvider.systemTime; reported = NO; @@ -173,6 +192,7 @@ - (void)detectANRs SENTRY_LOG_WARN(@"App Hang detected: fully-blocking."); reported = YES; + lastAppHangStartedSystemTime = dateProvider.systemTime; [self ANRDetected:SentryANRTypeFullyBlocking]; } @@ -183,6 +203,7 @@ - (void)detectANRs SENTRY_LOG_WARN(@"App Hang detected: non-fully-blocking."); reported = YES; + lastAppHangStartedSystemTime = dateProvider.systemTime; [self ANRDetected:SentryANRTypeNonFullyBlocking]; } } @@ -200,24 +221,27 @@ - (void)ANRDetected:(enum SentryANRType)type localListeners = [self.listeners allObjects]; } - for (id target in localListeners) { + for (id target in localListeners) { [target anrDetectedWithType:type]; } } -- (void)ANRStopped +- (void)ANRStopped:(NSTimeInterval)hangDurationMinimum to:(NSTimeInterval)hangDurationMaximum { NSArray *targets; @synchronized(self.listeners) { targets = [self.listeners allObjects]; } - for (id target in targets) { - [target anrStopped]; + SentryANRStoppedResult *result = + [[SentryANRStoppedResult alloc] initWithMinDuration:hangDurationMinimum + maxDuration:hangDurationMaximum]; + for (id target in targets) { + [target anrStoppedWithResult:result]; } } -- (void)addListener:(id)listener +- (void)addListener:(id)listener { @synchronized(self.listeners) { [self.listeners addObject:listener]; @@ -235,7 +259,7 @@ - (void)addListener:(id)listener } } -- (void)removeListener:(id)listener +- (void)removeListener:(id)listener { @synchronized(self.listeners) { [self.listeners removeObject:listener]; diff --git a/Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegration.m index 18d93712d..adfcb027e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegration.m @@ -1,5 +1,4 @@ #import "SentryANRTrackingIntegration.h" -#import "SentryANRTracker.h" #import "SentryClient+Private.h" #import "SentryCrashMachineContext.h" #import "SentryCrashWrapper.h" @@ -7,15 +6,19 @@ #import "SentryDispatchQueueWrapper.h" #import "SentryEvent.h" #import "SentryException.h" +#import "SentryFileManager.h" #import "SentryHub+Private.h" #import "SentryLog.h" #import "SentryMechanism.h" #import "SentrySDK+Private.h" +#import "SentryScope+Private.h" #import "SentryStacktrace.h" +#import "SentrySwift.h" #import "SentryThread.h" #import "SentryThreadInspector.h" #import "SentryThreadWrapper.h" #import "SentryUIApplication.h" +#import #import #if SENTRY_HAS_UIKIT @@ -24,12 +27,17 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryANRTrackingIntegration () +static NSString *const SentryANRMechanismDataAppHangDuration = @"app_hang_duration"; -@property (nonatomic, strong) SentryANRTracker *tracker; +@interface SentryANRTrackingIntegration () + +@property (nonatomic, strong) id tracker; @property (nonatomic, strong) SentryOptions *options; +@property (nonatomic, strong) SentryFileManager *fileManager; +@property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueueWrapper; +@property (nonatomic, strong) SentryCrashWrapper *crashWrapper; @property (atomic, assign) BOOL reportAppHangs; +@property (atomic, assign) BOOL enableReportNonFullyBlockingAppHangs; @end @@ -41,13 +49,26 @@ - (BOOL)installWithOptions:(SentryOptions *)options return NO; } +#if SENTRY_HAS_UIKIT + self.tracker = + [SentryDependencyContainer.sharedInstance getANRTracker:options.appHangTimeoutInterval + isV2Enabled:options.enableAppHangTrackingV2]; +#else self.tracker = [SentryDependencyContainer.sharedInstance getANRTracker:options.appHangTimeoutInterval]; +#endif // SENTRY_HAS_UIKIT + self.fileManager = SentryDependencyContainer.sharedInstance.fileManager; + self.dispatchQueueWrapper = SentryDependencyContainer.sharedInstance.dispatchQueueWrapper; + self.crashWrapper = SentryDependencyContainer.sharedInstance.crashWrapper; [self.tracker addListener:self]; self.options = options; self.reportAppHangs = YES; +#if SENTRY_HAS_UIKIT + [self captureStoredAppHangEvent]; +#endif // SENTRY_HAS_UIKIT + return YES; } @@ -76,7 +97,7 @@ - (void)dealloc [self uninstall]; } -- (void)anrDetected +- (void)anrDetectedWithType:(enum SentryANRType)type { if (self.reportAppHangs == NO) { SENTRY_LOG_DEBUG(@"AppHangTracking paused. Ignoring reported app hang.") @@ -84,13 +105,19 @@ - (void)anrDetected } #if SENTRY_HAS_UIKIT + if (type == SentryANRTypeNonFullyBlocking + && !self.options.enableReportNonFullyBlockingAppHangs) { + SENTRY_LOG_DEBUG(@"Ignoring non fully blocking app hang.") + return; + } + // If the app is not active, the main thread may be blocked or too busy. // Since there is no UI for the user to interact, there is no need to report app hang. if (SentryDependencyContainer.sharedInstance.application.applicationState != UIApplicationStateActive) { return; } -#endif +#endif // SENTRY_HAS_UIKIT SentryThreadInspector *threadInspector = SentrySDK.currentHub.getClient.threadInspector; NSArray *threads = [threadInspector getCurrentThreadsWithStackTrace]; @@ -101,13 +128,17 @@ - (void)anrDetected return; } - NSString *message = [NSString stringWithFormat:@"App hanging for at least %li ms.", - (long)(self.options.appHangTimeoutInterval * 1000)]; + NSString *appHangDurationInfo = [NSString + stringWithFormat:@"at least %li ms", (long)(self.options.appHangTimeoutInterval * 1000)]; + NSString *message = [NSString stringWithFormat:@"App hanging for %@.", appHangDurationInfo]; SentryEvent *event = [[SentryEvent alloc] initWithLevel:kSentryLevelError]; - SentryException *sentryException = - [[SentryException alloc] initWithValue:message type:SentryANRExceptionType]; - sentryException.mechanism = [[SentryMechanism alloc] initWithType:@"AppHang"]; + NSString *exceptionType = [SentryAppHangTypeMapper getExceptionTypeWithAnrType:type]; + SentryException *sentryException = [[SentryException alloc] initWithValue:message + type:exceptionType]; + + SentryMechanism *mechanism = [[SentryMechanism alloc] initWithType:@"AppHang"]; + sentryException.mechanism = mechanism; sentryException.stacktrace = [threads[0] stacktrace]; sentryException.stacktrace.snapshot = @(YES); @@ -117,14 +148,144 @@ - (void)anrDetected event.exceptions = @[ sentryException ]; event.threads = threads; - [SentrySDK captureEvent:event]; +#if SENTRY_HAS_UIKIT + // We only measure app hang duration for V2. + // For V1, we directly capture the app hang event. + if (self.options.enableAppHangTrackingV2) { + // We only temporarily store the app hang duration info, so we can change the error message + // when either sending a normal or fatal app hang event. Otherwise, we would have to rely on + // string parsing to retrieve the app hang duration info from the error message. + mechanism.data = @{ SentryANRMechanismDataAppHangDuration : appHangDurationInfo }; + + // We need to apply the scope now because if the app hang turns into a fatal one, + // we would lose the scope. Furthermore, we want to know in which state the app was when the + // app hang started. + SentryScope *scope = [SentrySDK currentHub].scope; + SentryOptions *options = SentrySDK.options; + if (scope != nil && options != nil) { + [scope applyToEvent:event maxBreadcrumb:options.maxBreadcrumbs]; + } + + [self.fileManager storeAppHangEvent:event]; + } else { +#endif // SENTRY_HAS_UIKIT + [SentrySDK captureEvent:event]; +#if SENTRY_HAS_UIKIT + } +#endif // SENTRY_UIKIT_AVAILABLE +} + +- (void)anrStoppedWithResult:(SentryANRStoppedResult *_Nullable)result +{ +#if SENTRY_HAS_UIKIT + // We only measure app hang duration for V2, and therefore ignore V1. + if (!self.options.enableAppHangTrackingV2) { + return; + } + + if (result == nil) { + SENTRY_LOG_WARN(@"ANR stopped for V2 but result was nil.") + return; + } + + SentryEvent *event = [self.fileManager readAppHangEvent]; + if (event == nil) { + SENTRY_LOG_WARN(@"AppHang stopped but stored app hang event was nil.") + return; + } + + [self.fileManager deleteAppHangEvent]; + + // We round to 0.1 seconds accuracy because we can't precicely measure the app hand duration. + NSString *appHangDurationInfo = [NSString + stringWithFormat:@"between %.1f and %.1f seconds", result.minDuration, result.maxDuration]; + NSString *errorMessage = [NSString stringWithFormat:@"App hanging %@.", appHangDurationInfo]; + event.exceptions.firstObject.value = errorMessage; + + if (event.exceptions.firstObject.mechanism.data == nil) { + SENTRY_LOG_WARN(@"Mechanism data of the stored app hang event was nil. This is unexpected, " + @"so it's likely that the app hang event is corrupted. Therefore, dropping " + @"the stored app hang event."); + return; + } + + NSMutableDictionary *mechanismData = [event.exceptions.firstObject.mechanism.data mutableCopy]; + [mechanismData removeObjectForKey:SentryANRMechanismDataAppHangDuration]; + event.exceptions.firstObject.mechanism.data = mechanismData; + + // We already applied the scope. We use an empty scope to avoid overwriting exising fields on + // the event. + [SentrySDK captureEvent:event withScope:[[SentryScope alloc] init]]; +#endif // SENTRY_HAS_UIKIT } -- (void)anrStopped +#if SENTRY_HAS_UIKIT +- (void)captureStoredAppHangEvent { - // We dont report when an ANR ends. + __weak SentryANRTrackingIntegration *weakSelf = self; + [self.dispatchQueueWrapper dispatchAsyncWithBlock:^{ + if (weakSelf == nil) { + return; + } + + SentryEvent *event = [weakSelf.fileManager readAppHangEvent]; + if (event == nil) { + return; + } + + [weakSelf.fileManager deleteAppHangEvent]; + + if (weakSelf.crashWrapper.crashedLastLaunch) { + // The app crashed during an ongoing app hang. Capture the stored app hang as it is. + // We already applied the scope. We use an empty scope to avoid overwriting exising + // fields on the event. + [SentrySDK captureEvent:event withScope:[[SentryScope alloc] init]]; + } else { + // Fatal App Hang + // We can't differ if the watchdog or the user terminated the app, because when the main + // thread is blocked we don't receive the applicationWillTerminate notification. Further + // investigations are required to validate if we somehow can differ between watchdog or + // user terminations; see https://github.com/getsentry/sentry-cocoa/issues/4845. + + if (event.exceptions.count != 1) { + SENTRY_LOG_WARN(@"The stored app hang event is expected to have exactly one " + @"exception, so we don't capture it."); + return; + } + + event.level = kSentryLevelFatal; + + SentryException *exception = event.exceptions.firstObject; + + NSString *exceptionType = exception.type; + NSString *fatalExceptionType = + [SentryAppHangTypeMapper getFatalExceptionTypeWithNonFatalErrorType:exceptionType]; + + event.exceptions.firstObject.type = fatalExceptionType; + + NSMutableDictionary *mechanismData = + [event.exceptions.firstObject.mechanism.data mutableCopy]; + NSString *appHangDurationInfo + = exception.mechanism.data[SentryANRMechanismDataAppHangDuration]; + + [mechanismData removeObjectForKey:SentryANRMechanismDataAppHangDuration]; + event.exceptions.firstObject.mechanism.data = mechanismData; + + NSString *exceptionValue = + [NSString stringWithFormat:@"The user or the OS watchdog terminated your app while " + @"it blocked the main thread for %@.", + appHangDurationInfo]; + event.exceptions.firstObject.value = exceptionValue; + + // We already applied the scope. We use an empty scope to avoid overwriting exising + // fields on the event. + [SentrySDK captureFatalAppHangEvent:event]; + } + }]; } +#endif // SENTRY_HAS_UIKIT + @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegrationV2.m b/Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegrationV2.m deleted file mode 100644 index 6a2e4ff48..000000000 --- a/Pods/Sentry/Sources/Sentry/SentryANRTrackingIntegrationV2.m +++ /dev/null @@ -1,131 +0,0 @@ -#import "SentryANRTrackingIntegrationV2.h" - -#if SENTRY_HAS_UIKIT - -# import "SentryANRTrackerV2.h" -# import "SentryClient+Private.h" -# import "SentryCrashMachineContext.h" -# import "SentryCrashWrapper.h" -# import "SentryDependencyContainer.h" -# import "SentryDispatchQueueWrapper.h" -# import "SentryEvent.h" -# import "SentryException.h" -# import "SentryHub+Private.h" -# import "SentryLog.h" -# import "SentryMechanism.h" -# import "SentrySDK+Private.h" -# import "SentryStacktrace.h" -# import "SentryThread.h" -# import "SentryThreadInspector.h" -# import "SentryThreadWrapper.h" -# import "SentryUIApplication.h" -# import -# import - -NS_ASSUME_NONNULL_BEGIN - -@interface -SentryANRTrackingIntegrationV2 () - -@property (nonatomic, strong) SentryANRTrackerV2 *tracker; -@property (nonatomic, strong) SentryOptions *options; -@property (atomic, assign) BOOL reportAppHangs; - -@end - -@implementation SentryANRTrackingIntegrationV2 - -- (BOOL)installWithOptions:(SentryOptions *)options -{ - if (![super installWithOptions:options]) { - return NO; - } - - self.tracker = - [SentryDependencyContainer.sharedInstance getANRTrackerV2:options.appHangTimeoutInterval]; - - [self.tracker addListener:self]; - self.options = options; - self.reportAppHangs = YES; - - return YES; -} - -- (SentryIntegrationOption)integrationOptions -{ - return kIntegrationOptionEnableAppHangTrackingV2 | kIntegrationOptionDebuggerNotAttached; -} - -- (void)pauseAppHangTracking -{ - self.reportAppHangs = NO; -} - -- (void)resumeAppHangTracking -{ - self.reportAppHangs = YES; -} - -- (void)uninstall -{ - [self.tracker removeListener:self]; -} - -- (void)dealloc -{ - [self uninstall]; -} - -- (void)anrDetectedWithType:(enum SentryANRType)type -{ - if (self.reportAppHangs == NO) { - SENTRY_LOG_DEBUG(@"AppHangTracking paused. Ignoring reported app hang.") - return; - } - - // If the app is not active, the main thread may be blocked or too busy. - // Since there is no UI for the user to interact, there is no need to report app hang. - if (SentryDependencyContainer.sharedInstance.application.applicationState - != UIApplicationStateActive) { - return; - } - - SentryThreadInspector *threadInspector = SentrySDK.currentHub.getClient.threadInspector; - - NSArray *threads = [threadInspector getCurrentThreadsWithStackTrace]; - - if (threads.count == 0) { - SENTRY_LOG_WARN(@"Getting current thread returned an empty list. Can't create AppHang " - @"event without a stacktrace."); - return; - } - - NSString *message = [NSString stringWithFormat:@"App hanging for at least %li ms.", - (long)(self.options.appHangTimeoutInterval * 1000)]; - SentryEvent *event = [[SentryEvent alloc] initWithLevel:kSentryLevelError]; - SentryException *sentryException = - [[SentryException alloc] initWithValue:message type:SentryANRExceptionTypeV2]; - - sentryException.mechanism = [[SentryMechanism alloc] initWithType:@"AppHang"]; - sentryException.stacktrace = [threads[0] stacktrace]; - sentryException.stacktrace.snapshot = @(YES); - - [threads enumerateObjectsUsingBlock:^(SentryThread *_Nonnull obj, NSUInteger idx, - BOOL *_Nonnull stop) { obj.current = [NSNumber numberWithBool:idx == 0]; }]; - - event.exceptions = @[ sentryException ]; - event.threads = threads; - - [SentrySDK captureEvent:event]; -} - -- (void)anrStopped -{ - // We dont report when an ANR ends. -} - -@end - -NS_ASSUME_NONNULL_END - -#endif // SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/SentryAppStartMeasurement.m b/Pods/Sentry/Sources/Sentry/SentryAppStartMeasurement.m index b2e866d47..64951abe2 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAppStartMeasurement.m +++ b/Pods/Sentry/Sources/Sentry/SentryAppStartMeasurement.m @@ -4,7 +4,6 @@ # import "SentryDateUtils.h" # import "SentryLog.h" -# import @implementation SentryAppStartTypeToString + (NSString *)convert:(SentryAppStartType)type diff --git a/Pods/Sentry/Sources/Sentry/SentryAppStartTracker.m b/Pods/Sentry/Sources/Sentry/SentryAppStartTracker.m index e9f8d84ad..4340f7e45 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAppStartTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryAppStartTracker.m @@ -8,7 +8,6 @@ # import "SentryFramesTracker.h" # import "SentryLog.h" # import "SentrySysctl.h" -# import # import # import # import @@ -28,8 +27,7 @@ */ static const NSTimeInterval SENTRY_APP_START_MAX_DURATION = 180.0; -@interface -SentryAppStartTracker () +@interface SentryAppStartTracker () @property (nonatomic, strong) SentryAppState *previousAppState; @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueue; @@ -226,12 +224,12 @@ - (void)buildAppStartMeasurement:(NSDate *)appStartEnd // With only running this once we know that the process is a new one when the following // code is executed. // We need to make sure the block runs on each test instead of only once -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) block(); # else static dispatch_once_t once; [self.dispatchQueue dispatchOnce:&once block:block]; -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) } /** @@ -316,9 +314,9 @@ - (void)stop [self.framesTracker removeListener:self]; -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) self.isRunning = NO; -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) } - (void)dealloc diff --git a/Pods/Sentry/Sources/Sentry/SentryAppStartTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryAppStartTrackingIntegration.m index dc8b960e6..8c8395e6c 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAppStartTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryAppStartTrackingIntegration.m @@ -5,15 +5,13 @@ # import "SentryAppStartTracker.h" # import "SentryLog.h" # import "SentryOptions.h" -# import # import # import # import # import # import -@interface -SentryAppStartTrackingIntegration () +@interface SentryAppStartTrackingIntegration () @property (nonatomic, strong) SentryAppStartTracker *tracker; diff --git a/Pods/Sentry/Sources/Sentry/SentryAppStateManager.m b/Pods/Sentry/Sources/Sentry/SentryAppStateManager.m index 88d9441df..5f4533cd6 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAppStateManager.m +++ b/Pods/Sentry/Sources/Sentry/SentryAppStateManager.m @@ -1,7 +1,6 @@ #import "SentryCrashSysCtl.h" #import "SentryDependencyContainer.h" #import "SentrySysctl.h" -#import #import #import #import @@ -17,8 +16,7 @@ # import #endif -@interface -SentryAppStateManager () +@interface SentryAppStateManager () @property (nonatomic, strong) SentryOptions *options; @property (nonatomic, strong) SentryCrashWrapper *crashWrapper; @@ -152,7 +150,7 @@ - (void)willTerminate { // The app is terminating so it is fine to do this on the main thread. // Furthermore, so users can manually post UIApplicationWillTerminateNotification and then call - // exit(0), to avoid getting false OOM when using exit(0), see GH-1252. + // exit(0), to avoid getting false watchdog terminations when using exit(0), see GH-1252. [self updateAppState:^(SentryAppState *appState) { appState.wasTerminated = YES; }]; } diff --git a/Pods/Sentry/Sources/Sentry/SentryAsyncSafeLog.c b/Pods/Sentry/Sources/Sentry/SentryAsyncSafeLog.c index c720f1019..5c9594eeb 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAsyncSafeLog.c +++ b/Pods/Sentry/Sources/Sentry/SentryAsyncSafeLog.c @@ -140,7 +140,7 @@ sentry_asyncLogSetFileName(const char *filename, bool overwrite) fd = open(filename, openMask, 0644); unlikely_if(fd < 0) { return 1; } if (filename != g_logFilename) { - strncpy(g_logFilename, filename, sizeof(g_logFilename)); + strlcpy(g_logFilename, filename, sizeof(g_logFilename)); } } diff --git a/Pods/Sentry/Sources/Sentry/SentryAsynchronousOperation.m b/Pods/Sentry/Sources/Sentry/SentryAsynchronousOperation.m index feade86b1..694883a9f 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAsynchronousOperation.m +++ b/Pods/Sentry/Sources/Sentry/SentryAsynchronousOperation.m @@ -2,8 +2,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryAsynchronousOperation () +@interface SentryAsynchronousOperation () @property (nonatomic, getter=isCancelled, readwrite) BOOL cancelled; @property (nonatomic, getter=isFinished, readwrite) BOOL finished; diff --git a/Pods/Sentry/Sources/Sentry/SentryAttachment.m b/Pods/Sentry/Sources/Sentry/SentryAttachment.m index c0a34b386..457f5f2fd 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAttachment.m +++ b/Pods/Sentry/Sources/Sentry/SentryAttachment.m @@ -1,5 +1,4 @@ #import "SentryAttachment+Private.h" -#import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/SentryAutoBreadcrumbTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryAutoBreadcrumbTrackingIntegration.m index 04952cb5d..31e731543 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAutoBreadcrumbTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryAutoBreadcrumbTrackingIntegration.m @@ -9,8 +9,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryAutoBreadcrumbTrackingIntegration () +@interface SentryAutoBreadcrumbTrackingIntegration () @property (nonatomic, strong) SentryBreadcrumbTracker *breadcrumbTracker; @@ -28,16 +27,20 @@ - (BOOL)installWithOptions:(SentryOptions *)options return NO; } - [self installWithOptions:options - breadcrumbTracker:[[SentryBreadcrumbTracker alloc] init] #if TARGET_OS_IOS && SENTRY_HAS_UIKIT + [self installWithOptions:options + breadcrumbTracker:[[SentryBreadcrumbTracker alloc] initReportAccessibilityIdentifier: + options.reportAccessibilityIdentifier] systemEventBreadcrumbs: [[SentrySystemEventBreadcrumbs alloc] initWithFileManager:[SentryDependencyContainer sharedInstance].fileManager andNotificationCenterWrapper:[SentryDependencyContainer sharedInstance] - .notificationCenterWrapper] + .notificationCenterWrapper]]; +#else + [self installWithOptions:options + breadcrumbTracker:[[SentryBreadcrumbTracker alloc] + initReportAccessibilityIdentifier:false]]; #endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT - ]; return YES; } diff --git a/Pods/Sentry/Sources/Sentry/SentryAutoSessionTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryAutoSessionTrackingIntegration.m index 7d0ec14e0..c2c66e800 100644 --- a/Pods/Sentry/Sources/Sentry/SentryAutoSessionTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryAutoSessionTrackingIntegration.m @@ -7,8 +7,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryAutoSessionTrackingIntegration () +@interface SentryAutoSessionTrackingIntegration () @property (nonatomic, strong) SentrySessionTracker *tracker; diff --git a/Pods/Sentry/Sources/Sentry/SentryBacktrace.cpp b/Pods/Sentry/Sources/Sentry/SentryBacktrace.cpp index 32cb54e27..1b82dacb1 100644 --- a/Pods/Sentry/Sources/Sentry/SentryBacktrace.cpp +++ b/Pods/Sentry/Sources/Sentry/SentryBacktrace.cpp @@ -110,8 +110,8 @@ namespace profiling { } void - enumerateBacktracesForAllThreads(const std::function &f, - const std::shared_ptr &cache) + enumerateBacktracesForAllThreads( + const std::function &f, ThreadMetadataCache *cache) { const auto pair = ThreadHandle::allExcludingCurrent(); for (const auto &thread : pair.first) { diff --git a/Pods/Sentry/Sources/Sentry/SentryBaggage.m b/Pods/Sentry/Sources/Sentry/SentryBaggage.m index 28e9fe2d2..4f4378172 100644 --- a/Pods/Sentry/Sources/Sentry/SentryBaggage.m +++ b/Pods/Sentry/Sources/Sentry/SentryBaggage.m @@ -20,6 +20,29 @@ - (instancetype)initWithTraceId:(SentryId *)traceId sampled:(nullable NSString *)sampled replayId:(nullable NSString *)replayId { + return [self initWithTraceId:traceId + publicKey:publicKey + releaseName:releaseName + environment:environment + transaction:transaction + userSegment:userSegment + sampleRate:sampleRate + sampleRand:nil + sampled:sampled + replayId:replayId]; +} + +- (instancetype)initWithTraceId:(SentryId *)traceId + publicKey:(NSString *)publicKey + releaseName:(nullable NSString *)releaseName + environment:(nullable NSString *)environment + transaction:(nullable NSString *)transaction + userSegment:(nullable NSString *)userSegment + sampleRate:(nullable NSString *)sampleRate + sampleRand:(nullable NSString *)sampleRand + sampled:(nullable NSString *)sampled + replayId:(nullable NSString *)replayId +{ if (self = [super init]) { _traceId = traceId; @@ -29,6 +52,7 @@ - (instancetype)initWithTraceId:(SentryId *)traceId _transaction = transaction; _userSegment = userSegment; _sampleRate = sampleRate; + _sampleRand = sampleRand; _sampled = sampled; _replayId = replayId; } @@ -60,6 +84,10 @@ - (NSString *)toHTTPHeaderWithOriginalBaggage:(NSDictionary *_Nullable)originalB [information setValue:_userSegment forKey:@"sentry-user_segment"]; } + if (_sampleRand != nil) { + [information setValue:_sampleRand forKey:@"sentry-sample_rand"]; + } + if (_sampleRate != nil) { [information setValue:_sampleRate forKey:@"sentry-sample_rate"]; } diff --git a/Pods/Sentry/Sources/Sentry/SentryBaseIntegration.m b/Pods/Sentry/Sources/Sentry/SentryBaseIntegration.m index f6f7f6698..54b8f9947 100644 --- a/Pods/Sentry/Sources/Sentry/SentryBaseIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryBaseIntegration.m @@ -2,7 +2,6 @@ #import "SentryCrashWrapper.h" #import "SentryLog.h" #import "SentrySwift.h" -#import #import #import @@ -78,22 +77,17 @@ - (BOOL)shouldBeEnabledWithOptions:(SentryOptions *)options #endif if (integrationOptions & kIntegrationOptionEnableAppHangTracking) { - if (!options.enableAppHangTracking) { - [self logWithOptionName:@"enableAppHangTracking"]; - return NO; - } - - if (options.appHangTimeoutInterval == 0) { - [self logWithReason:@"because appHangTimeoutInterval is 0"]; +#if SENTRY_HAS_UIKIT + if (!options.enableAppHangTracking && !options.enableAppHangTrackingV2) { + [self logWithOptionName:@"enableAppHangTracking && enableAppHangTrackingV2"]; return NO; } - } - - if (integrationOptions & kIntegrationOptionEnableAppHangTrackingV2) { - if (!options.enableAppHangTrackingV2) { - [self logWithOptionName:@"enableAppHangTrackingV2"]; +#else + if (!options.enableAppHangTracking) { + [self logWithOptionName:@"enableAppHangTracking"]; return NO; } +#endif // SENTRY_HAS_UIKIT if (options.appHangTimeoutInterval == 0) { [self logWithReason:@"because appHangTimeoutInterval is 0"]; @@ -153,21 +147,16 @@ - (BOOL)shouldBeEnabledWithOptions:(SentryOptions *)options [self logWithOptionName:@"attachViewHierarchy"]; return NO; } - +#endif +#if SENTRY_TARGET_REPLAY_SUPPORTED if (integrationOptions & kIntegrationOptionEnableReplay) { - if (@available(iOS 16.0, tvOS 16.0, *)) { - if (options.experimental.sessionReplay.onErrorSampleRate == 0 - && options.experimental.sessionReplay.sessionSampleRate == 0) { - [self logWithOptionName:@"sessionReplaySettings"]; - return NO; - } - } else { - [self logWithReason:@"Session replay requires iOS 16 or above"]; + if (options.sessionReplay.onErrorSampleRate == 0 + && options.sessionReplay.sessionSampleRate == 0) { + [self logWithOptionName:@"sessionReplaySettings"]; return NO; } } #endif - if ((integrationOptions & kIntegrationOptionEnableCrashHandler) && !options.enableCrashHandler) { [self logWithOptionName:@"enableCrashHandler"]; @@ -183,6 +172,33 @@ - (BOOL)shouldBeEnabledWithOptions:(SentryOptions *)options } #endif + // The frames tracker runs when tracing is enabled or AppHangsV2. We have to use an extra option + // for this. + if (integrationOptions & kIntegrationOptionStartFramesTracker) { + +#if SENTRY_HAS_UIKIT + BOOL performanceDisabled + = !options.enableAutoPerformanceTracing || !options.isTracingEnabled; + BOOL appHangsV2Disabled = options.isAppHangTrackingV2Disabled; + + if (performanceDisabled && appHangsV2Disabled) { + if (appHangsV2Disabled) { + SENTRY_LOG_DEBUG(@"Not going to enable %@ because enableAppHangTrackingV2 is " + @"disabled or the appHangTimeoutInterval is 0.", + self.integrationName); + } + + if (performanceDisabled) { + SENTRY_LOG_DEBUG(@"Not going to enable %@ because enableAutoPerformanceTracing and " + @"isTracingEnabled are disabled.", + self.integrationName); + } + + return NO; + } +#endif // SENTRY_HAS_UIKIT + } + return YES; } diff --git a/Pods/Sentry/Sources/Sentry/SentryBinaryImageCache.m b/Pods/Sentry/Sources/Sentry/SentryBinaryImageCache.m index ae28dc897..e07004ea4 100644 --- a/Pods/Sentry/Sources/Sentry/SentryBinaryImageCache.m +++ b/Pods/Sentry/Sources/Sentry/SentryBinaryImageCache.m @@ -1,9 +1,12 @@ #import "SentryBinaryImageCache.h" #import "SentryCrashBinaryImageCache.h" +#include "SentryCrashUUIDConversion.h" #import "SentryDependencyContainer.h" #import "SentryInAppLogic.h" #import "SentryLog.h" +NS_ASSUME_NONNULL_BEGIN + static void binaryImageWasAdded(const SentryCrashBinaryImage *image); static void binaryImageWasRemoved(const SentryCrashBinaryImage *image); @@ -11,9 +14,8 @@ @implementation SentryBinaryImageInfo @end -@interface -SentryBinaryImageCache () -@property (nonatomic, strong) NSMutableArray *cache; +@interface SentryBinaryImageCache () +@property (nonatomic, strong, nullable) NSMutableArray *cache; - (void)binaryImageAdded:(const SentryCrashBinaryImage *)image; - (void)binaryImageRemoved:(const SentryCrashBinaryImage *)image; @end @@ -60,7 +62,9 @@ - (void)binaryImageAdded:(const SentryCrashBinaryImage *)image SentryBinaryImageInfo *newImage = [[SentryBinaryImageInfo alloc] init]; newImage.name = imageName; + newImage.UUID = [SentryBinaryImageCache convertUUID:image->uuid]; newImage.address = image->address; + newImage.vmAddress = image->vmAddress; newImage.size = image->size; @synchronized(self) { @@ -81,6 +85,17 @@ - (void)binaryImageAdded:(const SentryCrashBinaryImage *)image } } ++ (NSString *_Nullable)convertUUID:(const unsigned char *const)value +{ + if (nil == value) { + return nil; + } + + char uuidBuffer[37]; + sentrycrashdl_convertBinaryImageUUID(value, uuidBuffer); + return [[NSString alloc] initWithCString:uuidBuffer encoding:NSASCIIStringEncoding]; +} + - (void)binaryImageRemoved:(const SentryCrashBinaryImage *)image { if (image == NULL) { @@ -128,16 +143,25 @@ - (NSInteger)indexOfImage:(uint64_t)address return -1; // Address not found } -- (nullable NSString *)pathForInAppInclude:(NSString *)inAppInclude +- (NSSet *)imagePathsForInAppInclude:(NSString *)inAppInclude { + NSMutableSet *imagePaths = [NSMutableSet new]; + @synchronized(self) { for (SentryBinaryImageInfo *info in _cache) { if ([SentryInAppLogic isImageNameInApp:info.name inAppInclude:inAppInclude]) { - return info.name; + [imagePaths addObject:info.name]; } } } - return nil; + return imagePaths; +} + +- (NSArray *)getAllBinaryImages +{ + @synchronized(self) { + return _cache.copy; + } } @end @@ -153,3 +177,5 @@ - (nullable NSString *)pathForInAppInclude:(NSString *)inAppInclude { [SentryDependencyContainer.sharedInstance.binaryImageCache binaryImageRemoved:image]; } + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryBreadcrumb.m b/Pods/Sentry/Sources/Sentry/SentryBreadcrumb.m index 238ab1f10..a0c5d64fd 100644 --- a/Pods/Sentry/Sources/Sentry/SentryBreadcrumb.m +++ b/Pods/Sentry/Sources/Sentry/SentryBreadcrumb.m @@ -1,20 +1,15 @@ #import "SentryBreadcrumb.h" +#import "SentryBreadcrumb+Private.h" #import "SentryDateUtils.h" #import "SentryLevelMapper.h" #import "SentryNSDictionarySanitize.h" #import "SentrySwift.h" -@interface -SentryBreadcrumb () -@property (atomic, strong) NSDictionary *_Nullable unknown; -@end - @implementation SentryBreadcrumb - (instancetype)initWithDictionary:(NSDictionary *)dictionary { if (self = [super init]) { - NSMutableDictionary *unknown = [NSMutableDictionary dictionary]; for (id key in dictionary) { id value = [dictionary valueForKey:key]; if (value == nil) { @@ -31,17 +26,14 @@ - (instancetype)initWithDictionary:(NSDictionary *)dictionary self.category = value; } else if ([key isEqualToString:@"type"] && isString) { self.type = value; + } else if ([key isEqualToString:@"origin"] && isString) { + self.origin = value; } else if ([key isEqualToString:@"message"] && isString) { self.message = value; } else if ([key isEqualToString:@"data"] && isDictionary) { self.data = value; - } else { - unknown[key] = value; } } - if (unknown.count > 0) { - self.unknown = [unknown copy]; - } } return self; } @@ -70,14 +62,9 @@ - (instancetype)init [serializedData setValue:sentry_toIso8601String(self.timestamp) forKey:@"timestamp"]; [serializedData setValue:self.category forKey:@"category"]; [serializedData setValue:self.type forKey:@"type"]; + [serializedData setValue:self.origin forKey:@"origin"]; [serializedData setValue:self.message forKey:@"message"]; [serializedData setValue:sentry_sanitize(self.data) forKey:@"data"]; - NSDictionary *unknown = self.unknown; - if (unknown != nil) { - for (id key in unknown) { - [serializedData setValue:unknown[key] forKey:key]; - } - } return serializedData; } @@ -107,13 +94,12 @@ - (BOOL)isEqualToBreadcrumb:(SentryBreadcrumb *)breadcrumb return NO; if (self.type != breadcrumb.type && ![self.type isEqualToString:breadcrumb.type]) return NO; + if (self.origin != breadcrumb.origin && ![self.origin isEqualToString:breadcrumb.origin]) + return NO; if (self.message != breadcrumb.message && ![self.message isEqualToString:breadcrumb.message]) return NO; if (self.data != breadcrumb.data && ![self.data isEqualToDictionary:breadcrumb.data]) return NO; - if (self.unknown != breadcrumb.unknown - && ![self.unknown isEqualToDictionary:breadcrumb.unknown]) - return NO; return YES; } @@ -124,9 +110,9 @@ - (NSUInteger)hash hash = hash * 23 + [self.category hash]; hash = hash * 23 + [self.timestamp hash]; hash = hash * 23 + [self.type hash]; + hash = hash * 23 + [self.origin hash]; hash = hash * 23 + [self.message hash]; hash = hash * 23 + [self.data hash]; - hash = hash * 23 + [self.unknown hash]; return hash; } diff --git a/Pods/Sentry/Sources/Sentry/SentryBreadcrumbTracker.m b/Pods/Sentry/Sources/Sentry/SentryBreadcrumbTracker.m index c01cac77b..ab55f93a4 100644 --- a/Pods/Sentry/Sources/Sentry/SentryBreadcrumbTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryBreadcrumbTracker.m @@ -25,8 +25,7 @@ static NSString *const SentryBreadcrumbTrackerSwizzleSendAction = @"SentryBreadcrumbTrackerSwizzleSendAction"; -@interface -SentryBreadcrumbTracker () +@interface SentryBreadcrumbTracker () #if SENTRY_HAS_REACHABILITY #endif // !TARGET_OS_WATCH @@ -35,7 +34,9 @@ @end -@implementation SentryBreadcrumbTracker +@implementation SentryBreadcrumbTracker { + BOOL _reportAccessibilityIdentifier; +} #if SENTRY_HAS_REACHABILITY - (void)dealloc @@ -44,6 +45,14 @@ - (void)dealloc } #endif // !TARGET_OS_WATCH +- (instancetype)initReportAccessibilityIdentifier:(BOOL)report +{ + if (self = [super init]) { + _reportAccessibilityIdentifier = report; + } + return self; +} + - (void)startWithDelegate:(id)delegate { _delegate = delegate; @@ -212,7 +221,9 @@ - (void)swizzleSendAction NSDictionary *data = nil; for (UITouch *touch in event.allTouches) { if (touch.phase == UITouchPhaseCancelled || touch.phase == UITouchPhaseEnded) { - data = [SentryBreadcrumbTracker extractDataFromView:touch.view]; + data = [SentryBreadcrumbTracker + extractDataFromView:touch.view + withAccessibilityIdentifier:self->_reportAccessibilityIdentifier]; } } @@ -242,12 +253,12 @@ - (void)swizzleViewDidAppear SentrySwizzleMode mode = SentrySwizzleModeOncePerClassAndSuperclasses; -# if defined(TEST) || defined(TESTCI) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) // some tests need to swizzle multiple times, once for each test case. but since they're in the // same process, if they set something other than "always", subsequent swizzles fail. override // it here for tests mode = SentrySwizzleModeAlways; -# endif // defined(TEST) || defined(TESTCI) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) SentrySwizzleInstanceMethod(UIViewController.class, selector, SentrySWReturnType(void), SentrySWArguments(BOOL animated), SentrySWReplacement({ @@ -265,6 +276,7 @@ - (void)swizzleViewDidAppear } + (NSDictionary *)extractDataFromView:(UIView *)view + withAccessibilityIdentifier:(BOOL)includeIdentifier { NSMutableDictionary *result = @{ @"view" : [NSString stringWithFormat:@"%@", view] }.mutableCopy; @@ -273,7 +285,8 @@ + (NSDictionary *)extractDataFromView:(UIView *)view [result setValue:[NSNumber numberWithInteger:view.tag] forKey:@"tag"]; } - if (view.accessibilityIdentifier && ![view.accessibilityIdentifier isEqualToString:@""]) { + if (includeIdentifier && view.accessibilityIdentifier + && ![view.accessibilityIdentifier isEqualToString:@""]) { [result setValue:view.accessibilityIdentifier forKey:@"accessibilityIdentifier"]; } @@ -291,7 +304,7 @@ + (NSDictionary *)fetchInfoAboutViewController:(UIViewController *)controller { NSMutableDictionary *info = @{}.mutableCopy; - info[@"screen"] = [SwiftDescriptor getObjectClassName:controller]; + info[@"screen"] = [SwiftDescriptor getViewControllerClassName:controller]; if ([controller.navigationItem.title length] != 0) { info[@"title"] = controller.navigationItem.title; @@ -303,12 +316,12 @@ + (NSDictionary *)fetchInfoAboutViewController:(UIViewController *)controller if (controller.presentingViewController != nil) { info[@"presentingViewController"] = - [SwiftDescriptor getObjectClassName:controller.presentingViewController]; + [SwiftDescriptor getViewControllerClassName:controller.presentingViewController]; } if (controller.parentViewController != nil) { info[@"parentViewController"] = - [SwiftDescriptor getObjectClassName:controller.parentViewController]; + [SwiftDescriptor getViewControllerClassName:controller.parentViewController]; } if (controller.view.window != nil) { @@ -322,6 +335,7 @@ + (NSDictionary *)fetchInfoAboutViewController:(UIViewController *)controller return info; } + #endif // SENTRY_HAS_UIKIT @end diff --git a/Pods/Sentry/Sources/Sentry/SentryBuildAppStartSpans.m b/Pods/Sentry/Sources/Sentry/SentryBuildAppStartSpans.m index 2d344bef1..473b09915 100644 --- a/Pods/Sentry/Sources/Sentry/SentryBuildAppStartSpans.m +++ b/Pods/Sentry/Sources/Sentry/SentryBuildAppStartSpans.m @@ -2,9 +2,9 @@ #import "SentrySpan.h" #import "SentrySpanContext+Private.h" #import "SentrySpanId.h" -#import "SentryTraceOrigins.h" +#import "SentrySwift.h" +#import "SentryTraceOrigin.h" #import "SentryTracer.h" -#import #import #if SENTRY_HAS_UIKIT @@ -26,7 +26,8 @@ } NSArray * -sentryBuildAppStartSpans(SentryTracer *tracer, SentryAppStartMeasurement *appStartMeasurement) +sentryBuildAppStartSpans( + SentryTracer *tracer, SentryAppStartMeasurement *_Nullable appStartMeasurement) { if (appStartMeasurement == nil) { diff --git a/Pods/Sentry/Sources/Sentry/SentryByteCountFormatter.m b/Pods/Sentry/Sources/Sentry/SentryByteCountFormatter.m index 94855c729..4ae06454f 100644 --- a/Pods/Sentry/Sources/Sentry/SentryByteCountFormatter.m +++ b/Pods/Sentry/Sources/Sentry/SentryByteCountFormatter.m @@ -21,7 +21,7 @@ + (NSString *)bytesCountDescription:(unsigned long)bytes [formatter setPositiveFormat:@"#,##0"]; return [NSString stringWithFormat:@"%@ %@", - [formatter stringFromNumber:[NSNumber numberWithDouble:result]], units[index]]; + [formatter stringFromNumber:[NSNumber numberWithDouble:result]], units[index]]; } @end diff --git a/Pods/Sentry/Sources/Sentry/SentryClient.m b/Pods/Sentry/Sources/Sentry/SentryClient.m index 03db338fe..39fdcbc6a 100644 --- a/Pods/Sentry/Sources/Sentry/SentryClient.m +++ b/Pods/Sentry/Sources/Sentry/SentryClient.m @@ -5,7 +5,7 @@ #import "SentryCrashDefaultMachineContextWrapper.h" #import "SentryCrashIntegration.h" #import "SentryCrashStackEntryMapper.h" -#import "SentryDebugImageProvider.h" +#import "SentryDebugImageProvider+HybridSDKs.h" #import "SentryDependencyContainer.h" #import "SentryDispatchQueueWrapper.h" #import "SentryDsn.h" @@ -33,6 +33,7 @@ #import "SentryRandom.h" #import "SentrySDK+Private.h" #import "SentryScope+Private.h" +#import "SentrySdkInfo.h" #import "SentrySerialization.h" #import "SentrySession.h" #import "SentryStacktraceBuilder.h" @@ -55,8 +56,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryClient () +@interface SentryClient () @property (nonatomic, strong) SentryTransportAdapter *transportAdapter; @property (nonatomic, strong) SentryDebugImageProvider *debugImageProvider; @@ -87,7 +87,7 @@ - (nullable instancetype)initWithOptions:(SentryOptions *)options dispatchQueueWrapper:dispatchQueue error:&error]; if (error != nil) { - SENTRY_LOG_ERROR(@"Cannot init filesystem."); + SENTRY_LOG_FATAL(@"Failed to initialize file system: %@", error.localizedDescription); return nil; } return [self initWithOptions:options @@ -100,10 +100,10 @@ - (instancetype)initWithOptions:(SentryOptions *)options fileManager:(SentryFileManager *)fileManager deleteOldEnvelopeItems:(BOOL)deleteOldEnvelopeItems { - NSArray> *transports = [SentryTransportFactory - initTransports:options - sentryFileManager:fileManager - currentDateProvider:SentryDependencyContainer.sharedInstance.dateProvider]; + NSArray> *transports = + [SentryTransportFactory initTransports:options + sentryFileManager:fileManager + rateLimits:SentryDependencyContainer.sharedInstance.rateLimits]; SentryTransportAdapter *transportAdapter = [[SentryTransportAdapter alloc] initWithTransports:transports options:options]; @@ -129,6 +129,7 @@ - (instancetype)initWithOptions:(SentryOptions *)options fileManager:fileManager deleteOldEnvelopeItems:deleteOldEnvelopeItems threadInspector:threadInspector + debugImageProvider:[SentryDependencyContainer sharedInstance].debugImageProvider random:[SentryDependencyContainer sharedInstance].random locale:[NSLocale autoupdatingCurrentLocale] timezone:[NSCalendar autoupdatingCurrentCalendar].timeZone]; @@ -139,6 +140,7 @@ - (instancetype)initWithOptions:(SentryOptions *)options fileManager:(SentryFileManager *)fileManager deleteOldEnvelopeItems:(BOOL)deleteOldEnvelopeItems threadInspector:(SentryThreadInspector *)threadInspector + debugImageProvider:(SentryDebugImageProvider *)debugImageProvider random:(id)random locale:(NSLocale *)locale timezone:(NSTimeZone *)timezone @@ -150,7 +152,7 @@ - (instancetype)initWithOptions:(SentryOptions *)options self.fileManager = fileManager; self.threadInspector = threadInspector; self.random = random; - self.debugImageProvider = [SentryDependencyContainer sharedInstance].debugImageProvider; + self.debugImageProvider = debugImageProvider; self.locale = locale; self.timezone = timezone; self.attachmentProcessors = [[NSMutableArray alloc] init]; @@ -334,22 +336,38 @@ - (SentryException *)exceptionForError:(NSError *)error return exception; } -- (SentryId *)captureCrashEvent:(SentryEvent *)event withScope:(SentryScope *)scope +- (SentryId *)captureFatalEvent:(SentryEvent *)event withScope:(SentryScope *)scope { - return [self sendEvent:event withScope:scope alwaysAttachStacktrace:NO isCrashEvent:YES]; + return [self sendEvent:event withScope:scope alwaysAttachStacktrace:NO isFatalEvent:YES]; } -- (SentryId *)captureCrashEvent:(SentryEvent *)event +- (SentryId *)captureFatalEvent:(SentryEvent *)event withSession:(SentrySession *)session withScope:(SentryScope *)scope { SentryEvent *preparedEvent = [self prepareEvent:event withScope:scope alwaysAttachStacktrace:NO - isCrashEvent:YES]; + isFatalEvent:YES]; return [self sendEvent:preparedEvent withSession:session withScope:scope]; } +- (void)saveCrashTransaction:(SentryTransaction *)transaction withScope:(SentryScope *)scope +{ + SentryEvent *preparedEvent = [self prepareEvent:transaction + withScope:scope + alwaysAttachStacktrace:NO + isFatalEvent:NO]; + + if (preparedEvent == nil) { + return; + } + + SentryTraceContext *traceContext = [self getTraceStateWithEvent:transaction withScope:scope]; + + [self.transportAdapter storeEvent:preparedEvent traceContext:traceContext]; +} + - (SentryId *)captureEvent:(SentryEvent *)event { return [self captureEvent:event withScope:[[SentryScope alloc] init]]; @@ -367,7 +385,7 @@ - (SentryId *)captureEvent:(SentryEvent *)event return [self sendEvent:event withScope:scope alwaysAttachStacktrace:NO - isCrashEvent:NO + isFatalEvent:NO additionalEnvelopeItems:additionalEnvelopeItems]; } @@ -378,7 +396,7 @@ - (SentryId *)sendEvent:(SentryEvent *)event return [self sendEvent:event withScope:scope alwaysAttachStacktrace:alwaysAttachStacktrace - isCrashEvent:NO]; + isFatalEvent:NO]; } - (nullable SentryTraceContext *)getTraceStateWithEvent:(SentryEvent *)event @@ -414,25 +432,25 @@ - (nullable SentryTraceContext *)getTraceStateWithEvent:(SentryEvent *)event - (SentryId *)sendEvent:(SentryEvent *)event withScope:(SentryScope *)scope alwaysAttachStacktrace:(BOOL)alwaysAttachStacktrace - isCrashEvent:(BOOL)isCrashEvent + isFatalEvent:(BOOL)isFatalEvent { return [self sendEvent:event withScope:scope alwaysAttachStacktrace:alwaysAttachStacktrace - isCrashEvent:isCrashEvent + isFatalEvent:isFatalEvent additionalEnvelopeItems:@[]]; } - (SentryId *)sendEvent:(SentryEvent *)event withScope:(SentryScope *)scope alwaysAttachStacktrace:(BOOL)alwaysAttachStacktrace - isCrashEvent:(BOOL)isCrashEvent + isFatalEvent:(BOOL)isFatalEvent additionalEnvelopeItems:(NSArray *)additionalEnvelopeItems { SentryEvent *preparedEvent = [self prepareEvent:event withScope:scope alwaysAttachStacktrace:alwaysAttachStacktrace - isCrashEvent:isCrashEvent]; + isFatalEvent:isFatalEvent]; if (preparedEvent == nil) { return SentryId.empty; @@ -440,13 +458,8 @@ - (SentryId *)sendEvent:(SentryEvent *)event SentryTraceContext *traceContext = [self getTraceStateWithEvent:event withScope:scope]; - NSArray *attachments = scope.attachments; - if (self.attachmentProcessors.count) { - for (id attachmentProcessor in self.attachmentProcessors) { - attachments = [attachmentProcessor processAttachments:attachments - forEvent:preparedEvent]; - } - } + NSArray *attachments = [self processAttachmentsForEvent:preparedEvent + attachments:scope.attachments]; [self.transportAdapter sendEvent:preparedEvent traceContext:traceContext @@ -460,41 +473,34 @@ - (SentryId *)sendEvent:(SentryEvent *)event withSession:(SentrySession *)session withScope:(SentryScope *)scope { - if (nil != event) { - NSArray *attachments = scope.attachments; - if (self.attachmentProcessors.count) { - for (id attachmentProcessor in self - .attachmentProcessors) { - attachments = [attachmentProcessor processAttachments:attachments forEvent:event]; - } - } - - if (event.isCrashEvent && event.context[@"replay"] && - [event.context[@"replay"] isKindOfClass:NSDictionary.class]) { - NSDictionary *replay = event.context[@"replay"]; - scope.replayId = replay[@"replay_id"]; - } + if (event == nil) { + return SentryId.empty; + } - SentryTraceContext *traceContext = [self getTraceStateWithEvent:event withScope:scope]; + NSArray *attachments = [self processAttachmentsForEvent:event + attachments:scope.attachments]; - if (nil == session.releaseName || [session.releaseName length] == 0) { - SENTRY_LOG_DEBUG(DropSessionLogMessage); + if (event.isFatalEvent && event.context[@"replay"] && + [event.context[@"replay"] isKindOfClass:NSDictionary.class]) { + NSDictionary *replay = event.context[@"replay"]; + scope.replayId = replay[@"replay_id"]; + } - [self.transportAdapter sendEvent:event - traceContext:traceContext - attachments:attachments]; - return event.eventId; - } + SentryTraceContext *traceContext = [self getTraceStateWithEvent:event withScope:scope]; - [self.transportAdapter sendEvent:event - withSession:session - traceContext:traceContext - attachments:attachments]; + if (nil == session.releaseName || [session.releaseName length] == 0) { + SENTRY_LOG_DEBUG(DropSessionLogMessage); + [self.transportAdapter sendEvent:event traceContext:traceContext attachments:attachments]; return event.eventId; } - return SentryId.empty; + [self.transportAdapter sendEvent:event + withSession:session + traceContext:traceContext + attachments:attachments]; + + return event.eventId; } - (void)captureSession:(SentrySession *)session @@ -536,10 +542,17 @@ - (void)captureReplayEvent:(SentryReplayEvent *)replayEvent return; } - SentryEnvelope *envelope = [[SentryEnvelope alloc] - initWithHeader:[[SentryEnvelopeHeader alloc] initWithId:replayEvent.eventId] - items:@[ videoEnvelopeItem ]]; - + // Hybrid SDKs may override the sdk info for a replay Event, + // the same SDK should be used for the envelope header. + SentrySdkInfo *sdkInfo = replayEvent.sdk ? [[SentrySdkInfo alloc] initWithDict:replayEvent.sdk] + : [SentrySdkInfo global]; + SentryEnvelopeHeader *envelopeHeader = + [[SentryEnvelopeHeader alloc] initWithId:replayEvent.eventId + sdkInfo:sdkInfo + traceContext:nil]; + + SentryEnvelope *envelope = [[SentryEnvelope alloc] initWithHeader:envelopeHeader + items:@[ videoEnvelopeItem ]]; [self captureEnvelope:envelope]; } @@ -568,6 +581,45 @@ - (void)captureUserFeedback:(SentryUserFeedback *)userFeedback [self.transportAdapter sendUserFeedback:userFeedback]; } +- (void)captureFeedback:(SentryFeedback *)feedback withScope:(SentryScope *)scope +{ + if ([self isDisabled]) { + [self logDisabledMessage]; + return; + } + + SentryEvent *feedbackEvent = [[SentryEvent alloc] init]; + feedbackEvent.eventId = feedback.eventId; + feedbackEvent.type = SentryEnvelopeItemTypeFeedback; + + NSDictionary *serializedFeedback = [feedback serialize]; + + NSUInteger optionalItems = (scope.span == nil ? 0 : 1) + (scope.replayId == nil ? 0 : 1); + NSMutableDictionary *context = [NSMutableDictionary dictionaryWithCapacity:1 + optionalItems]; + context[@"feedback"] = serializedFeedback; + + if (scope.replayId != nil) { + NSMutableDictionary *replayContext = [NSMutableDictionary dictionaryWithCapacity:1]; + replayContext[@"replay_id"] = scope.replayId; + context[@"replay"] = replayContext; + } + + feedbackEvent.context = context; + + SentryEvent *preparedEvent = [self prepareEvent:feedbackEvent + withScope:scope + alwaysAttachStacktrace:NO]; + SentryTraceContext *traceContext = [self getTraceStateWithEvent:preparedEvent withScope:scope]; + NSArray *attachments = [[self processAttachmentsForEvent:preparedEvent + attachments:scope.attachments] + arrayByAddingObjectsFromArray:[feedback attachmentsForEnvelope]]; + + [self.transportAdapter sendEvent:preparedEvent + traceContext:traceContext + attachments:attachments + additionalEnvelopeItems:@[]]; +} + - (void)storeEnvelope:(SentryEnvelope *)envelope { [self.fileManager storeEnvelope:envelope]; @@ -592,7 +644,7 @@ - (SentryEvent *_Nullable)prepareEvent:(SentryEvent *)event return [self prepareEvent:event withScope:scope alwaysAttachStacktrace:alwaysAttachStacktrace - isCrashEvent:NO]; + isFatalEvent:NO]; } - (void)flush:(NSTimeInterval)timeout @@ -610,7 +662,7 @@ - (void)close - (SentryEvent *_Nullable)prepareEvent:(SentryEvent *)event withScope:(SentryScope *)scope alwaysAttachStacktrace:(BOOL)alwaysAttachStacktrace - isCrashEvent:(BOOL)isCrashEvent + isFatalEvent:(BOOL)isFatalEvent { NSParameterAssert(event); if (event == nil) { @@ -626,6 +678,8 @@ - (SentryEvent *_Nullable)prepareEvent:(SentryEvent *)event = event.type == nil || ![event.type isEqualToString:SentryEnvelopeItemTypeTransaction]; BOOL eventIsNotReplay = event.type == nil || ![event.type isEqualToString:SentryEnvelopeItemTypeReplayVideo]; + BOOL eventIsNotUserFeedback + = event.type == nil || ![event.type isEqualToString:SentryEnvelopeItemTypeFeedback]; // Transactions and replays have their own sampleRate if (eventIsNotATransaction && eventIsNotReplay && [self isSampled:self.options.sampleRate]) { @@ -655,56 +709,61 @@ - (SentryEvent *_Nullable)prepareEvent:(SentryEvent *)event [self setSdk:event]; - // We don't want to attach debug meta and stacktraces for transactions and replays. - if (eventIsNotATransaction && eventIsNotReplay) { + // We don't want to attach debug meta and stacktraces for transactions, replays or user + // feedback. + if (eventIsNotATransaction && eventIsNotReplay && eventIsNotUserFeedback) { BOOL shouldAttachStacktrace = alwaysAttachStacktrace || self.options.attachStacktrace || (nil != event.exceptions && [event.exceptions count] > 0); BOOL threadsNotAttached = !(nil != event.threads && event.threads.count > 0); - if (!isCrashEvent && shouldAttachStacktrace && threadsNotAttached) { + if (!isFatalEvent && shouldAttachStacktrace && threadsNotAttached) { event.threads = [self.threadInspector getCurrentThreads]; } -#if SENTRY_HAS_UIKIT - if (!isCrashEvent) { - NSMutableDictionary *context = - [event.context mutableCopy] ?: [NSMutableDictionary dictionary]; - if (context[@"app"] == nil - || ([context[@"app"] isKindOfClass:NSDictionary.self] - && context[@"app"][@"in_foreground"] == nil)) { - NSMutableDictionary *app = [(NSDictionary *)context[@"app"] mutableCopy] - ?: [NSMutableDictionary dictionary]; - context[@"app"] = app; - - UIApplicationState appState = - [SentryDependencyContainer sharedInstance].application.applicationState; - BOOL inForeground = appState == UIApplicationStateActive; - app[@"in_foreground"] = @(inForeground); - event.context = context; - } - } -#endif - BOOL debugMetaNotAttached = !(nil != event.debugMeta && event.debugMeta.count > 0); - if (!isCrashEvent && shouldAttachStacktrace && debugMetaNotAttached + if (!isFatalEvent && shouldAttachStacktrace && debugMetaNotAttached && event.threads != nil) { - event.debugMeta = [self.debugImageProvider getDebugImagesForThreads:event.threads - isCrash:NO]; + event.debugMeta = + [self.debugImageProvider getDebugImagesFromCacheForThreads:event.threads]; } } - event = [scope applyToEvent:event maxBreadcrumb:self.options.maxBreadcrumbs]; +#if SENTRY_HAS_UIKIT + if (!isFatalEvent && eventIsNotReplay) { + NSMutableDictionary *context = + [event.context mutableCopy] ?: [NSMutableDictionary dictionary]; + if (context[@"app"] == nil + || ([context[@"app"] isKindOfClass:NSDictionary.self] + && context[@"app"][@"in_foreground"] == nil)) { + NSMutableDictionary *app = + [(NSDictionary *)context[@"app"] mutableCopy] ?: [NSMutableDictionary dictionary]; + context[@"app"] = app; + + UIApplicationState appState = + [SentryDependencyContainer sharedInstance].application.applicationState; + BOOL inForeground = appState == UIApplicationStateActive; + app[@"in_foreground"] = @(inForeground); + event.context = context; + } + } +#endif + + // Crash events are from a previous run. Applying the current scope would potentially apply + // current data. + if (!isFatalEvent) { + event = [scope applyToEvent:event maxBreadcrumb:self.options.maxBreadcrumbs]; + } if (!eventIsNotReplay) { event.breadcrumbs = nil; } - if ([self isWatchdogTermination:event isCrashEvent:isCrashEvent]) { + if ([self isWatchdogTermination:event isFatalEvent:isFatalEvent]) { // Remove some mutable properties from the device/app contexts which are no longer // applicable [self removeExtraDeviceContextFromEvent:event]; - } else if (!isCrashEvent) { + } else if (!isFatalEvent) { // Store the current free memory battery level and more mutable properties, // at the time of this event, but not for crashes as the current data isn't guaranteed to be // the same as when the app crashed. @@ -799,7 +858,7 @@ - (SentryEvent *_Nullable)prepareEvent:(SentryEvent *)event } } - if (event != nil && isCrashEvent && nil != self.options.onCrashedLastRun + if (event != nil && isFatalEvent && nil != self.options.onCrashedLastRun && !SentrySDK.crashedLastRunCalled) { // We only want to call the callback once. It can occur that multiple crash events are // about to be sent. @@ -863,26 +922,7 @@ - (void)setSdk:(SentryEvent *)event return; } - id integrations = event.extra[@"__sentry_sdk_integrations"]; - if (!integrations) { - integrations = [SentrySDK.currentHub trimmedInstalledIntegrationNames]; - -#if SENTRY_HAS_UIKIT - if (self.options.enablePreWarmedAppStartTracing) { - [integrations addObject:@"PreWarmedAppStartTracing"]; - } -#endif - } - - NSArray *features = - [SentryEnabledFeaturesBuilder getEnabledFeaturesWithOptions:self.options]; - - event.sdk = @{ - @"name" : SentryMeta.sdkName, - @"version" : SentryMeta.versionString, - @"integrations" : integrations, - @"features" : features - }; + event.sdk = [[[SentrySdkInfo alloc] initWithOptions:self.options] serialize]; } - (void)setUserInfo:(NSDictionary *)userInfo withEvent:(SentryEvent *)event @@ -911,9 +951,9 @@ - (void)setUserIdIfNoUserSet:(SentryEvent *)event } } -- (BOOL)isWatchdogTermination:(SentryEvent *)event isCrashEvent:(BOOL)isCrashEvent +- (BOOL)isWatchdogTermination:(SentryEvent *)event isFatalEvent:(BOOL)isFatalEvent { - if (!isCrashEvent) { + if (!isFatalEvent) { return NO; } @@ -985,7 +1025,7 @@ - (void)applyCurrentViewNamesToEventContext:(SentryEvent *)event withScope:(Sent app[@"view_names"] = @[ scope.currentScreen ]; } else { app[@"view_names"] = [SentryDependencyContainer.sharedInstance - .application relevantViewControllersNames]; + .application relevantViewControllersNames]; } } }]; @@ -1001,6 +1041,7 @@ - (void)removeExtraDeviceContextFromEvent:(SentryEvent *)event [device removeObjectForKey:@"orientation"]; [device removeObjectForKey:@"charging"]; [device removeObjectForKey:@"battery_level"]; + [device removeObjectForKey:@"thermal_state"]; }]; [self modifyContext:event @@ -1051,6 +1092,23 @@ - (void)removeAttachmentProcessor:(id)attachmen [self.attachmentProcessors removeObject:attachmentProcessor]; } +- (NSArray *)processAttachmentsForEvent:(SentryEvent *)event + attachments: + (NSArray *)attachments +{ + if (self.attachmentProcessors.count == 0) { + return attachments; + } + + NSArray *processedAttachments = attachments; + + for (id attachmentProcessor in self.attachmentProcessors) { + processedAttachments = [attachmentProcessor processAttachments:attachments forEvent:event]; + } + + return processedAttachments; +} + @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryClientReport.m b/Pods/Sentry/Sources/Sentry/SentryClientReport.m index 5ab77a407..2fbd12cd1 100644 --- a/Pods/Sentry/Sources/Sentry/SentryClientReport.m +++ b/Pods/Sentry/Sources/Sentry/SentryClientReport.m @@ -1,7 +1,6 @@ #import "SentryClientReport.h" #import "SentryDependencyContainer.h" #import "SentrySwift.h" -#import #import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/SentryConcurrentRateLimitsDictionary.m b/Pods/Sentry/Sources/Sentry/SentryConcurrentRateLimitsDictionary.m index a8082bd44..58b05e857 100644 --- a/Pods/Sentry/Sources/Sentry/SentryConcurrentRateLimitsDictionary.m +++ b/Pods/Sentry/Sources/Sentry/SentryConcurrentRateLimitsDictionary.m @@ -1,8 +1,6 @@ #import "SentryConcurrentRateLimitsDictionary.h" -#import -@interface -SentryConcurrentRateLimitsDictionary () +@interface SentryConcurrentRateLimitsDictionary () /* Key is the type and value is valid until date */ @property (nonatomic, strong) NSMutableDictionary *rateLimits; diff --git a/Pods/Sentry/Sources/Sentry/SentryCoreDataTracker.m b/Pods/Sentry/Sources/Sentry/SentryCoreDataTracker.m index 11474ca3e..797882abf 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCoreDataTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryCoreDataTracker.m @@ -9,11 +9,12 @@ #import "SentrySDK+Private.h" #import "SentryScope+Private.h" #import "SentrySpan.h" +#import "SentrySpanOperation.h" #import "SentrySpanProtocol.h" #import "SentryStacktrace.h" #import "SentrySwift.h" #import "SentryThreadInspector.h" -#import "SentryTraceOrigins.h" +#import "SentryTraceOrigin.h" @implementation SentryCoreDataTracker { SentryPredicateDescriptor *predicateDescriptor; @@ -37,17 +38,20 @@ - (NSArray *)managedObjectContext:(NSManagedObjectContext *)context error:(NSError **)error originalImp:(NSArray *(NS_NOESCAPE ^)(NSFetchRequest *, NSError **))original { - __block id fetchSpan; - [SentrySDK.currentHub.scope useSpan:^(id _Nullable span) { - fetchSpan = [span startChildWithOperation:SENTRY_COREDATA_FETCH_OPERATION - description:[self descriptionFromRequest:request]]; - fetchSpan.origin = SentryTraceOriginAutoDBCoreData; - }]; + id _Nullable currentSpan = [SentrySDK.currentHub.scope span]; + id _Nullable fetchSpan; + if (currentSpan) { + NSString *spanDescription = [self descriptionFromRequest:request]; + fetchSpan = [currentSpan startChildWithOperation:SentrySpanOperationCoredataFetchOperation + description:spanDescription]; + } if (fetchSpan) { + fetchSpan.origin = SentryTraceOriginAutoDBCoreData; + SENTRY_LOG_DEBUG(@"SentryCoreDataTracker automatically started a new span with " - @"description: %@, operation: %@", - fetchSpan.description, fetchSpan.operation); + @"description: %@, operation: %@, origin: %@", + fetchSpan.description, fetchSpan.operation, fetchSpan.origin); } NSArray *result = original(request, error); @@ -71,22 +75,25 @@ - (BOOL)managedObjectContext:(NSManagedObjectContext *)context originalImp:(BOOL(NS_NOESCAPE ^)(NSError **))original { - __block id saveSpan = nil; + __block id _Nullable saveSpan = nil; if (context.hasChanges) { __block NSDictionary *operations = [self groupEntitiesOperations:context]; - [SentrySDK.currentHub.scope useSpan:^(id _Nullable span) { - saveSpan = [span startChildWithOperation:SENTRY_COREDATA_SAVE_OPERATION - description:[self descriptionForOperations:operations - inContext:context]]; - saveSpan.origin = SentryTraceOriginAutoDBCoreData; - }]; + id _Nullable currentSpan = [SentrySDK.currentHub.scope span]; + if (currentSpan) { + NSString *spanDescription = [self descriptionForOperations:operations + inContext:context]; + saveSpan = [currentSpan startChildWithOperation:SentrySpanOperationCoredataSaveOperation + description:spanDescription]; + } if (saveSpan) { + saveSpan.origin = SentryTraceOriginAutoDBCoreData; + SENTRY_LOG_DEBUG(@"SentryCoreDataTracker automatically started a new span with " - @"description: %@, operation: %@", - saveSpan.description, saveSpan.operation); + @"description: %@, operation: %@, origin: %@", + saveSpan.description, saveSpan.operation, saveSpan.origin); [saveSpan setDataValue:operations forKey:@"operations"]; } else { @@ -145,10 +152,10 @@ - (NSString *)descriptionForOperations: if (items && items.count > 0) { if (items.count == 1) { [resultParts addObject:[NSString stringWithFormat:@"%@ %@ '%@'", op, - items.allValues[0], items.allKeys[0]]]; + items.allValues[0], items.allKeys[0]]]; } else { [resultParts addObject:[NSString stringWithFormat:@"%@ %lu items", op, - (unsigned long)total]]; + (unsigned long)total]]; } } }; @@ -197,7 +204,7 @@ - (NSString *)descriptionFromRequest:(NSFetchRequest *)request if (request.predicate) { [result appendFormat:@" WHERE %@", - [predicateDescriptor predicateDescription:request.predicate]]; + [predicateDescriptor predicateDescription:request.predicate]]; } if (request.sortDescriptors.count > 0) { diff --git a/Pods/Sentry/Sources/Sentry/SentryCoreDataTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryCoreDataTrackingIntegration.m index abf7f3b4e..02c2f8557 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCoreDataTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryCoreDataTrackingIntegration.m @@ -8,8 +8,7 @@ #import "SentryOptions.h" #import "SentryThreadInspector.h" -@interface -SentryCoreDataTrackingIntegration () +@interface SentryCoreDataTrackingIntegration () @property (nonatomic, strong) SentryCoreDataTracker *tracker; diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashExceptionApplication.m b/Pods/Sentry/Sources/Sentry/SentryCrashExceptionApplication.m index c1da07774..576ece81b 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashExceptionApplication.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashExceptionApplication.m @@ -1,16 +1,18 @@ -#import "SentryCrashExceptionApplication.h" -#import "SentryCrash.h" -#import "SentryDependencyContainer.h" -#import "SentrySDK.h" - -@implementation SentryCrashExceptionApplication +#import #if TARGET_OS_OSX +# import "SentryCrash.h" +# import "SentryCrashExceptionApplication.h" +# import "SentryDependencyContainer.h" +# import "SentrySDK.h" +# import "SentryUncaughtNSExceptions.h" + +@implementation SentryCrashExceptionApplication + - (void)reportException:(NSException *)exception { - [[NSUserDefaults standardUserDefaults] - registerDefaults:@{ @"NSApplicationCrashOnExceptions" : @YES }]; + [SentryUncaughtNSExceptions configureCrashOnExceptions]; SentryCrash *crash = SentryDependencyContainer.sharedInstance.crashReporter; if (nil != crash.uncaughtExceptionHandler && nil != exception) { crash.uncaughtExceptionHandler(exception); @@ -24,6 +26,6 @@ - (void)_crashOnException:(NSException *)exception abort(); } -#endif - @end + +#endif // TARGET_OS_OSX diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashInstallationReporter.m b/Pods/Sentry/Sources/Sentry/SentryCrashInstallationReporter.m index 2717801dd..12426ea42 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashInstallationReporter.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashInstallationReporter.m @@ -7,8 +7,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryCrashInstallationReporter () +@interface SentryCrashInstallationReporter () @property (nonatomic, strong) SentryInAppLogic *inAppLogic; @property (nonatomic, strong) SentryCrashWrapper *crashWrapper; diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashIntegration.m b/Pods/Sentry/Sources/Sentry/SentryCrashIntegration.m index ba5d6dffd..01f23fcd9 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashIntegration.m @@ -1,6 +1,8 @@ #import "SentryCrashIntegration.h" #import "SentryCrashInstallationReporter.h" +#import "SentryCrashC.h" +#import "SentryCrashIntegrationSessionHandler.h" #include "SentryCrashMonitor_Signal.h" #import "SentryCrashWrapper.h" #import "SentryDispatchQueueWrapper.h" @@ -10,33 +12,47 @@ #import "SentryOptions.h" #import "SentrySDK+Private.h" #import "SentryScope+Private.h" -#import "SentrySessionCrashedHandler.h" +#import "SentrySpan+Private.h" +#import "SentryTracer.h" #import "SentryWatchdogTerminationLogic.h" #import #import #import #import #import -#import #if SENTRY_HAS_UIKIT # import "SentryUIApplication.h" # import #endif +#if TARGET_OS_OSX +# import "SentryUncaughtNSExceptions.h" +#endif // TARGET_OS_OSX + static dispatch_once_t installationToken = 0; static SentryCrashInstallationReporter *installation = nil; static NSString *const DEVICE_KEY = @"device"; static NSString *const LOCALE_KEY = @"locale"; -@interface -SentryCrashIntegration () +void +sentry_finishAndSaveTransaction(void) +{ + SentrySpan *span = SentrySDK.currentHub.scope.span; + + if (span != nil) { + SentryTracer *tracer = [span tracer]; + [tracer finishForCrash]; + } +} + +@interface SentryCrashIntegration () @property (nonatomic, weak) SentryOptions *options; @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueueWrapper; @property (nonatomic, strong) SentryCrashWrapper *crashAdapter; -@property (nonatomic, strong) SentrySessionCrashedHandler *crashedSessionHandler; +@property (nonatomic, strong) SentryCrashIntegrationSessionHandler *sessionHandler; @property (nonatomic, strong) SentryCrashScopeObserver *scopeObserver; @end @@ -78,12 +94,12 @@ - (BOOL)installWithOptions:(nonnull SentryOptions *)options [[SentryWatchdogTerminationLogic alloc] initWithOptions:options crashAdapter:self.crashAdapter appStateManager:appStateManager]; - self.crashedSessionHandler = - [[SentrySessionCrashedHandler alloc] initWithCrashWrapper:self.crashAdapter - watchdogTerminationLogic:logic]; + self.sessionHandler = + [[SentryCrashIntegrationSessionHandler alloc] initWithCrashWrapper:self.crashAdapter + watchdogTerminationLogic:logic]; #else - self.crashedSessionHandler = - [[SentrySessionCrashedHandler alloc] initWithCrashWrapper:self.crashAdapter]; + self.sessionHandler = + [[SentryCrashIntegrationSessionHandler alloc] initWithCrashWrapper:self.crashAdapter]; #endif // SENTRY_HAS_UIKIT self.scopeObserver = @@ -94,11 +110,23 @@ - (BOOL)installWithOptions:(nonnull SentryOptions *)options enableSigtermReporting = options.enableSigtermReporting; #endif // !TARGET_OS_WATCH + BOOL enableUncaughtNSExceptionReporting = NO; +#if TARGET_OS_OSX + if (options.enableSwizzling) { + enableUncaughtNSExceptionReporting = options.enableUncaughtNSExceptionReporting; + } +#endif // TARGET_OS_OSX + [self startCrashHandler:options.cacheDirectoryPath - enableSigtermReporting:enableSigtermReporting]; + enableSigtermReporting:enableSigtermReporting + enableReportingUncaughtExceptions:enableUncaughtNSExceptionReporting]; [self configureScope]; + if (options.enablePersistingTracesWhenCrashing) { + [self configureTracingWhenCrashing]; + } + return YES; } @@ -108,7 +136,8 @@ - (SentryIntegrationOption)integrationOptions } - (void)startCrashHandler:(NSString *)cacheDirectory - enableSigtermReporting:(BOOL)enableSigtermReporting + enableSigtermReporting:(BOOL)enableSigtermReporting + enableReportingUncaughtExceptions:(BOOL)enableReportingUncaughtExceptions { void (^block)(void) = ^{ BOOL canSendReports = NO; @@ -129,6 +158,13 @@ - (void)startCrashHandler:(NSString *)cacheDirectory [installation install:cacheDirectory]; +#if TARGET_OS_OSX + if (enableReportingUncaughtExceptions) { + [SentryUncaughtNSExceptions configureCrashOnExceptions]; + [SentryUncaughtNSExceptions swizzleNSApplicationReportException]; + } +#endif // TARGET_OS_OSX + // We need to send the crashed event together with the crashed session in the same envelope // to have proper statistics in release health. To achieve this we need both synchronously // in the hub. The crashed event is converted from a SentryCrashReport to an event in @@ -142,7 +178,7 @@ - (void)startCrashHandler:(NSString *)cacheDirectory // there and the AutoSessionTrackingIntegration can work properly. // // This is a pragmatic and not the most optimal place for this logic. - [self.crashedSessionHandler endCurrentSessionAsCrashedWhenCrashOrOOM]; + [self.sessionHandler endCurrentSessionIfRequired]; // We only need to send all reports on the first initialization of SentryCrash. If // SenryCrash was deactivated there are no new reports to send. Furthermore, the @@ -174,6 +210,8 @@ - (void)uninstall installationToken = 0; } + sentrycrash_setSaveTransaction(NULL); + [NSNotificationCenter.defaultCenter removeObserver:self name:NSCurrentLocaleDidChangeNotification object:nil]; @@ -224,4 +262,9 @@ - (void)currentLocaleDidChange }]; } +- (void)configureTracingWhenCrashing +{ + sentrycrash_setSaveTransaction(&sentry_finishAndSaveTransaction); +} + @end diff --git a/Pods/Sentry/Sources/Sentry/SentrySessionCrashedHandler.m b/Pods/Sentry/Sources/Sentry/SentryCrashIntegrationSessionHandler.m similarity index 52% rename from Pods/Sentry/Sources/Sentry/SentrySessionCrashedHandler.m rename to Pods/Sentry/Sources/Sentry/SentryCrashIntegrationSessionHandler.m index 3d067925f..9df2372df 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySessionCrashedHandler.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashIntegrationSessionHandler.m @@ -1,16 +1,16 @@ -#import "SentrySessionCrashedHandler.h" +#import "SentryCrashIntegrationSessionHandler.h" #import "SentryClient+Private.h" #import "SentryCrashWrapper.h" #import "SentryDependencyContainer.h" #import "SentryFileManager.h" #import "SentryHub.h" +#import "SentryLog.h" #import "SentrySDK+Private.h" #import "SentrySession.h" #import "SentrySwift.h" #import "SentryWatchdogTerminationLogic.h" -@interface -SentrySessionCrashedHandler () +@interface SentryCrashIntegrationSessionHandler () @property (nonatomic, strong) SentryCrashWrapper *crashWrapper; #if SENTRY_HAS_UIKIT @@ -19,7 +19,7 @@ @end -@implementation SentrySessionCrashedHandler +@implementation SentryCrashIntegrationSessionHandler #if SENTRY_HAS_UIKIT - (instancetype)initWithCrashWrapper:(SentryCrashWrapper *)crashWrapper @@ -37,31 +37,55 @@ - (instancetype)initWithCrashWrapper:(SentryCrashWrapper *)crashWrapper return self; } -- (void)endCurrentSessionAsCrashedWhenCrashOrOOM +- (void)endCurrentSessionIfRequired { + SentryFileManager *fileManager = [[[SentrySDK currentHub] getClient] fileManager]; + + if (nil == fileManager) { + SENTRY_LOG_DEBUG(@"File manager is nil. Cannot end current session."); + return; + } + + SentrySession *session = [fileManager readCurrentSession]; + if (session == nil) { + SENTRY_LOG_DEBUG(@"No current session found to end."); + return; + } + if (self.crashWrapper.crashedLastLaunch #if SENTRY_HAS_UIKIT || [self.watchdogTerminationLogic isWatchdogTermination] #endif // SENTRY_HAS_UIKIT ) { - SentryFileManager *fileManager = [[[SentrySDK currentHub] getClient] fileManager]; + NSDate *timeSinceLastCrash = [[SentryDependencyContainer.sharedInstance.dateProvider date] + dateByAddingTimeInterval:-self.crashWrapper.activeDurationSinceLastCrash]; - if (nil == fileManager) { + [session endSessionCrashedWithTimestamp:timeSinceLastCrash]; + [fileManager storeCrashedSession:session]; + [fileManager deleteCurrentSession]; + } +#if SENTRY_HAS_UIKIT + else { + // Checking the file existence is way cheaper than reading the file and parsing its contents + // to an SentryEvent. + if (![fileManager appHangEventExists]) { + SENTRY_LOG_DEBUG(@"No app hang event found. Won't end current session."); return; } - SentrySession *session = [fileManager readCurrentSession]; - if (nil == session) { + SentryEvent *appHangEvent = [fileManager readAppHangEvent]; + // Just in case the file was deleted between the check and the read. + if (appHangEvent == nil) { + SENTRY_LOG_WARN( + @"App hang event deleted between check and read. Cannot end current session."); return; } - NSDate *timeSinceLastCrash = [[SentryDependencyContainer.sharedInstance.dateProvider date] - dateByAddingTimeInterval:-self.crashWrapper.activeDurationSinceLastCrash]; - - [session endSessionCrashedWithTimestamp:timeSinceLastCrash]; - [fileManager storeCrashedSession:session]; + [session endSessionAbnormalWithTimestamp:appHangEvent.timestamp]; + [fileManager storeAbnormalSession:session]; [fileManager deleteCurrentSession]; } +#endif // SENTRY_HAS_UIKIT } @end diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashReportConverter.m b/Pods/Sentry/Sources/Sentry/SentryCrashReportConverter.m index 3772f4f8f..f947e2dde 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashReportConverter.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashReportConverter.m @@ -1,4 +1,5 @@ #import "SentryCrashReportConverter.h" +#import "SentryBreadcrumb+Private.h" #import "SentryBreadcrumb.h" #import "SentryCrashStackCursor.h" #import "SentryDateUtils.h" @@ -13,11 +14,11 @@ #import "SentryMechanism.h" #import "SentryMechanismMeta.h" #import "SentryStacktrace.h" +#import "SentrySwift.h" #import "SentryThread.h" #import "SentryUser.h" -@interface -SentryCrashReportConverter () +@interface SentryCrashReportConverter () @property (nonatomic, strong) NSDictionary *report; @property (nonatomic, assign) NSInteger crashedThreadIndex; @@ -25,6 +26,7 @@ @property (nonatomic, strong) NSArray *binaryImages; @property (nonatomic, strong) NSArray *threads; @property (nonatomic, strong) NSDictionary *systemContext; +@property (nonatomic, strong) NSDictionary *applicationStats; @property (nonatomic, strong) NSString *diagnosis; @property (nonatomic, strong) SentryInAppLogic *inAppLogic; @@ -38,7 +40,6 @@ - (instancetype)initWithReport:(NSDictionary *)report inAppLogic:(SentryInAppLog if (self) { self.report = report; self.inAppLogic = inAppLogic; - self.systemContext = report[@"system"]; NSDictionary *userContextUnMerged = report[@"user"]; if (userContextUnMerged == nil) { @@ -72,6 +73,11 @@ - (instancetype)initWithReport:(NSDictionary *)report inAppLogic:(SentryInAppLog self.diagnosis = crashContext[@"diagnosis"]; self.exceptionContext = crashContext[@"error"]; [self initThreads:crashContext[@"threads"]]; + + self.systemContext = report[@"system"]; + if (self.systemContext[@"application_stats"] != nil) { + self.applicationStats = self.systemContext[@"application_stats"]; + } } return self; } @@ -112,7 +118,23 @@ - (SentryEvent *_Nullable)convertReportToEvent event.dist = self.userContext[@"dist"]; event.environment = self.userContext[@"environment"]; - event.context = self.userContext[@"context"]; + + NSMutableDictionary *mutableContext = + [[NSMutableDictionary alloc] initWithDictionary:self.userContext[@"context"]]; + if (self.userContext[@"traceContext"]) { + mutableContext[@"trace"] = self.userContext[@"traceContext"]; + } + + NSMutableDictionary *appContext; + if (mutableContext[@"app"] != nil) { + appContext = [mutableContext[@"app"] mutableCopy]; + } else { + appContext = [NSMutableDictionary new]; + } + appContext[@"in_foreground"] = self.applicationStats[@"application_in_foreground"]; + mutableContext[@"app"] = appContext; + event.context = mutableContext; + event.extra = self.userContext[@"extra"]; event.tags = self.userContext[@"tags"]; // event.level we do not set the level here since this always resulted @@ -127,12 +149,11 @@ - (SentryEvent *_Nullable)convertReportToEvent // We want to set the release and dist to the version from the crash report // itself otherwise it can happend that we have two different version when // the app crashes right before an app update #218 #219 - NSDictionary *appContext = event.context[@"app"]; if (nil == event.releaseName && appContext[@"app_identifier"] && appContext[@"app_version"] && appContext[@"app_build"]) { event.releaseName = [NSString stringWithFormat:@"%@@%@+%@", appContext[@"app_identifier"], - appContext[@"app_version"], appContext[@"app_build"]]; + appContext[@"app_version"], appContext[@"app_build"]]; } if (nil == event.dist && appContext[@"app_build"]) { @@ -171,6 +192,7 @@ - (SentryUser *_Nullable)convertUser category:storedCrumb[@"category"]]; crumb.message = storedCrumb[@"message"]; crumb.type = storedCrumb[@"type"]; + crumb.origin = storedCrumb[@"origin"]; crumb.timestamp = sentry_fromIso8601String(storedCrumb[@"timestamp"]); crumb.data = storedCrumb[@"data"]; [breadcrumbs addObject:crumb]; @@ -363,22 +385,28 @@ - (SentryDebugMeta *)debugMetaFromBinaryImageDictionary:(NSDictionary *)sourceIm if ([exceptionType isEqualToString:@"nsexception"]) { exception = [self parseNSException]; } else if ([exceptionType isEqualToString:@"cpp_exception"]) { - exception = - [[SentryException alloc] initWithValue:self.exceptionContext[@"cpp_exception"][@"name"] - type:@"C++ Exception"]; + + NSString *cppExceptionName = self.exceptionContext[@"cpp_exception"][@"name"]; + NSString *cppExceptionReason = self.exceptionContext[@"reason"]; + + NSString *exceptionValue = + [NSString stringWithFormat:@"%@: %@", cppExceptionName, cppExceptionReason]; + + exception = [[SentryException alloc] initWithValue:exceptionValue type:@"C++ Exception"]; + } else if ([exceptionType isEqualToString:@"mach"]) { exception = [[SentryException alloc] initWithValue:[NSString stringWithFormat:@"Exception %@, Code %@, Subcode %@", - self.exceptionContext[@"mach"][@"exception"], - self.exceptionContext[@"mach"][@"code"], - self.exceptionContext[@"mach"][@"subcode"]] + self.exceptionContext[@"mach"][@"exception"], + self.exceptionContext[@"mach"][@"code"], + self.exceptionContext[@"mach"][@"subcode"]] type:self.exceptionContext[@"mach"][@"exception_name"]]; } else if ([exceptionType isEqualToString:@"signal"]) { - exception = [[SentryException alloc] - initWithValue:[NSString stringWithFormat:@"Signal %@, Code %@", - self.exceptionContext[@"signal"][@"signal"], - self.exceptionContext[@"signal"][@"code"]] - type:self.exceptionContext[@"signal"][@"name"]]; + exception = + [[SentryException alloc] initWithValue:[NSString stringWithFormat:@"Signal %@, Code %@", + self.exceptionContext[@"signal"][@"signal"], + self.exceptionContext[@"signal"][@"code"]] + type:self.exceptionContext[@"signal"][@"name"]]; } else if ([exceptionType isEqualToString:@"user"]) { NSString *exceptionReason = [NSString stringWithFormat:@"%@", self.exceptionContext[@"reason"]]; @@ -451,38 +479,11 @@ - (void)enhanceValueFromNotableAddresses:(SentryException *)exception } } if (reasons.count > 0) { - exception.value = - [[[reasons array] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] - componentsJoinedByString:@" > "]; + exception.value = [[[reasons array] sortedArrayUsingSelector:@selector + (localizedCaseInsensitiveCompare:)] componentsJoinedByString:@" > "]; } } -/** - * Get the message of fatalError, assert, and precondition to set it as the exception value if the - * crashInfo contains the message. - * - * Swift puts the messages of fatalError, assert, and precondition into the @c crashInfo of the - * @c libswiftCore.dylib. We found somewhat proof that the swift runtime uses @c __crash_info: - * fatalError (1) calls @c swift_reportError (2) calls @c reportOnCrash (3) which uses (4) the - * @c __crash_info (5). The documentation of Apple and Swift doesn't mention anything about where - * the @c __crash_info ends up. Trying fatalError, assert, and precondition on iPhone, iPhone - * simulator, and macOS all showed that the message ends up in the crashInfo of the - * @c libswiftCore.dylib. For example, on the simulator, other binary images also contain a - * @c crash_info_message with information about the stacktrace. We only care about the message of - * fatalError, assert, or precondition, and we already get the stacktrace from the threads, - * retrieving it from @c libswiftCore.dylib seems to be the most reliable option. - * - * @seealso - * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L365-L377 - * @seealso - * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L361 - * @seealso - * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L269-L293 - * @seealso - * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L264-L293 - * @seealso - * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/include/swift/Runtime/Debug.h#L29-L58 - */ - (void)enhanceValueFromCrashInfoMessage:(SentryException *)exception { NSMutableArray *crashInfoMessages = [NSMutableArray new]; diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashReportSink.m b/Pods/Sentry/Sources/Sentry/SentryCrashReportSink.m index 36958a66d..66475656e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashReportSink.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashReportSink.m @@ -19,8 +19,7 @@ static const NSTimeInterval SENTRY_APP_START_CRASH_DURATION_THRESHOLD = 2.0; static const NSTimeInterval SENTRY_APP_START_CRASH_FLUSH_DURATION = 5.0; -@interface -SentryCrashReportSink () +@interface SentryCrashReportSink () @property (nonatomic, strong) SentryInAppLogic *inAppLogic; @property (nonatomic, strong) SentryCrashWrapper *crashWrapper; @@ -101,7 +100,7 @@ - (void)handleConvertedEvent:(SentryEvent *)event } } - [SentrySDK captureCrashEvent:event withScope:scope]; + [SentrySDK captureFatalEvent:event withScope:scope]; } @end diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashScopeObserver.m b/Pods/Sentry/Sources/Sentry/SentryCrashScopeObserver.m index 8059e89ac..3b483ccd8 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashScopeObserver.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashScopeObserver.m @@ -1,5 +1,5 @@ #import "SentryLevelMapper.h" -#import +#import "SentrySwift.h" #import #import #import @@ -47,6 +47,12 @@ - (void)setContext:(nullable NSDictionary *)context syncToSentryCrash:^(const void *bytes) { sentrycrash_scopesync_setContext(bytes); }]; } +- (void)setTraceContext:(nullable NSDictionary *)traceContext +{ + [self syncScope:traceContext + syncToSentryCrash:^(const void *bytes) { sentrycrash_scopesync_setTraceContext(bytes); }]; +} + - (void)setExtras:(nullable NSDictionary *)extras { [self syncScope:extras diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashStackEntryMapper.m b/Pods/Sentry/Sources/Sentry/SentryCrashStackEntryMapper.m index d9ac3f94f..c117b8305 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashStackEntryMapper.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashStackEntryMapper.m @@ -4,12 +4,10 @@ #import "SentryFormatter.h" #import "SentryFrame.h" #import "SentryInAppLogic.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryCrashStackEntryMapper () +@interface SentryCrashStackEntryMapper () @property (nonatomic, strong) SentryInAppLogic *inAppLogic; diff --git a/Pods/Sentry/Sources/Sentry/SentryCrashWrapper.m b/Pods/Sentry/Sources/Sentry/SentryCrashWrapper.m index 0a3cd1c48..1b4976aa7 100644 --- a/Pods/Sentry/Sources/Sentry/SentryCrashWrapper.m +++ b/Pods/Sentry/Sources/Sentry/SentryCrashWrapper.m @@ -6,7 +6,6 @@ #import "SentryCrashMonitor_System.h" #import "SentryScope.h" #import "SentryUIDeviceWrapper.h" -#import #import #import #import @@ -132,7 +131,7 @@ - (void)enrichScope:(SentryScope *)scope #else NSOperatingSystemVersion version = [NSProcessInfo processInfo].operatingSystemVersion; NSString *systemVersion = [NSString stringWithFormat:@"%d.%d.%d", (int)version.majorVersion, - (int)version.minorVersion, (int)version.patchVersion]; + (int)version.minorVersion, (int)version.patchVersion]; [osData setValue:systemVersion forKey:@"version"]; #endif diff --git a/Pods/Sentry/Sources/Sentry/SentryDataCategoryMapper.m b/Pods/Sentry/Sources/Sentry/SentryDataCategoryMapper.m index 58d5a655e..11bf095a4 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDataCategoryMapper.m +++ b/Pods/Sentry/Sources/Sentry/SentryDataCategoryMapper.m @@ -1,8 +1,10 @@ #import "SentryDataCategoryMapper.h" #import "SentryDataCategory.h" #import "SentryEnvelopeItemType.h" -#import +// While these data categories names might look similar to the envelope item types, they are not +// identical, and have slight differences. Just open them side by side and you'll see the +// differences. NSString *const kSentryDataCategoryNameAll = @""; NSString *const kSentryDataCategoryNameDefault = @"default"; NSString *const kSentryDataCategoryNameError = @"error"; @@ -11,10 +13,11 @@ NSString *const kSentryDataCategoryNameAttachment = @"attachment"; NSString *const kSentryDataCategoryNameUserFeedback = @"user_report"; NSString *const kSentryDataCategoryNameProfile = @"profile"; -NSString *const kSentryDataCategoryNameProfileChunk = @"profile_chunk"; +NSString *const kSentryDataCategoryNameProfileChunk = @"profile_chunk_ui"; NSString *const kSentryDataCategoryNameReplay = @"replay"; NSString *const kSentryDataCategoryNameMetricBucket = @"metric_bucket"; NSString *const kSentryDataCategoryNameSpan = @"span"; +NSString *const kSentryDataCategoryNameFeedback = @"feedback"; NSString *const kSentryDataCategoryNameUnknown = @"unknown"; NS_ASSUME_NONNULL_BEGIN @@ -43,6 +46,9 @@ if ([itemType isEqualToString:SentryEnvelopeItemTypeReplayVideo]) { return kSentryDataCategoryReplay; } + if ([itemType isEqualToString:SentryEnvelopeItemTypeFeedback]) { + return kSentryDataCategoryFeedback; + } // The envelope item type used for metrics is statsd whereas the client report category for // discarded events is metric_bucket. if ([itemType isEqualToString:SentryEnvelopeItemTypeStatsd]) { @@ -101,6 +107,9 @@ if ([value isEqualToString:kSentryDataCategoryNameSpan]) { return kSentryDataCategorySpan; } + if ([value isEqualToString:kSentryDataCategoryNameFeedback]) { + return kSentryDataCategoryFeedback; + } return kSentryDataCategoryUnknown; } @@ -108,13 +117,10 @@ NSString * nameForSentryDataCategory(SentryDataCategory category) { - if (category < kSentryDataCategoryAll && category > kSentryDataCategoryUnknown) { - return kSentryDataCategoryNameUnknown; - } - switch (category) { case kSentryDataCategoryAll: return kSentryDataCategoryNameAll; + case kSentryDataCategoryDefault: return kSentryDataCategoryNameDefault; case kSentryDataCategoryError: @@ -133,12 +139,16 @@ return kSentryDataCategoryNameProfileChunk; case kSentryDataCategoryMetricBucket: return kSentryDataCategoryNameMetricBucket; - case kSentryDataCategoryUnknown: - return kSentryDataCategoryNameUnknown; case kSentryDataCategoryReplay: return kSentryDataCategoryNameReplay; case kSentryDataCategorySpan: return kSentryDataCategoryNameSpan; + case kSentryDataCategoryFeedback: + return kSentryDataCategoryNameFeedback; + + default: // !!!: fall-through! + case kSentryDataCategoryUnknown: + return kSentryDataCategoryNameUnknown; } } diff --git a/Pods/Sentry/Sources/Sentry/SentryDateUtil.m b/Pods/Sentry/Sources/Sentry/SentryDateUtil.m index ff7fb9fbc..d7166e40b 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDateUtil.m +++ b/Pods/Sentry/Sources/Sentry/SentryDateUtil.m @@ -3,16 +3,15 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryDateUtil () +@interface SentryDateUtil () -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @end @implementation SentryDateUtil -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.currentDateProvider = currentDateProvider; diff --git a/Pods/Sentry/Sources/Sentry/SentryDateUtils.m b/Pods/Sentry/Sources/Sentry/SentryDateUtils.m index 335fb27aa..0c9ac9c0e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDateUtils.m +++ b/Pods/Sentry/Sources/Sentry/SentryDateUtils.m @@ -42,8 +42,7 @@ return isoFormatter; } -NSDate * -sentry_fromIso8601String(NSString *string) +NSDate *_Nullable sentry_fromIso8601String(NSString *string) { NSDate *date = [sentryGetIso8601FormatterWithMillisecondPrecision() dateFromString:string]; if (nil == date) { diff --git a/Pods/Sentry/Sources/Sentry/SentryDebugImageProvider.m b/Pods/Sentry/Sources/Sentry/SentryDebugImageProvider.m index 8876f2413..f55ae8cab 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDebugImageProvider.m +++ b/Pods/Sentry/Sources/Sentry/SentryDebugImageProvider.m @@ -1,8 +1,10 @@ #import "SentryDebugImageProvider.h" +#import "SentryBinaryImageCache.h" #import "SentryCrashDefaultBinaryImageProvider.h" #import "SentryCrashDynamicLinker.h" #import "SentryCrashUUIDConversion.h" #import "SentryDebugMeta.h" +#import "SentryDependencyContainer.h" #import "SentryFormatter.h" #import "SentryFrame.h" #import "SentryInternalDefines.h" @@ -11,10 +13,13 @@ #import "SentryThread.h" #import -@interface -SentryDebugImageProvider () +NS_ASSUME_NONNULL_BEGIN + +@interface SentryDebugImageProvider () @property (nonatomic, strong) id binaryImageProvider; +@property (nonatomic, strong) SentryBinaryImageCache *binaryImageCache; + @end @implementation SentryDebugImageProvider @@ -24,16 +29,20 @@ - (instancetype)init SentryCrashDefaultBinaryImageProvider *provider = [[SentryCrashDefaultBinaryImageProvider alloc] init]; - self = [self initWithBinaryImageProvider:provider]; + self = [self + initWithBinaryImageProvider:provider + binaryImageCache:SentryDependencyContainer.sharedInstance.binaryImageCache]; return self; } /** Internal constructor for testing */ - (instancetype)initWithBinaryImageProvider:(id)binaryImageProvider + binaryImageCache:(SentryBinaryImageCache *)binaryImageCache { if (self = [super init]) { self.binaryImageProvider = binaryImageProvider; + self.binaryImageCache = binaryImageCache; } return self; } @@ -43,7 +52,10 @@ - (instancetype)initWithBinaryImageProvider:(id) { NSMutableArray *result = [NSMutableArray array]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" NSArray *binaryImages = [self getDebugImagesCrashed:isCrash]; +#pragma clang diagnostic pop for (SentryDebugMeta *sourceImage in binaryImages) { if ([addresses containsObject:sourceImage.imageAddress]) { @@ -96,12 +108,60 @@ - (void)extractDebugImageAddressFromFrames:(NSArray *)frames return [self getDebugImagesForAddresses:imageAddresses isCrash:isCrash]; } +- (NSArray *)getDebugImagesFromCacheForFrames:(NSArray *)frames +{ + NSMutableSet *imageAddresses = [[NSMutableSet alloc] init]; + [self extractDebugImageAddressFromFrames:frames intoSet:imageAddresses]; + + return [self getDebugImagesForImageAddressesFromCache:imageAddresses]; +} + +- (NSArray *)getDebugImagesFromCacheForThreads:(NSArray *)threads +{ + NSMutableSet *imageAddresses = [[NSMutableSet alloc] init]; + + for (SentryThread *thread in threads) { + [self extractDebugImageAddressFromFrames:thread.stacktrace.frames intoSet:imageAddresses]; + } + + return [self getDebugImagesForImageAddressesFromCache:imageAddresses]; +} + +- (NSArray *)getDebugImagesForImageAddressesFromCache: + (NSSet *)imageAddresses +{ + NSMutableArray *result = [NSMutableArray array]; + + for (NSString *imageAddress in imageAddresses) { + const uint64_t imageAddressAsUInt64 = sentry_UInt64ForHexAddress(imageAddress); + SentryBinaryImageInfo *info = [self.binaryImageCache imageByAddress:imageAddressAsUInt64]; + if (info == nil) { + continue; + } + + [result addObject:[self fillDebugMetaFromBinaryImageInfo:info]]; + } + + return result; +} + - (NSArray *)getDebugImages { // maintains previous behavior for the same method call by also trying to gather crash info return [self getDebugImagesCrashed:YES]; } +- (NSArray *)getDebugImagesFromCache +{ + NSArray *infos = [self.binaryImageCache getAllBinaryImages]; + NSMutableArray *result = + [[NSMutableArray alloc] initWithCapacity:infos.count]; + for (SentryBinaryImageInfo *info in infos) { + [result addObject:[self fillDebugMetaFromBinaryImageInfo:info]]; + } + return result; +} + - (NSArray *)getDebugImagesCrashed:(BOOL)isCrash { NSMutableArray *debugMetaArray = [NSMutableArray new]; @@ -119,7 +179,7 @@ - (void)extractDebugImageAddressFromFrames:(NSArray *)frames - (SentryDebugMeta *)fillDebugMetaFrom:(SentryCrashBinaryImage)image { SentryDebugMeta *debugMeta = [[SentryDebugMeta alloc] init]; - debugMeta.debugID = [SentryDebugImageProvider convertUUID:image.uuid]; + debugMeta.debugID = [SentryBinaryImageCache convertUUID:image.uuid]; debugMeta.type = SentryDebugImageType; if (image.vmAddress > 0) { @@ -137,15 +197,23 @@ - (SentryDebugMeta *)fillDebugMetaFrom:(SentryCrashBinaryImage)image return debugMeta; } -+ (NSString *_Nullable)convertUUID:(const unsigned char *const)value +- (SentryDebugMeta *)fillDebugMetaFromBinaryImageInfo:(SentryBinaryImageInfo *)info { - if (nil == value) { - return nil; + SentryDebugMeta *debugMeta = [[SentryDebugMeta alloc] init]; + debugMeta.debugID = info.UUID; + debugMeta.type = SentryDebugImageType; + + if (info.vmAddress > 0) { + debugMeta.imageVmAddress = sentry_formatHexAddressUInt64(info.vmAddress); } - char uuidBuffer[37]; - sentrycrashdl_convertBinaryImageUUID(value, uuidBuffer); - return [[NSString alloc] initWithCString:uuidBuffer encoding:NSASCIIStringEncoding]; + debugMeta.imageAddress = sentry_formatHexAddressUInt64(info.address); + debugMeta.imageSize = @(info.size); + debugMeta.codeFile = info.name; + + return debugMeta; } @end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryDefaultRateLimits.m b/Pods/Sentry/Sources/Sentry/SentryDefaultRateLimits.m index 8906d0ae4..6e9c045fe 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDefaultRateLimits.m +++ b/Pods/Sentry/Sources/Sentry/SentryDefaultRateLimits.m @@ -6,17 +6,15 @@ #import "SentryRateLimitParser.h" #import "SentryRetryAfterHeaderParser.h" #import "SentrySwift.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryDefaultRateLimits () +@interface SentryDefaultRateLimits () @property (nonatomic, strong) SentryConcurrentRateLimitsDictionary *rateLimits; @property (nonatomic, strong) SentryRetryAfterHeaderParser *retryAfterHeaderParser; @property (nonatomic, strong) SentryRateLimitParser *rateLimitParser; -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @property (nonatomic, strong) SentryDateUtil *dateUtil; @end @@ -26,7 +24,7 @@ @implementation SentryDefaultRateLimits - (instancetype)initWithRetryAfterHeaderParser: (SentryRetryAfterHeaderParser *)retryAfterHeaderParser andRateLimitParser:(SentryRateLimitParser *)rateLimitParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider + currentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.rateLimits = [[SentryConcurrentRateLimitsDictionary alloc] init]; diff --git a/Pods/Sentry/Sources/Sentry/SentryDelayedFramesTracker.m b/Pods/Sentry/Sources/Sentry/SentryDelayedFramesTracker.m index d52ed0b7b..0ca9edd0f 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDelayedFramesTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryDelayedFramesTracker.m @@ -10,11 +10,10 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryDelayedFramesTracker () +@interface SentryDelayedFramesTracker () @property (nonatomic, assign) CFTimeInterval keepDelayedFramesDuration; -@property (nonatomic, strong, readonly) SentryCurrentDateProvider *dateProvider; +@property (nonatomic, strong, readonly) id dateProvider; @property (nonatomic, strong) NSMutableArray *delayedFrames; @property (nonatomic) uint64_t lastDelayedFrameSystemTimestamp; @property (nonatomic) uint64_t previousFrameSystemTimestamp; @@ -24,7 +23,7 @@ @implementation SentryDelayedFramesTracker - (instancetype)initWithKeepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration - dateProvider:(SentryCurrentDateProvider *)dateProvider + dateProvider:(id)dateProvider { if (self = [super init]) { _keepDelayedFramesDuration = keepDelayedFramesDuration; diff --git a/Pods/Sentry/Sources/Sentry/SentryDependencyContainer.m b/Pods/Sentry/Sources/Sentry/SentryDependencyContainer.m index 50256a2ac..44c22bc7d 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDependencyContainer.m +++ b/Pods/Sentry/Sources/Sentry/SentryDependencyContainer.m @@ -1,10 +1,11 @@ -#import "SentryANRTracker.h" -#import "SentryANRTrackerV2.h" +#import "SentryANRTrackerV1.h" + #import "SentryBinaryImageCache.h" #import "SentryDispatchFactory.h" #import "SentryDispatchQueueWrapper.h" #import "SentryDisplayLinkWrapper.h" #import "SentryExtraContextProvider.h" +#import "SentryFileIOTracker.h" #import "SentryFileManager.h" #import "SentryInternalCDefines.h" #import "SentryLog.h" @@ -14,7 +15,6 @@ #import "SentryRandom.h" #import "SentrySDK+Private.h" #import "SentrySwift.h" -#import "SentrySysctl.h" #import "SentrySystemWrapper.h" #import "SentryThreadInspector.h" #import "SentryUIDeviceWrapper.h" @@ -22,20 +22,29 @@ #import #import #import +#import #import +#import #import +#import +#import +#import #import #import #import #import #import #import +#import +#import #if SENTRY_HAS_UIKIT +# import "SentryANRTrackerV2.h" # import "SentryFramesTracker.h" # import "SentryUIApplication.h" # import # import +# import #endif // SENTRY_HAS_UIKIT #if TARGET_OS_IOS @@ -46,27 +55,61 @@ # import "SentryReachability.h" #endif // !TARGET_OS_WATCH +/** + * Macro for implementing lazy initialization with a double-checked lock. The double-checked lock + * speeds up the dependency retrieval by around 5%, so it's worth having it. Measured with + * self.measure in unit tests. + */ +#define SENTRY_LAZY_INIT(instance, initBlock) \ + if (instance == nil) { \ + @synchronized(sentryDependencyContainerDependenciesLock) { \ + if (instance == nil) { \ + instance = initBlock; \ + } \ + } \ + } \ + return instance; + +#define SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK \ + SENTRY_DISABLE_THREAD_SANITIZER("Double-checked locks produce false alarms.") + +@interface SentryDependencyContainer () + +@property (nonatomic, strong) id anrTracker; + +@end + @implementation SentryDependencyContainer static SentryDependencyContainer *instance; -static NSObject *sentryDependencyContainerLock; +static NSObject *sentryDependencyContainerDependenciesLock; +static NSObject *sentryDependencyContainerInstanceLock; + (void)initialize { if (self == [SentryDependencyContainer class]) { - sentryDependencyContainerLock = [[NSObject alloc] init]; instance = [[SentryDependencyContainer alloc] init]; + // We use two locks, because we don't want the dependencies to block the instance lock. + // Using two locks speeds up the accessing the dependencies around 5%, which is worth having + // the extra lock. Measured with self.measure in unit tests. + sentryDependencyContainerInstanceLock = [[NSObject alloc] init]; + sentryDependencyContainerDependenciesLock = [[NSObject alloc] init]; } } + (instancetype)sharedInstance { - return instance; + // This synchronization adds around 5% slowdown compared to no synchronization. + // As we don't call this method in a tight loop, it's acceptable. Measured with self.measure in + // unit tests. + @synchronized(sentryDependencyContainerInstanceLock) { + return instance; + } } + (void)reset { - if (instance) { + @synchronized(sentryDependencyContainerInstanceLock) { #if SENTRY_HAS_REACHABILITY [instance->_reachability removeAllObservers]; #endif // !TARGET_OS_WATCH @@ -74,9 +117,20 @@ + (void)reset #if SENTRY_HAS_UIKIT [instance->_framesTracker stop]; #endif // SENTRY_HAS_UIKIT - } - instance = [[SentryDependencyContainer alloc] init]; + // We create a new instance to reset all dependencies to a fresh state. + // Why don't we reset all dependencies manually so we can avoid using a lock in + // sharedInstance? Good question. This approach comes with the following problems: + // + // 1. We need a lock for all properties, including the init dependencies. + // + // 2. When adding a new dependency it is very easy to forget adding it to the reset list + // + // 3. The lock in sharedInstance only caused around a 5% overhead compared to not using a + // lock. Measured with self.measure in unit tests. So not having locks for all the init + // dependencies is as efficient as having a lock for the instance in sharedInstance. + instance = [[SentryDependencyContainer alloc] init]; + } } - (instancetype)init @@ -86,148 +140,111 @@ - (instancetype)init _random = [[SentryRandom alloc] init]; _threadWrapper = [[SentryThreadWrapper alloc] init]; _binaryImageCache = [[SentryBinaryImageCache alloc] init]; + _dateProvider = [[SentryDefaultCurrentDateProvider alloc] init]; _debugImageProvider = [[SentryDebugImageProvider alloc] init]; - _dateProvider = [[SentryCurrentDateProvider alloc] init]; - } - return self; -} + _extraContextProvider = [[SentryExtraContextProvider alloc] init]; + _notificationCenterWrapper = [[SentryNSNotificationCenterWrapper alloc] init]; + _crashWrapper = [[SentryCrashWrapper alloc] init]; + _processInfoWrapper = [[SentryNSProcessInfoWrapper alloc] init]; + _sysctlWrapper = [[SentrySysctl alloc] init]; + + SentryRetryAfterHeaderParser *retryAfterHeaderParser = [[SentryRetryAfterHeaderParser alloc] + initWithHttpDateParser:[[SentryHttpDateParser alloc] init] + currentDateProvider:_dateProvider]; + SentryRateLimitParser *rateLimitParser = + [[SentryRateLimitParser alloc] initWithCurrentDateProvider:_dateProvider]; + + _rateLimits = + [[SentryDefaultRateLimits alloc] initWithRetryAfterHeaderParser:retryAfterHeaderParser + andRateLimitParser:rateLimitParser + currentDateProvider:_dateProvider]; -- (SentryFileManager *)fileManager -{ - @synchronized(sentryDependencyContainerLock) { - if (_fileManager == nil) { - NSError *error; - _fileManager = [[SentryFileManager alloc] initWithOptions:SentrySDK.options - error:&error]; - if (_fileManager == nil) { - SENTRY_LOG_DEBUG(@"Could not create file manager - %@", error); - } - } - return _fileManager; - } -} +#if SENTRY_HAS_REACHABILITY + _reachability = [[SentryReachability alloc] init]; +#endif // !SENTRY_HAS_REACHABILITY -- (SentryAppStateManager *)appStateManager -{ - @synchronized(sentryDependencyContainerLock) { - if (_appStateManager == nil) { - _appStateManager = - [[SentryAppStateManager alloc] initWithOptions:SentrySDK.options - crashWrapper:self.crashWrapper - fileManager:self.fileManager - dispatchQueueWrapper:self.dispatchQueueWrapper - notificationCenterWrapper:self.notificationCenterWrapper]; - } - return _appStateManager; +#if SENTRY_HAS_UIKIT + _uiDeviceWrapper = [[SentryUIDeviceWrapper alloc] init]; + _application = [[SentryUIApplication alloc] init]; +#endif // SENTRY_HAS_UIKIT } + return self; } -- (SentryCrashWrapper *)crashWrapper SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryFileManager *)fileManager SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_crashWrapper == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_crashWrapper == nil) { - _crashWrapper = [SentryCrashWrapper sharedInstance]; - } + SENTRY_LAZY_INIT(_fileManager, ({ + NSError *error; + SentryFileManager *manager = [[SentryFileManager alloc] initWithOptions:SentrySDK.options + error:&error]; + if (manager == nil) { + SENTRY_LOG_DEBUG(@"Could not create file manager - %@", error); } - } - return _crashWrapper; + manager; + })); } -- (SentryCrash *)crashReporter SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryAppStateManager *)appStateManager SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_crashReporter == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_crashReporter == nil) { - _crashReporter = - [[SentryCrash alloc] initWithBasePath:SentrySDK.options.cacheDirectoryPath]; - } - } - } - return _crashReporter; + SENTRY_LAZY_INIT(_appStateManager, + [[SentryAppStateManager alloc] initWithOptions:SentrySDK.options + crashWrapper:self.crashWrapper + fileManager:self.fileManager + dispatchQueueWrapper:self.dispatchQueueWrapper + notificationCenterWrapper:self.notificationCenterWrapper]); } -- (SentrySysctl *)sysctlWrapper SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryThreadInspector *)threadInspector SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_sysctlWrapper == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_sysctlWrapper == nil) { - _sysctlWrapper = [[SentrySysctl alloc] init]; - } - } - } - return _sysctlWrapper; + SENTRY_LAZY_INIT( + _threadInspector, [[SentryThreadInspector alloc] initWithOptions:SentrySDK.options]); } -- (SentryThreadInspector *)threadInspector SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryFileIOTracker *)fileIOTracker SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_threadInspector == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_threadInspector == nil) { - _threadInspector = - [[SentryThreadInspector alloc] initWithOptions:SentrySDK.options]; - } - } - } - return _threadInspector; + SENTRY_LAZY_INIT(_fileIOTracker, + [[SentryFileIOTracker alloc] initWithThreadInspector:[self threadInspector] + processInfoWrapper:[self processInfoWrapper]]); } -- (SentryExtraContextProvider *)extraContextProvider SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryCrash *)crashReporter SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_extraContextProvider == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_extraContextProvider == nil) { - _extraContextProvider = [[SentryExtraContextProvider alloc] init]; - } - } - } - return _extraContextProvider; + SENTRY_LAZY_INIT(_crashReporter, + [[SentryCrash alloc] initWithBasePath:SentrySDK.options.cacheDirectoryPath]); } -- (SentryNSNotificationCenterWrapper *)notificationCenterWrapper +- (id)getANRTracker:(NSTimeInterval)timeout + SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - @synchronized(sentryDependencyContainerLock) { - if (_notificationCenterWrapper == nil) { - _notificationCenterWrapper = [[SentryNSNotificationCenterWrapper alloc] init]; - } - return _notificationCenterWrapper; - } + SENTRY_LAZY_INIT(_anrTracker, + [[[SentryANRTrackerV1 alloc] initWithTimeoutInterval:timeout + crashWrapper:self.crashWrapper + dispatchQueueWrapper:self.dispatchQueueWrapper + threadWrapper:self.threadWrapper] asProtocol]); } #if SENTRY_HAS_UIKIT -- (SentryUIDeviceWrapper *)uiDeviceWrapper SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (id)getANRTracker:(NSTimeInterval)timeout + isV2Enabled:(BOOL)isV2Enabled SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_uiDeviceWrapper == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_uiDeviceWrapper == nil) { - _uiDeviceWrapper = [[SentryUIDeviceWrapper alloc] init]; - } - } + if (isV2Enabled) { + SENTRY_LAZY_INIT(_anrTracker, + [[[SentryANRTrackerV2 alloc] initWithTimeoutInterval:timeout + crashWrapper:self.crashWrapper + dispatchQueueWrapper:self.dispatchQueueWrapper + threadWrapper:self.threadWrapper + framesTracker:self.framesTracker] asProtocol]); + } else { + return [self getANRTracker:timeout]; } - return _uiDeviceWrapper; } - #endif // SENTRY_HAS_UIKIT -#if SENTRY_UIKIT_AVAILABLE -- (SentryScreenshot *)screenshot SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +#if SENTRY_TARGET_REPLAY_SUPPORTED +- (SentryScreenshot *)screenshot SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { # if SENTRY_HAS_UIKIT - if (_screenshot == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_screenshot == nil) { - _screenshot = [[SentryScreenshot alloc] init]; - } - } - } - return _screenshot; + SENTRY_LAZY_INIT(_screenshot, [[SentryScreenshot alloc] init]); # else SENTRY_LOG_DEBUG( @"SentryDependencyContainer.screenshot only works with UIKit enabled. Ensure you're " @@ -235,19 +252,14 @@ - (SentryScreenshot *)screenshot SENTRY_DISABLE_THREAD_SANITIZER( return nil; # endif // SENTRY_HAS_UIKIT } +#endif -- (SentryViewHierarchy *)viewHierarchy SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +#if SENTRY_UIKIT_AVAILABLE +- (SentryViewHierarchy *)viewHierarchy SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { # if SENTRY_HAS_UIKIT - if (_viewHierarchy == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_viewHierarchy == nil) { - _viewHierarchy = [[SentryViewHierarchy alloc] init]; - } - } - } - return _viewHierarchy; + + SENTRY_LAZY_INIT(_viewHierarchy, [[SentryViewHierarchy alloc] init]); # else SENTRY_LOG_DEBUG( @"SentryDependencyContainer.viewHierarchy only works with UIKit enabled. Ensure you're " @@ -256,43 +268,33 @@ - (SentryViewHierarchy *)viewHierarchy SENTRY_DISABLE_THREAD_SANITIZER( # endif // SENTRY_HAS_UIKIT } -- (SentryUIApplication *)application SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryUIViewControllerPerformanceTracker *) + uiViewControllerPerformanceTracker SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { # if SENTRY_HAS_UIKIT - if (_application == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_application == nil) { - _application = [[SentryUIApplication alloc] init]; - } - } - } - return _application; + SENTRY_LAZY_INIT(_uiViewControllerPerformanceTracker, + [[SentryUIViewControllerPerformanceTracker alloc] + initWithTracker:SentryPerformanceTracker.shared + dispatchQueueWrapper:[self dispatchQueueWrapper]]); # else - SENTRY_LOG_DEBUG( - @"SentryDependencyContainer.application only works with UIKit enabled. Ensure you're " - @"using the right configuration of Sentry that links UIKit."); + SENTRY_LOG_DEBUG(@"SentryDependencyContainer.uiViewControllerPerformanceTracker only works " + @"with UIKit enabled. Ensure you're " + @"using the right configuration of Sentry that links UIKit."); return nil; # endif // SENTRY_HAS_UIKIT } -- (SentryFramesTracker *)framesTracker SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryFramesTracker *)framesTracker SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { # if SENTRY_HAS_UIKIT - if (_framesTracker == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_framesTracker == nil) { - _framesTracker = [[SentryFramesTracker alloc] - initWithDisplayLinkWrapper:[[SentryDisplayLinkWrapper alloc] init] - dateProvider:self.dateProvider - dispatchQueueWrapper:self.dispatchQueueWrapper - notificationCenter:self.notificationCenterWrapper - keepDelayedFramesDuration:SENTRY_AUTO_TRANSACTION_MAX_DURATION]; - } - } - } - return _framesTracker; + SENTRY_LAZY_INIT(_framesTracker, + [[SentryFramesTracker alloc] + initWithDisplayLinkWrapper:[[SentryDisplayLinkWrapper alloc] init] + dateProvider:self.dateProvider + dispatchQueueWrapper:self.dispatchQueueWrapper + notificationCenter:self.notificationCenterWrapper + keepDelayedFramesDuration:SENTRY_AUTO_TRANSACTION_MAX_DURATION]); + # else SENTRY_LOG_DEBUG( @"SentryDependencyContainer.framesTracker only works with UIKit enabled. Ensure you're " @@ -301,156 +303,92 @@ - (SentryFramesTracker *)framesTracker SENTRY_DISABLE_THREAD_SANITIZER( # endif // SENTRY_HAS_UIKIT } -- (SentryANRTrackerV2 *)getANRTrackerV2:(NSTimeInterval)timeout - SENTRY_DISABLE_THREAD_SANITIZER("double-checked lock produce false alarms") +- (SentrySwizzleWrapper *)swizzleWrapper SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { # if SENTRY_HAS_UIKIT - if (_anrTrackerV2 == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_anrTrackerV2 == nil) { - _anrTrackerV2 = - [[SentryANRTrackerV2 alloc] initWithTimeoutInterval:timeout - crashWrapper:self.crashWrapper - dispatchQueueWrapper:self.dispatchQueueWrapper - threadWrapper:self.threadWrapper - framesTracker:self.framesTracker]; - } - } - } - - return _anrTrackerV2; + SENTRY_LAZY_INIT(_swizzleWrapper, [[SentrySwizzleWrapper alloc] init]); # else SENTRY_LOG_DEBUG( - @"SentryDependencyContainer.getANRTrackerV2 only works with UIKit enabled. Ensure you're " + @"SentryDependencyContainer.swizzleWrapper only works with UIKit enabled. Ensure you're " @"using the right configuration of Sentry that links UIKit."); return nil; # endif // SENTRY_HAS_UIKIT } +#endif // SENTRY_UIKIT_AVAILABLE -- (SentrySwizzleWrapper *)swizzleWrapper SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentrySystemWrapper *)systemWrapper SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { -# if SENTRY_HAS_UIKIT - if (_swizzleWrapper == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_swizzleWrapper == nil) { - _swizzleWrapper = [[SentrySwizzleWrapper alloc] init]; - } - } - } - return _swizzleWrapper; -# else - SENTRY_LOG_DEBUG( - @"SentryDependencyContainer.uiDeviceWrapper only works with UIKit enabled. Ensure you're " - @"using the right configuration of Sentry that links UIKit."); - return nil; -# endif // SENTRY_HAS_UIKIT + SENTRY_LAZY_INIT(_systemWrapper, [[SentrySystemWrapper alloc] init]); } -#endif // SENTRY_UIKIT_AVAILABLE -- (SentryANRTracker *)getANRTracker:(NSTimeInterval)timeout - SENTRY_DISABLE_THREAD_SANITIZER("double-checked lock produce false alarms") +- (SentryDispatchFactory *)dispatchFactory SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_anrTracker == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_anrTracker == nil) { - _anrTracker = - [[SentryANRTracker alloc] initWithTimeoutInterval:timeout - crashWrapper:self.crashWrapper - dispatchQueueWrapper:self.dispatchQueueWrapper - threadWrapper:self.threadWrapper]; - } - } - } - - return _anrTracker; + SENTRY_LAZY_INIT(_dispatchFactory, [[SentryDispatchFactory alloc] init]); } -- (SentryNSProcessInfoWrapper *)processInfoWrapper SENTRY_DISABLE_THREAD_SANITIZER( +- (id)dispatchQueueProvider SENTRY_DISABLE_THREAD_SANITIZER( "double-checked lock produce false alarms") { - if (_processInfoWrapper == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_processInfoWrapper == nil) { - _processInfoWrapper = [[SentryNSProcessInfoWrapper alloc] init]; - } - } - } - return _processInfoWrapper; + SENTRY_LAZY_INIT(_dispatchQueueProvider, [[SentryDispatchFactory alloc] init]); } -- (SentrySystemWrapper *)systemWrapper SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryNSTimerFactory *)timerFactory SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_systemWrapper == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_systemWrapper == nil) { - _systemWrapper = [[SentrySystemWrapper alloc] init]; - } - } - } - return _systemWrapper; + SENTRY_LAZY_INIT(_timerFactory, [[SentryNSTimerFactory alloc] init]); } -- (SentryDispatchFactory *)dispatchFactory SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +#if SENTRY_HAS_METRIC_KIT +- (SentryMXManager *)metricKitManager SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_dispatchFactory == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_dispatchFactory == nil) { - _dispatchFactory = [[SentryDispatchFactory alloc] init]; - } - } - } - return _dispatchFactory; + // Disable crash diagnostics as we only use it for validation of the symbolication + // of stacktraces, because crashes are easy to trigger for MetricKit. We don't want + // crash reports of MetricKit in production as we have SentryCrash. + SENTRY_LAZY_INIT( + _metricKitManager, [[SentryMXManager alloc] initWithDisableCrashDiagnostics:YES]); } -- (SentryNSTimerFactory *)timerFactory SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +#endif // SENTRY_HAS_METRIC_KIT + +- (SentryScopeContextPersistentStore *) + scopeContextPersistentStore SENTRY_THREAD_SANITIZER_DOUBLE_CHECKED_LOCK { - if (_timerFactory == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_timerFactory == nil) { - _timerFactory = [[SentryNSTimerFactory alloc] init]; - } - } - } - return _timerFactory; + SENTRY_LAZY_INIT(_scopeContextPersistentStore, + [[SentryScopeContextPersistentStore alloc] initWithFileManager:self.fileManager]); } -#if SENTRY_HAS_METRIC_KIT -- (SentryMXManager *)metricKitManager SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +#if SENTRY_HAS_UIKIT +- (SentryWatchdogTerminationScopeObserver *)getWatchdogTerminationScopeObserverWithOptions: + (SentryOptions *)options { - if (_metricKitManager == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_metricKitManager == nil) { - // Disable crash diagnostics as we only use it for validation of the symbolication - // of stacktraces, because crashes are easy to trigger for MetricKit. We don't want - // crash reports of MetricKit in production as we have SentryCrash. - _metricKitManager = [[SentryMXManager alloc] initWithDisableCrashDiagnostics:YES]; - } - } - } - - return _metricKitManager; + // This method is only a factory, therefore do not keep a reference. + // The scope observer will be created each time it is needed. + return [[SentryWatchdogTerminationScopeObserver alloc] + initWithBreadcrumbProcessor: + [self + getWatchdogTerminationBreadcrumbProcessorWithMaxBreadcrumbs:options.maxBreadcrumbs] + contextProcessor:self.watchdogTerminationContextProcessor]; } -#endif // SENTRY_HAS_METRIC_KIT +- (SentryWatchdogTerminationBreadcrumbProcessor *) + getWatchdogTerminationBreadcrumbProcessorWithMaxBreadcrumbs:(NSInteger)maxBreadcrumbs +{ + // This method is only a factory, therefore do not keep a reference. + // The processor will be created each time it is needed. + return [[SentryWatchdogTerminationBreadcrumbProcessor alloc] + initWithMaxBreadcrumbs:maxBreadcrumbs + fileManager:self.fileManager]; +} -#if SENTRY_HAS_REACHABILITY -- (SentryReachability *)reachability SENTRY_DISABLE_THREAD_SANITIZER( - "double-checked lock produce false alarms") +- (SentryWatchdogTerminationContextProcessor *)watchdogTerminationContextProcessor { - if (_reachability == nil) { - @synchronized(sentryDependencyContainerLock) { - if (_reachability == nil) { - _reachability = [[SentryReachability alloc] init]; - } - } - } - return _reachability; + SENTRY_LAZY_INIT(_watchdogTerminationContextProcessor, + [[SentryWatchdogTerminationContextProcessor alloc] + initWithDispatchQueueWrapper: + [self.dispatchFactory createLowPriorityQueue: + "io.sentry.watchdog-termination-tracking.context-processor" + relativePriority:0] + scopeContextStore:self.scopeContextPersistentStore]) } -#endif // !TARGET_OS_WATCH +#endif @end diff --git a/Pods/Sentry/Sources/Sentry/SentryDevice.mm b/Pods/Sentry/Sources/Sentry/SentryDevice.mm index 5108316fd..ed81c5480 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDevice.mm +++ b/Pods/Sentry/Sources/Sentry/SentryDevice.mm @@ -189,7 +189,7 @@ #else const auto version = [[NSProcessInfo processInfo] operatingSystemVersion]; return [NSString stringWithFormat:@"%ld.%ld.%ld", (long)version.majorVersion, - (long)version.minorVersion, (long)version.patchVersion]; + (long)version.minorVersion, (long)version.patchVersion]; #endif // SENTRY_HAS_UIKIT } diff --git a/Pods/Sentry/Sources/Sentry/SentryDispatchFactory.m b/Pods/Sentry/Sources/Sentry/SentryDispatchFactory.m index c3a0f94c9..168759397 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDispatchFactory.m +++ b/Pods/Sentry/Sources/Sentry/SentryDispatchFactory.m @@ -1,6 +1,7 @@ #import "SentryDispatchFactory.h" #import "SentryDispatchQueueWrapper.h" #import "SentryDispatchSourceWrapper.h" +#import "SentryInternalDefines.h" @implementation SentryDispatchFactory @@ -10,6 +11,19 @@ - (SentryDispatchQueueWrapper *)queueWithName:(const char *)name return [[SentryDispatchQueueWrapper alloc] initWithName:name attributes:attributes]; } +- (SentryDispatchQueueWrapper *)createLowPriorityQueue:(const char *)name + relativePriority:(int)relativePriority +{ + SENTRY_CASSERT(relativePriority <= 0 && relativePriority >= QOS_MIN_RELATIVE_PRIORITY, + @"Relative priority must be between 0 and %d", QOS_MIN_RELATIVE_PRIORITY); + // The QOS_CLASS_UTILITY is defined in `qos.h` and used by the `DISPATCH_QUEUE_PRIORITY_LOW`, + // therefore it can be considered it a low priority queue + // Reference: https://developer.apple.com/documentation/dispatch/dispatch_queue_priority_low + dispatch_queue_attr_t attributes = dispatch_queue_attr_make_with_qos_class( + DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, relativePriority); + return [[SentryDispatchQueueWrapper alloc] initWithName:name attributes:attributes]; +} + - (SentryDispatchSourceWrapper *)sourceWithInterval:(uint64_t)interval leeway:(uint64_t)leeway queueName:(const char *)queueName diff --git a/Pods/Sentry/Sources/Sentry/SentryDispatchQueueWrapper.m b/Pods/Sentry/Sources/Sentry/SentryDispatchQueueWrapper.m index f0104861a..2663c12f4 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDispatchQueueWrapper.m +++ b/Pods/Sentry/Sources/Sentry/SentryDispatchQueueWrapper.m @@ -1,6 +1,5 @@ #import "SentryDispatchQueueWrapper.h" #import "SentryThreadWrapper.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -12,7 +11,7 @@ - (instancetype)init // iOS 9 we need to manually add the autoreleasepool. dispatch_queue_attr_t attributes = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - self = [self initWithName:"sentry-default" attributes:attributes]; + self = [self initWithName:"io.sentry.default" attributes:attributes]; return self; } diff --git a/Pods/Sentry/Sources/Sentry/SentryDispatchSourceWrapper.m b/Pods/Sentry/Sources/Sentry/SentryDispatchSourceWrapper.m index 980911917..63fc8a7a7 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDispatchSourceWrapper.m +++ b/Pods/Sentry/Sources/Sentry/SentryDispatchSourceWrapper.m @@ -26,4 +26,16 @@ - (void)cancel dispatch_cancel(_source); } +#if SENTRY_TEST || SENTRY_TEST_CI +- (dispatch_source_t)source +{ + return _source; +} + +- (SentryDispatchQueueWrapper *)queue +{ + return _queueWrapper; +} +#endif // SENTRY_TEST || SENTRY_TEST_CI + @end diff --git a/Pods/Sentry/Sources/Sentry/SentryDsn.m b/Pods/Sentry/Sources/Sentry/SentryDsn.m index db91e198e..c6d0f4b3d 100644 --- a/Pods/Sentry/Sources/Sentry/SentryDsn.m +++ b/Pods/Sentry/Sources/Sentry/SentryDsn.m @@ -5,8 +5,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryDsn () +@interface SentryDsn () @end @@ -79,7 +78,7 @@ - (NSURL *)getBaseEndpoint [paths removeObjectAtIndex:0]; // We remove the leading / [paths removeLastObject]; // We remove projectId since we add it later path = [NSString stringWithFormat:@"/%@", - [paths componentsJoinedByString:@"/"]]; // We put together the path + [paths componentsJoinedByString:@"/"]]; // We put together the path } NSURLComponents *components = [NSURLComponents new]; components.scheme = url.scheme; @@ -97,23 +96,23 @@ - (NSURL *_Nullable)convertDsnString:(NSString *)dsnString NSSet *allowedSchemes = [NSSet setWithObjects:@"http", @"https", nil]; NSURL *url = [NSURL URLWithString:trimmedDsnString]; NSString *errorMessage = nil; - if (nil == url.scheme) { + if (url.scheme == nil) { errorMessage = @"URL scheme of DSN is missing"; url = nil; } - if (![allowedSchemes containsObject:url.scheme]) { + if (url != nil && ![allowedSchemes containsObject:url.scheme]) { errorMessage = @"Unrecognized URL scheme in DSN"; url = nil; } - if (nil == url.host || url.host.length == 0) { + if (url != nil && (nil == url.host || url.host.length == 0)) { errorMessage = @"Host component of DSN is missing"; url = nil; } - if (nil == url.user) { + if (url != nil && url.user == nil) { errorMessage = @"User component of DSN is missing"; url = nil; } - if (url.pathComponents.count < 2) { + if (url != nil && url.pathComponents.count < 2) { errorMessage = @"Project ID path component of DSN is missing"; url = nil; } diff --git a/Pods/Sentry/Sources/Sentry/SentryEnvelope.m b/Pods/Sentry/Sources/Sentry/SentryEnvelope.m index 7b63610d2..6bcb913a1 100644 --- a/Pods/Sentry/Sources/Sentry/SentryEnvelope.m +++ b/Pods/Sentry/Sources/Sentry/SentryEnvelope.m @@ -8,11 +8,11 @@ #import "SentryEvent.h" #import "SentryLog.h" #import "SentryMessage.h" -#import "SentryMeta.h" #import "SentryMsgPackSerializer.h" #import "SentrySdkInfo.h" #import "SentrySerialization.h" #import "SentrySession.h" +#import "SentrySwift.h" #import "SentryTransaction.h" #import "SentryUserFeedback.h" @@ -30,8 +30,7 @@ - (instancetype)initWithId:(SentryId *_Nullable)eventId - (instancetype)initWithId:(nullable SentryId *)eventId traceContext:(nullable SentryTraceContext *)traceContext { - SentrySdkInfo *sdkInfo = [[SentrySdkInfo alloc] initWithName:SentryMeta.sdkName - andVersion:SentryMeta.versionString]; + SentrySdkInfo *sdkInfo = [SentrySdkInfo global]; self = [self initWithId:eventId sdkInfo:sdkInfo traceContext:traceContext]; return self; } @@ -95,6 +94,8 @@ - (instancetype)initWithEvent:(SentryEvent *)event // default. In any case in the envelope type it should be event. Except for transactions NSString *envelopeType = [event.type isEqualToString:SentryEnvelopeItemTypeTransaction] ? SentryEnvelopeItemTypeTransaction + : [event.type isEqualToString:SentryEnvelopeItemTypeFeedback] + ? SentryEnvelopeItemTypeFeedback : SentryEnvelopeItemTypeEvent; return [self initWithHeader:[[SentryEnvelopeItemHeader alloc] initWithType:envelopeType @@ -161,7 +162,17 @@ - (_Nullable instancetype)initWithAttachment:(SentryAttachment *)attachment return nil; } +#if DEBUG || SENTRY_TEST || SENTRY_TEST_CI + if ([NSProcessInfo.processInfo.arguments + containsObject:@"--io.sentry.base64-attachment-data"]) { + data = [[attachment.data base64EncodedStringWithOptions:0] + dataUsingEncoding:NSUTF8StringEncoding]; + } else { + data = attachment.data; + } +#else data = attachment.data; +#endif // DEBUG || SENTRY_TEST || SENTRY_TEST_CI } else if (nil != attachment.path) { NSError *error = nil; @@ -186,7 +197,17 @@ - (_Nullable instancetype)initWithAttachment:(SentryAttachment *)attachment return nil; } +#if DEBUG || SENTRY_TEST || SENTRY_TEST_CI + if ([NSProcessInfo.processInfo.arguments + containsObject:@"--io.sentry.base64-attachment-data"]) { + data = [[[[NSFileManager defaultManager] contentsAtPath:attachment.path] + base64EncodedStringWithOptions:0] dataUsingEncoding:NSUTF8StringEncoding]; + } else { + data = [[NSFileManager defaultManager] contentsAtPath:attachment.path]; + } +#else data = [[NSFileManager defaultManager] contentsAtPath:attachment.path]; +#endif // DEBUG || SENTRY_TEST || SENTRY_TEST_CI } if (data == nil) { diff --git a/Pods/Sentry/Sources/Sentry/SentryEnvelopeItemHeader.m b/Pods/Sentry/Sources/Sentry/SentryEnvelopeItemHeader.m index 7370d08d7..a94ee64f6 100644 --- a/Pods/Sentry/Sources/Sentry/SentryEnvelopeItemHeader.m +++ b/Pods/Sentry/Sources/Sentry/SentryEnvelopeItemHeader.m @@ -32,6 +32,17 @@ - (instancetype)initWithType:(NSString *)type return self; } +- (instancetype)initWithType:(NSString *)type + length:(NSUInteger)length + contentType:(NSString *)contentType + itemCount:(NSNumber *)itemCount +{ + if (self = [self initWithType:type length:length contentType:contentType]) { + _itemCount = itemCount; + } + return self; +} + - (NSDictionary *)serialize { @@ -48,6 +59,14 @@ - (NSDictionary *)serialize [target setValue:self.contentType forKey:@"content_type"]; } + if (self.platform) { + [target setValue:self.contentType forKey:@"platform"]; + } + + if (self.itemCount) { + [target setValue:self.itemCount forKey:@"item_count"]; + } + [target setValue:[NSNumber numberWithUnsignedInteger:self.length] forKey:@"length"]; return target; diff --git a/Pods/Sentry/Sources/Sentry/SentryEnvelopeRateLimit.m b/Pods/Sentry/Sources/Sentry/SentryEnvelopeRateLimit.m index dd44806a6..5d09800c7 100644 --- a/Pods/Sentry/Sources/Sentry/SentryEnvelopeRateLimit.m +++ b/Pods/Sentry/Sources/Sentry/SentryEnvelopeRateLimit.m @@ -3,12 +3,10 @@ #import "SentryEnvelope.h" #import "SentryEnvelopeItemHeader.h" #import "SentryRateLimits.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryEnvelopeRateLimit () +@interface SentryEnvelopeRateLimit () @property (nonatomic, strong) id rateLimits; @property (nonatomic, weak) id delegate; diff --git a/Pods/Sentry/Sources/Sentry/SentryError.mm b/Pods/Sentry/Sources/Sentry/SentryError.mm index 998f82209..f94896b46 100644 --- a/Pods/Sentry/Sources/Sentry/SentryError.mm +++ b/Pods/Sentry/Sources/Sentry/SentryError.mm @@ -31,7 +31,7 @@ { return _SentryError(error, @ { NSLocalizedDescriptionKey : [NSString stringWithFormat:@"%@ (%s)", description, - sentry::kernelReturnCodeDescription(kernelErrorCode)], + sentry::kernelReturnCodeDescription(kernelErrorCode)], }); } diff --git a/Pods/Sentry/Sources/Sentry/SentryEvent.m b/Pods/Sentry/Sources/Sentry/SentryEvent.m index e7270a567..8033d1a7e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryEvent.m +++ b/Pods/Sentry/Sources/Sentry/SentryEvent.m @@ -73,6 +73,7 @@ - (instancetype)initWithError:(NSError *)error // before [serializedData setValue:sentry_sanitize(self.extra) forKey:@"extra"]; [serializedData setValue:self.tags forKey:@"tags"]; + SENTRY_LOG_DEBUG(@"Serialized event: %@", serializedData); return serializedData; } @@ -203,9 +204,14 @@ - (BOOL)isMetricKitEvent - (BOOL)isAppHangEvent { return self.exceptions.count == 1 && - [self.exceptions.firstObject.type isEqualToString:SentryANRExceptionType]; + [SentryAppHangTypeMapper + isExceptionTypeAppHangWithExceptionType:self.exceptions.firstObject.type]; } @end +@implementation SentryEventDecodable + +@end + NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryExtraContextProvider.m b/Pods/Sentry/Sources/Sentry/SentryExtraContextProvider.m index daa576f23..1f93cb187 100644 --- a/Pods/Sentry/Sources/Sentry/SentryExtraContextProvider.m +++ b/Pods/Sentry/Sources/Sentry/SentryExtraContextProvider.m @@ -3,11 +3,16 @@ #import "SentryCrashWrapper.h" #import "SentryDefines.h" #import "SentryDependencyContainer.h" +#import "SentryLog.h" #import "SentryNSProcessInfoWrapper.h" #import "SentryUIDeviceWrapper.h" -@interface -SentryExtraContextProvider () +NSString *const kSentryProcessInfoThermalStateNominal = @"nominal"; +NSString *const kSentryProcessInfoThermalStateFair = @"fair"; +NSString *const kSentryProcessInfoThermalStateSerious = @"serious"; +NSString *const kSentryProcessInfoThermalStateCritical = @"critical"; + +@interface SentryExtraContextProvider () @property (nonatomic, strong) SentryCrashWrapper *crashWrapper; @property (nonatomic, strong) SentryNSProcessInfoWrapper *processInfoWrapper; @@ -44,6 +49,25 @@ - (NSDictionary *)getExtraDeviceContext extraDeviceContext[SentryDeviceContextFreeMemoryKey] = @(self.crashWrapper.freeMemorySize); extraDeviceContext[@"processor_count"] = @([self.processInfoWrapper processorCount]); + NSProcessInfoThermalState thermalState = [self.processInfoWrapper thermalState]; + switch (thermalState) { + case NSProcessInfoThermalStateNominal: + extraDeviceContext[@"thermal_state"] = kSentryProcessInfoThermalStateNominal; + break; + case NSProcessInfoThermalStateFair: + extraDeviceContext[@"thermal_state"] = kSentryProcessInfoThermalStateFair; + break; + case NSProcessInfoThermalStateSerious: + extraDeviceContext[@"thermal_state"] = kSentryProcessInfoThermalStateSerious; + break; + case NSProcessInfoThermalStateCritical: + extraDeviceContext[@"thermal_state"] = kSentryProcessInfoThermalStateCritical; + break; + default: + SENTRY_LOG_WARN(@"Unexpected thermal state enum value: %ld", (long)thermalState); + break; + } + #if TARGET_OS_IOS && SENTRY_HAS_UIKIT SentryUIDeviceWrapper *deviceWrapper = SentryDependencyContainer.sharedInstance.uiDeviceWrapper; if (deviceWrapper.orientation != UIDeviceOrientationUnknown) { diff --git a/Pods/Sentry/Sources/Sentry/SentryExtraPackages.m b/Pods/Sentry/Sources/Sentry/SentryExtraPackages.m new file mode 100644 index 000000000..072c3949e --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryExtraPackages.m @@ -0,0 +1,46 @@ +#import "SentryExtraPackages.h" +#import "SentryMeta.h" + +NS_ASSUME_NONNULL_BEGIN + +@implementation SentryExtraPackages + +static NSSet *> *extraPackages; + ++ (void)initialize +{ + if (self == [SentryExtraPackages class]) { + extraPackages = [[NSSet alloc] init]; + } +} + ++ (void)addPackageName:(NSString *)name version:(NSString *)version +{ + if (name == nil || version == nil) { + return; + } + + @synchronized(extraPackages) { + NSDictionary *newPackage = + @{ @"name" : name, @"version" : version }; + extraPackages = [extraPackages setByAddingObject:newPackage]; + } +} + ++ (NSMutableSet *> *)getPackages +{ + @synchronized(extraPackages) { + return [extraPackages mutableCopy]; + } +} + +#if SENTRY_TEST || SENTRY_TEST_CI ++ (void)clear +{ + extraPackages = [[NSSet alloc] init]; +} +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryFeedbackAPI.m b/Pods/Sentry/Sources/Sentry/SentryFeedbackAPI.m new file mode 100644 index 000000000..d53b09891 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryFeedbackAPI.m @@ -0,0 +1,43 @@ +#if __has_include() +# import +#elif __has_include() +# import +#else +# import +#endif + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + +# import "SentryFeedbackAPI.h" +# import "SentryHub+Private.h" +# import "SentryLog.h" +# import "SentrySDK+Private.h" +# import "SentryUserFeedbackIntegration.h" + +@implementation SentryFeedbackAPI + +- (void)showWidget +{ + if (@available(iOS 13.0, *)) { + SentryUserFeedbackIntegration *feedback = + [[SentrySDK currentHub] getInstalledIntegration:[SentryUserFeedbackIntegration class]]; + [feedback showWidget]; + } else { + SENTRY_LOG_WARN(@"Sentry User Feedback is only available on iOS 13 or later."); + } +} + +- (void)hideWidget +{ + if (@available(iOS 13.0, *)) { + SentryUserFeedbackIntegration *feedback = + [SentrySDK.currentHub getInstalledIntegration:[SentryUserFeedbackIntegration class]]; + [feedback hideWidget]; + } else { + SENTRY_LOG_WARN(@"Sentry User Feedback is only available on iOS 13 or later."); + } +} + +@end + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/SentryNSDataTracker.m b/Pods/Sentry/Sources/Sentry/SentryFileIOTracker.m similarity index 62% rename from Pods/Sentry/Sources/Sentry/SentryNSDataTracker.m rename to Pods/Sentry/Sources/Sentry/SentryFileIOTracker.m index 14839c023..e1487b554 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNSDataTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryFileIOTracker.m @@ -1,4 +1,4 @@ -#import "SentryNSDataTracker.h" +#import "SentryFileIOTracker.h" #import "SentryByteCountFormatter.h" #import "SentryClient+Private.h" #import "SentryDependencyContainer.h" @@ -12,17 +12,16 @@ #import "SentrySDK+Private.h" #import "SentryScope+Private.h" #import "SentrySpan.h" +#import "SentrySpanDataKey.h" +#import "SentrySpanOperation.h" #import "SentrySpanProtocol.h" #import "SentryStacktrace.h" +#import "SentrySwift.h" #import "SentryThread.h" #import "SentryThreadInspector.h" -#import "SentryTraceOrigins.h" #import "SentryTracer.h" -const NSString *SENTRY_TRACKING_COUNTER_KEY = @"SENTRY_TRACKING_COUNTER_KEY"; - -@interface -SentryNSDataTracker () +@interface SentryFileIOTracker () @property (nonatomic, assign) BOOL isEnabled; @property (nonatomic, strong) NSMutableSet *processingData; @@ -31,7 +30,20 @@ @end -@implementation SentryNSDataTracker +@implementation SentryFileIOTracker + +NSString *const SENTRY_TRACKING_COUNTER_KEY = @"SENTRY_TRACKING_COUNTER_KEY"; + ++ (instancetype _Nullable)sharedInstance +{ + // It is necessary to check if the SDK is enabled because accessing the tracker will otherwise + // initialize the depency container without any configured SDK options. This is a known issue + // and needs to be fixed in general. + if (!SentrySDK.isEnabled) { + return nil; + } + return SentryDependencyContainer.sharedInstance.fileIOTracker; +} - (instancetype)initWithThreadInspector:(SentryThreadInspector *)threadInspector processInfoWrapper:(SentryNSProcessInfoWrapper *)processInfoWrapper @@ -60,9 +72,10 @@ - (void)disable - (BOOL)measureNSData:(NSData *)data writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile + origin:(NSString *)origin method:(BOOL (^)(NSString *, BOOL))method { - id span = [self startTrackingWritingNSData:data filePath:path]; + id span = [self startTrackingWritingNSData:data filePath:path origin:origin]; BOOL result = method(path, useAuxiliaryFile); @@ -75,10 +88,11 @@ - (BOOL)measureNSData:(NSData *)data - (BOOL)measureNSData:(NSData *)data writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask + origin:(NSString *)origin error:(NSError **)error method:(BOOL (^)(NSString *, NSDataWritingOptions, NSError **))method { - id span = [self startTrackingWritingNSData:data filePath:path]; + id span = [self startTrackingWritingNSData:data filePath:path origin:origin]; BOOL result = method(path, writeOptionsMask, error); @@ -89,9 +103,13 @@ - (BOOL)measureNSData:(NSData *)data return result; } -- (NSData *)measureNSDataFromFile:(NSString *)path method:(NSData * (^)(NSString *))method +- (NSData *)measureNSDataFromFile:(NSString *)path + origin:(NSString *)origin + method:(NSData * (^)(NSString *))method { - id span = [self startTrackingReadingFilePath:path]; + id span = [self startTrackingReadingFilePath:path + origin:origin + operation:SentrySpanOperationFileRead]; NSData *result = method(path); @@ -105,10 +123,13 @@ - (NSData *)measureNSDataFromFile:(NSString *)path method:(NSData * (^)(NSString - (NSData *)measureNSDataFromFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask + origin:(NSString *)origin error:(NSError **)error method:(NSData * (^)(NSString *, NSDataReadingOptions, NSError **))method { - id span = [self startTrackingReadingFilePath:path]; + id span = [self startTrackingReadingFilePath:path + origin:origin + operation:SentrySpanOperationFileRead]; NSData *result = method(path, readOptionsMask, error); @@ -122,6 +143,7 @@ - (NSData *)measureNSDataFromFile:(NSString *)path - (NSData *)measureNSDataFromURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask + origin:(NSString *)origin error:(NSError **)error method:(NSData * (^)(NSURL *, NSDataReadingOptions, NSError **))method { @@ -132,7 +154,9 @@ - (NSData *)measureNSDataFromURL:(NSURL *)url if (![url.scheme isEqualToString:NSURLFileScheme]) return method(url, readOptionsMask, error); - id span = [self startTrackingReadingFilePath:url.path]; + id span = [self startTrackingReadingFilePath:url.path + origin:origin + operation:SentrySpanOperationFileRead]; NSData *result = method(url, readOptionsMask, error); @@ -144,7 +168,33 @@ - (NSData *)measureNSDataFromURL:(NSURL *)url return result; } +- (BOOL)measureNSFileManagerCreateFileAtPath:(NSString *)path + data:(NSData *)data + attributes:(NSDictionary *)attributes + origin:(NSString *)origin + method: + (BOOL (^)(NSString *_Nonnull, NSData *_Nonnull, + NSDictionary *_Nonnull))method +{ + id span = [self startTrackingWritingNSData:data filePath:path origin:origin]; + + BOOL result = method(path, data, attributes); + + if (span != nil) { + [self finishTrackingNSData:data span:span]; + } + return result; +} + +- (nullable id)spanForPath:(NSString *)path + origin:(NSString *)origin + operation:(NSString *)operation +{ + return [self spanForPath:path origin:origin operation:operation size:0]; +} + - (nullable id)spanForPath:(NSString *)path + origin:(NSString *)origin operation:(NSString *)operation size:(NSUInteger)size { @@ -158,24 +208,30 @@ - (NSData *)measureNSDataFromURL:(NSURL *)url return nil; } - __block id ioSpan; - [SentrySDK.currentHub.scope useSpan:^(id _Nullable span) { - ioSpan = [span startChildWithOperation:operation - description:[self transactionDescriptionForFile:path - fileSize:size]]; - ioSpan.origin = SentryTraceOriginAutoNSData; - }]; + NSString *spanDescription = [self transactionDescriptionForFile:path fileSize:size]; + id _Nullable currentSpan = [SentrySDK.currentHub.scope span]; + if (currentSpan == NULL) { + SENTRY_LOG_DEBUG(@"No transaction bound to scope. Won't track file IO operation."); + return nil; + } + id _Nullable ioSpan = [currentSpan startChildWithOperation:operation + description:spanDescription]; if (ioSpan == nil) { SENTRY_LOG_DEBUG(@"No transaction bound to scope. Won't track file IO operation."); return nil; } - SENTRY_LOG_DEBUG( - @"SentryNSDataTracker automatically started a new span with description: %@, operation: %@", - ioSpan.description, operation); + ioSpan.origin = origin; + [ioSpan setDataValue:path forKey:SentrySpanDataKeyFilePath]; + if (size > 0) { + [ioSpan setDataValue:[NSNumber numberWithUnsignedInteger:size] + forKey:SentrySpanDataKeyFileSize]; + } - [ioSpan setDataValue:path forKey:@"file.path"]; + SENTRY_LOG_DEBUG( + @"Automatically started a new span with description: %@, operation: %@, origin: %@", + ioSpan.description, operation, origin); [self mainThreadExtraInfo:ioSpan]; @@ -212,12 +268,19 @@ - (void)mainThreadExtraInfo:(id)span } } -- (nullable id)startTrackingWritingNSData:(NSData *)data filePath:(NSString *)path +- (nullable id)startTrackingWritingNSData:(NSData *)data + filePath:(NSString *)path + origin:(NSString *)origin { - return [self spanForPath:path operation:SENTRY_FILE_WRITE_OPERATION size:data.length]; + return [self spanForPath:path + origin:origin + operation:SentrySpanOperationFileWrite + size:data.length]; } - (nullable id)startTrackingReadingFilePath:(NSString *)path + origin:(NSString *)origin + operation:(NSString *)operation { // Some iOS versions nest constructors calls. This counter help us avoid create more than one // span for the same operation. @@ -229,7 +292,7 @@ - (void)mainThreadExtraInfo:(id)span if (count) return nil; - return [self spanForPath:path operation:SENTRY_FILE_READ_OPERATION size:0]; + return [self spanForPath:path origin:origin operation:operation size:0]; } - (void)endTrackingFile @@ -250,10 +313,11 @@ - (void)endTrackingFile - (void)finishTrackingNSData:(NSData *)data span:(id)span { - [span setDataValue:[NSNumber numberWithUnsignedInteger:data.length] forKey:@"file.size"]; + [span setDataValue:[NSNumber numberWithUnsignedInteger:data.length] + forKey:SentrySpanDataKeyFileSize]; [span finish]; - SENTRY_LOG_DEBUG(@"SentryNSDataTracker automatically finished span %@", span.description); + SENTRY_LOG_DEBUG(@"Automatically finished span %@", span.description); } - (BOOL)ignoreFile:(NSString *)path @@ -265,7 +329,7 @@ - (BOOL)ignoreFile:(NSString *)path - (NSString *)transactionDescriptionForFile:(NSString *)path fileSize:(NSUInteger)size { return size > 0 ? [NSString stringWithFormat:@"%@ (%@)", [path lastPathComponent], - [SentryByteCountFormatter bytesCountDescription:size]] + [SentryByteCountFormatter bytesCountDescription:size]] : [NSString stringWithFormat:@"%@", [path lastPathComponent]]; } diff --git a/Pods/Sentry/Sources/Sentry/SentryFileIOTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryFileIOTrackingIntegration.m index 230acb846..1ab9c2d38 100644 --- a/Pods/Sentry/Sources/Sentry/SentryFileIOTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryFileIOTrackingIntegration.m @@ -1,7 +1,15 @@ #import "SentryFileIOTrackingIntegration.h" -#import "SentryLog.h" +#import "SentryDependencyContainer.h" +#import "SentryFileIOTracker.h" #import "SentryNSDataSwizzling.h" -#import "SentryOptions.h" +#import "SentryNSFileManagerSwizzling.h" +#import "SentryThreadInspector.h" + +@interface SentryFileIOTrackingIntegration () + +@property (nonatomic, strong) SentryFileIOTracker *tracker; + +@end @implementation SentryFileIOTrackingIntegration @@ -11,20 +19,27 @@ - (BOOL)installWithOptions:(SentryOptions *)options return NO; } - [SentryNSDataSwizzling.shared startWithOptions:options]; + self.tracker = [[SentryDependencyContainer sharedInstance] fileIOTracker]; + [self.tracker enable]; + + [SentryNSDataSwizzling.shared startWithOptions:options tracker:self.tracker]; + [SentryNSFileManagerSwizzling.shared startWithOptions:options tracker:self.tracker]; return YES; } - (SentryIntegrationOption)integrationOptions { - return kIntegrationOptionEnableSwizzling | kIntegrationOptionIsTracingEnabled - | kIntegrationOptionEnableAutoPerformanceTracing | kIntegrationOptionEnableFileIOTracing; + return kIntegrationOptionIsTracingEnabled | kIntegrationOptionEnableAutoPerformanceTracing + | kIntegrationOptionEnableFileIOTracing; } - (void)uninstall { + [self.tracker disable]; + [SentryNSDataSwizzling.shared stop]; + [SentryNSFileManagerSwizzling.shared stop]; } @end diff --git a/Pods/Sentry/Sources/Sentry/SentryFileManager.m b/Pods/Sentry/Sources/Sentry/SentryFileManager.m index 173f23df5..0f258e7ae 100644 --- a/Pods/Sentry/Sources/Sentry/SentryFileManager.m +++ b/Pods/Sentry/Sources/Sentry/SentryFileManager.m @@ -20,19 +20,51 @@ NSString *const EnvelopesPathComponent = @"envelopes"; +#pragma mark - Helper Methods + +BOOL +isErrorPathTooLong(NSError *error) +{ + NSError *underlyingError = NULL; + if (@available(macOS 11.3, iOS 14.5, watchOS 7.4, tvOS 14.5, *)) { + underlyingError = error.underlyingErrors.firstObject; + } + if (underlyingError == NULL) { + id errorInUserInfo = [error.userInfo valueForKey:NSUnderlyingErrorKey]; + if (errorInUserInfo && [errorInUserInfo isKindOfClass:[NSError class]]) { + underlyingError = errorInUserInfo; + } + } + if (underlyingError == NULL) { + underlyingError = error; + } + BOOL isEnameTooLong + = underlyingError.domain == NSPOSIXErrorDomain && underlyingError.code == ENAMETOOLONG; + // On older OS versions the error code is NSFileWriteUnknown + // Reference: https://developer.apple.com/forums/thread/128927?answerId=631839022#631839022 + BOOL isUnknownError = underlyingError.domain == NSCocoaErrorDomain + && underlyingError.code == NSFileWriteUnknownError; + + return isEnameTooLong || isUnknownError; +} + BOOL createDirectoryIfNotExists(NSString *path, NSError **error) { - if (![[NSFileManager defaultManager] createDirectoryAtPath:path - withIntermediateDirectories:YES - attributes:nil - error:error]) { - *error = NSErrorFromSentryErrorWithUnderlyingError(kSentryErrorFileIO, - [NSString stringWithFormat:@"Failed to create the directory at path %@.", path], - *error); - return NO; + BOOL success = [[NSFileManager defaultManager] createDirectoryAtPath:path + withIntermediateDirectories:YES + attributes:nil + error:error]; + if (success) { + return YES; } - return YES; + + if (isErrorPathTooLong(*error)) { + SENTRY_LOG_FATAL(@"Failed to create directory, path is too long: %@", path); + } + *error = NSErrorFromSentryErrorWithUnderlyingError(kSentryErrorFileIO, + [NSString stringWithFormat:@"Failed to create the directory at path %@.", path], *error); + return NO; } /** @@ -45,20 +77,20 @@ { NSError *error = nil; NSFileManager *fileManager = [NSFileManager defaultManager]; - if (![fileManager removeItemAtPath:path error:&error]) { - if (error.code == NSFileNoSuchFileError) { - SENTRY_LOG_DEBUG(@"No file to delete at %@", path); - } else { - SENTRY_LOG_ERROR( - @"Error occurred while deleting file at %@ because of %@", path, error); - } - } else { + if ([fileManager removeItemAtPath:path error:&error]) { SENTRY_LOG_DEBUG(@"Successfully deleted file at %@", path); + } else if (error.code == NSFileNoSuchFileError) { + SENTRY_LOG_DEBUG(@"No file to delete at %@", path); + } else if (isErrorPathTooLong(error)) { + SENTRY_LOG_FATAL(@"Failed to remove file, path is too long: %@", path); + } else { + SENTRY_LOG_ERROR(@"Error occurred while deleting file at %@ because of %@", path, error); } } -@interface -SentryFileManager () +#pragma mark - SentryFileManager + +@interface SentryFileManager () @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueue; @property (nonatomic, copy) NSString *basePath; @@ -67,6 +99,7 @@ @property (nonatomic, copy) NSString *envelopesPath; @property (nonatomic, copy) NSString *currentSessionFilePath; @property (nonatomic, copy) NSString *crashedSessionFilePath; +@property (nonatomic, copy) NSString *abnormalSessionFilePath; @property (nonatomic, copy) NSString *lastInForegroundFilePath; @property (nonatomic, copy) NSString *previousAppStateFilePath; @property (nonatomic, copy) NSString *appStateFilePath; @@ -75,6 +108,7 @@ @property (nonatomic, copy) NSString *breadcrumbsFilePathOne; @property (nonatomic, copy) NSString *breadcrumbsFilePathTwo; @property (nonatomic, copy) NSString *timezoneOffsetFilePath; +@property (nonatomic, copy) NSString *appHangEventFilePath; @property (nonatomic, assign) NSUInteger currentFileCounter; @property (nonatomic, assign) NSUInteger maxEnvelopes; @property (nonatomic, weak) id delegate; @@ -103,16 +137,14 @@ - (nullable instancetype)initWithOptions:(SentryOptions *)options [self removeFileAtPath:self.eventsPath]; if (!createDirectoryIfNotExists(self.sentryPath, error)) { + SENTRY_LOG_FATAL(@"Failed to create Sentry SDK working directory: %@", self.sentryPath); return nil; } if (!createDirectoryIfNotExists(self.envelopesPath, error)) { + SENTRY_LOG_FATAL( + @"Failed to create Sentry SDK envelopes directory: %@", self.envelopesPath); return nil; } -#if SENTRY_TARGET_PROFILING_SUPPORTED - if (!createDirectoryIfNotExists(sentryApplicationSupportPath(), error)) { - return nil; - } -#endif // SENTRY_TARGET_PROFILING_SUPPORTED self.currentFileCounter = 0; self.maxEnvelopes = options.maxCacheItems; @@ -120,100 +152,75 @@ - (nullable instancetype)initWithOptions:(SentryOptions *)options return self; } -- (void)setDelegate:(id)delegate +- (void)createPathsWithOptions:(SentryOptions *)options { - _delegate = delegate; -} + NSString *cachePath = options.cacheDirectoryPath; -- (void)deleteOldEnvelopeItems -{ - __weak SentryFileManager *weakSelf = self; - [self.dispatchQueue dispatchAsyncWithBlock:^{ - if (weakSelf == nil) { - return; - } - SENTRY_LOG_DEBUG(@"Dispatched deletion of old envelopes from %@", weakSelf); - [weakSelf deleteOldEnvelopesFromAllSentryPaths]; - }]; -} + SENTRY_LOG_DEBUG(@"SentryFileManager.cachePath: %@", cachePath); -- (void)deleteAllFolders -{ - [self removeFileAtPath:self.sentryPath]; + self.basePath = [cachePath stringByAppendingPathComponent:@"io.sentry"]; + self.sentryPath = [self.basePath stringByAppendingPathComponent:[options.parsedDsn getHash]]; + self.currentSessionFilePath = + [self.sentryPath stringByAppendingPathComponent:@"session.current"]; + self.crashedSessionFilePath = + [self.sentryPath stringByAppendingPathComponent:@"session.crashed"]; + self.abnormalSessionFilePath = + [self.sentryPath stringByAppendingPathComponent:@"session.abnormal"]; + self.lastInForegroundFilePath = + [self.sentryPath stringByAppendingPathComponent:@"lastInForeground.timestamp"]; + self.previousAppStateFilePath = + [self.sentryPath stringByAppendingPathComponent:@"previous.app.state"]; + self.appStateFilePath = [self.sentryPath stringByAppendingPathComponent:@"app.state"]; + self.previousBreadcrumbsFilePathOne = + [self.sentryPath stringByAppendingPathComponent:@"previous.breadcrumbs.1.state"]; + self.previousBreadcrumbsFilePathTwo = + [self.sentryPath stringByAppendingPathComponent:@"previous.breadcrumbs.2.state"]; + self.breadcrumbsFilePathOne = + [self.sentryPath stringByAppendingPathComponent:@"breadcrumbs.1.state"]; + self.breadcrumbsFilePathTwo = + [self.sentryPath stringByAppendingPathComponent:@"breadcrumbs.2.state"]; + self.timezoneOffsetFilePath = + [self.sentryPath stringByAppendingPathComponent:@"timezone.offset"]; + self.appHangEventFilePath = + [self.sentryPath stringByAppendingPathComponent:@"app.hang.event.json"]; + self.envelopesPath = [self.sentryPath stringByAppendingPathComponent:EnvelopesPathComponent]; } -- (NSString *)uniqueAscendingJsonName +- (void)setDelegate:(id)delegate { - // %f = double - // %05lu = unsigned with always 5 digits and leading zeros if number is too small. We - // need this because otherwise 10 would be sorted before 2 for example. - // %@ = NSString - // For example 978307200.000000-00001-3FE8C3AE-EB9C-4BEB-868C-14B8D47C33DD.json - return [NSString - stringWithFormat:@"%f-%05lu-%@.json", - [[SentryDependencyContainer.sharedInstance.dateProvider date] timeIntervalSince1970], - (unsigned long)self.currentFileCounter++, [NSUUID UUID].UUIDString]; + _delegate = delegate; } -- (NSArray *)getAllEnvelopes -{ - return [self allFilesContentInFolder:self.envelopesPath]; -} +#pragma mark - Convenience Accessors -- (SentryFileContents *_Nullable)getOldestEnvelope +- (NSURL *)getSentryPathAsURL { - NSArray *pathsOfAllEnvelopes; - @synchronized(self) { - pathsOfAllEnvelopes = [self allFilesInFolder:self.envelopesPath]; - } - - if (pathsOfAllEnvelopes.count > 0) { - NSString *filePath = pathsOfAllEnvelopes[0]; - return [self getFileContents:self.envelopesPath filePath:filePath]; - } - - return nil; + return [NSURL fileURLWithPath:self.sentryPath]; } -- (NSArray *)allFilesContentInFolder:(NSString *)path -{ - @synchronized(self) { - NSMutableArray *contents = [NSMutableArray new]; - for (NSString *filePath in [self allFilesInFolder:path]) { - SentryFileContents *fileContents = [self getFileContents:path filePath:filePath]; - - if (nil != fileContents) { - [contents addObject:fileContents]; - } - } - return contents; - } -} +#pragma mark - Envelope -- (SentryFileContents *_Nullable)getFileContents:(NSString *)folderPath - filePath:(NSString *)filePath +- (nullable NSString *)storeEnvelope:(SentryEnvelope *)envelope { + NSData *envelopeData = [SentrySerialization dataWithEnvelope:envelope]; - NSString *finalPath = [folderPath stringByAppendingPathComponent:filePath]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSData *content = [fileManager contentsAtPath:finalPath]; - if (nil != content) { - return [[SentryFileContents alloc] initWithPath:finalPath contents:content]; - } else { + if (envelopeData == nil) { + SENTRY_LOG_ERROR(@"Serialization of envelope failed. Can't store envelope."); return nil; } -} -// Delete every envelope in self.basePath older than 90 days, -// as Sentry only retains data for 90 days. -- (void)deleteOldEnvelopesFromAllSentryPaths -{ - // First we find all directories in the base path, these are all the various hashed DSN paths - for (NSString *filePath in [self allFilesInFolder:self.basePath]) { - NSString *envelopesPath = [self getEnvelopesPath:filePath]; + @synchronized(self) { + NSString *path = + [self.envelopesPath stringByAppendingPathComponent:[self uniqueAscendingJsonName]]; + SENTRY_LOG_DEBUG(@"Writing envelope to path: %@", path); - // Then we will remove all old items from the envelopes subdirectory - [self deleteOldEnvelopesFromPath:envelopesPath]; + if (![self writeData:envelopeData toPath:path]) { + SENTRY_LOG_WARN(@"Failed to store envelope."); + return nil; + } + + [self handleEnvelopesLimit]; + return path; } } @@ -254,27 +261,36 @@ - (nullable NSString *)getEnvelopesPath:(NSString *)filePath return envelopesPath; } -- (void)deleteOldEnvelopesFromPath:(NSString *)envelopesPath +- (NSArray *)getAllEnvelopes { - NSTimeInterval now = - [[SentryDependencyContainer.sharedInstance.dateProvider date] timeIntervalSince1970]; + return [self allFilesContentInFolder:self.envelopesPath]; +} - for (NSString *path in [self allFilesInFolder:envelopesPath]) { - NSString *fullPath = [envelopesPath stringByAppendingPathComponent:path]; - NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath - error:nil]; - if (!dict || !dict[NSFileCreationDate]) { - SENTRY_LOG_WARN(@"Could not get NSFileCreationDate from %@", fullPath); - continue; - } +- (SentryFileContents *_Nullable)getOldestEnvelope +{ + NSArray *pathsOfAllEnvelopes; + @synchronized(self) { + pathsOfAllEnvelopes = [self allFilesInFolder:self.envelopesPath]; + } - NSTimeInterval age = now - [dict[NSFileCreationDate] timeIntervalSince1970]; - if (age > 90 * 24 * 60 * 60) { - [self removeFileAtPath:fullPath]; - SENTRY_LOG_DEBUG( - @"Removed envelope at path %@ because it was older than 90 days", fullPath); - } + if (pathsOfAllEnvelopes.count > 0) { + NSString *filePath = pathsOfAllEnvelopes[0]; + return [self getFileContents:self.envelopesPath filePath:filePath]; } + + return nil; +} + +- (void)deleteOldEnvelopeItems +{ + __weak SentryFileManager *weakSelf = self; + [self.dispatchQueue dispatchAsyncWithBlock:^{ + if (weakSelf == nil) { + return; + } + SENTRY_LOG_DEBUG(@"Dispatched deletion of old envelopes from %@", weakSelf); + [weakSelf deleteOldEnvelopesFromAllSentryPaths]; + }]; } - (void)deleteAllEnvelopes @@ -286,177 +302,66 @@ - (void)deleteAllEnvelopes } } -- (NSArray *)allFilesInFolder:(NSString *)path +#pragma mark - Session + +- (void)storeCurrentSession:(SentrySession *)session { - NSFileManager *fileManager = [NSFileManager defaultManager]; - if (![fileManager fileExistsAtPath:path]) { - SENTRY_LOG_INFO(@"Returning empty files list, as folder doesn't exist at path: %@", path); - return @[]; - } + [self storeSession:session sessionFilePath:self.currentSessionFilePath]; +} - NSError *error = nil; - NSArray *storedFiles = [fileManager contentsOfDirectoryAtPath:path error:&error]; - if (error != nil) { - SENTRY_LOG_ERROR(@"Couldn't load files in folder %@: %@", path, error); - return @[]; - } - return [storedFiles sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; +- (SentrySession *_Nullable)readCurrentSession +{ + return [self readSession:self.currentSessionFilePath]; } -- (void)removeFileAtPath:(NSString *)path +- (void)deleteCurrentSession { - @synchronized(self) { - _non_thread_safe_removeFileAtPath(path); - } + [self deleteSession:self.currentSessionFilePath]; } -- (NSString *)storeEnvelope:(SentryEnvelope *)envelope +- (void)storeCrashedSession:(SentrySession *)session { - NSData *envelopeData = [SentrySerialization dataWithEnvelope:envelope]; + [self storeSession:session sessionFilePath:self.crashedSessionFilePath]; +} - @synchronized(self) { - NSString *path = - [self.envelopesPath stringByAppendingPathComponent:[self uniqueAscendingJsonName]]; - SENTRY_LOG_DEBUG(@"Writing envelope to path: %@", path); +- (SentrySession *_Nullable)readCrashedSession +{ + return [self readSession:self.crashedSessionFilePath]; +} - if (![self writeData:envelopeData toPath:path]) { - SENTRY_LOG_WARN(@"Failed to store envelope."); - } +- (void)deleteCrashedSession +{ + [self deleteSession:self.crashedSessionFilePath]; +} - [self handleEnvelopesLimit]; - return path; - } +- (void)storeAbnormalSession:(SentrySession *)session +{ + [self storeSession:session sessionFilePath:self.abnormalSessionFilePath]; } -- (void)handleEnvelopesLimit +- (SentrySession *_Nullable)readAbnormalSession { - NSArray *envelopeFilePaths = [self allFilesInFolder:self.envelopesPath]; - NSInteger numberOfEnvelopesToRemove = envelopeFilePaths.count - self.maxEnvelopes; - if (numberOfEnvelopesToRemove <= 0) { - return; - } + return [self readSession:self.abnormalSessionFilePath]; +} - for (NSUInteger i = 0; i < numberOfEnvelopesToRemove; i++) { - NSString *envelopeFilePath = - [self.envelopesPath stringByAppendingPathComponent:envelopeFilePaths[i]]; +- (void)deleteAbnormalSession +{ + [self deleteSession:self.abnormalSessionFilePath]; +} - // Remove current envelope path - NSMutableArray *envelopePathsCopy = - [[NSMutableArray alloc] initWithArray:[envelopeFilePaths copy]]; - [envelopePathsCopy removeObjectAtIndex:i]; +#pragma mark - LastInForeground - NSData *envelopeData = [[NSFileManager defaultManager] contentsAtPath:envelopeFilePath]; - SentryEnvelope *envelope = [SentrySerialization envelopeWithData:envelopeData]; - - BOOL didMigrateSessionInit = - [SentryMigrateSessionInit migrateSessionInit:envelope - envelopesDirPath:self.envelopesPath - envelopeFilePaths:envelopePathsCopy]; - - for (SentryEnvelopeItem *item in envelope.items) { - SentryDataCategory rateLimitCategory - = sentryDataCategoryForEnvelopItemType(item.header.type); - - // When migrating the session init, the envelope to delete still contains the session - // migrated to another envelope. Therefore, the envelope item is not deleted but - // migrated. - if (didMigrateSessionInit && rateLimitCategory == kSentryDataCategorySession) { - continue; - } - - [_delegate envelopeItemDeleted:item withCategory:rateLimitCategory]; - } - - [self removeFileAtPath:envelopeFilePath]; - } - - SENTRY_LOG_DEBUG(@"Removed %ld file(s) from <%@>", (long)numberOfEnvelopesToRemove, - [self.envelopesPath lastPathComponent]); -} - -- (void)storeCurrentSession:(SentrySession *)session -{ - [self storeSession:session sessionFilePath:self.currentSessionFilePath]; -} - -- (void)storeCrashedSession:(SentrySession *)session -{ - [self storeSession:session sessionFilePath:self.crashedSessionFilePath]; -} - -- (void)storeSession:(SentrySession *)session sessionFilePath:(NSString *)sessionFilePath -{ - NSData *sessionData = [SentrySerialization dataWithSession:session]; - SENTRY_LOG_DEBUG(@"Writing session: %@", sessionFilePath); - @synchronized(self.currentSessionFilePath) { - if (![self writeData:sessionData toPath:sessionFilePath]) { - SENTRY_LOG_WARN(@"Failed to write session data."); - } - } -} - -- (void)deleteCurrentSession -{ - [self deleteSession:self.currentSessionFilePath]; -} - -- (void)deleteCrashedSession -{ - [self deleteSession:self.crashedSessionFilePath]; -} - -- (void)deleteSession:(NSString *)sessionFilePath -{ - SENTRY_LOG_DEBUG(@"Deleting session: %@", sessionFilePath); - @synchronized(self.currentSessionFilePath) { - [self removeFileAtPath:sessionFilePath]; - } -} - -- (SentrySession *_Nullable)readCurrentSession -{ - return [self readSession:self.currentSessionFilePath]; -} - -- (SentrySession *_Nullable)readCrashedSession -{ - return [self readSession:self.crashedSessionFilePath]; -} - -- (nullable SentrySession *)readSession:(NSString *)sessionFilePath -{ - [SentryLog - logWithMessage:[NSString stringWithFormat:@"Reading from session: %@", sessionFilePath] - andLevel:kSentryLevelDebug]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSData *currentData = nil; - @synchronized(self.currentSessionFilePath) { - currentData = [fileManager contentsAtPath:sessionFilePath]; - if (nil == currentData) { - SENTRY_LOG_WARN(@"No data found at %@", sessionFilePath); - return nil; - } - } - SentrySession *currentSession = [SentrySerialization sessionWithData:currentData]; - if (nil == currentSession) { - SENTRY_LOG_ERROR( - @"Data stored in session: '%@' was not parsed as session.", sessionFilePath); - return nil; - } - return currentSession; -} - -- (void)storeTimestampLastInForeground:(NSDate *)timestamp -{ - NSString *timestampString = sentry_toIso8601String(timestamp); - SENTRY_LOG_DEBUG(@"Persisting lastInForeground: %@", timestampString); - @synchronized(self.lastInForegroundFilePath) { - if (![self writeData:[timestampString dataUsingEncoding:NSUTF8StringEncoding] - toPath:self.lastInForegroundFilePath]) { - SENTRY_LOG_WARN(@"Failed to store timestamp of last foreground event."); - } - } -} +- (void)storeTimestampLastInForeground:(NSDate *)timestamp +{ + NSString *timestampString = sentry_toIso8601String(timestamp); + SENTRY_LOG_DEBUG(@"Persisting lastInForeground: %@", timestampString); + @synchronized(self.lastInForegroundFilePath) { + if (![self writeData:[timestampString dataUsingEncoding:NSUTF8StringEncoding] + toPath:self.lastInForegroundFilePath]) { + SENTRY_LOG_WARN(@"Failed to store timestamp of last foreground event."); + } + } +} - (void)deleteTimestampLastInForeground { @@ -484,19 +389,7 @@ - (NSDate *_Nullable)readTimestampLastInForeground return sentry_fromIso8601String(timestampString); } -- (BOOL)writeData:(NSData *)data toPath:(NSString *)path -{ - NSError *error; - if (!createDirectoryIfNotExists(self.sentryPath, &error)) { - SENTRY_LOG_ERROR(@"File I/O not available at path %@: %@", path, error); - return NO; - } - if (![data writeToFile:path options:NSDataWritingAtomic error:&error]) { - SENTRY_LOG_ERROR(@"Failed to write data to path %@: %@", path, error); - return NO; - } - return YES; -} +#pragma mark - App State - (void)storeAppState:(SentryAppState *)appState { @@ -521,6 +414,30 @@ - (void)moveAppStateToPreviousAppState } } +- (SentryAppState *_Nullable)readAppState +{ + @synchronized(self.appStateFilePath) { + return [self readAppStateFrom:self.appStateFilePath]; + } +} + +- (SentryAppState *_Nullable)readPreviousAppState +{ + @synchronized(self.previousAppStateFilePath) { + return [self readAppStateFrom:self.previousAppStateFilePath]; + } +} + +- (void)deleteAppState +{ + @synchronized(self.appStateFilePath) { + [self deleteAppStateFrom:self.appStateFilePath]; + [self deleteAppStateFrom:self.previousAppStateFilePath]; + } +} + +#pragma mark - Breadcrumbs + - (void)moveBreadcrumbsToPreviousBreadcrumbs { @synchronized(self.breadcrumbsFilePathOne) { @@ -531,23 +448,6 @@ - (void)moveBreadcrumbsToPreviousBreadcrumbs } } -- (void)moveState:(NSString *)stateFilePath toPreviousState:(NSString *)previousStateFilePath -{ - SENTRY_LOG_DEBUG(@"Moving state %@ to previous %@.", stateFilePath, previousStateFilePath); - NSFileManager *fileManager = [NSFileManager defaultManager]; - - // We first need to remove the old previous state file, - // or we can't move the current state file to it. - [self removeFileAtPath:previousStateFilePath]; - NSError *error = nil; - if (![fileManager moveItemAtPath:stateFilePath toPath:previousStateFilePath error:&error]) { - // We don't want to log an error if the file doesn't exist. - if (nil != error && error.code != NSFileNoSuchFileError) { - SENTRY_LOG_ERROR(@"Failed to move %@ to previous state file: %@", stateFilePath, error); - } - } -} - - (NSArray *)readPreviousBreadcrumbs { NSArray *fileOneLines = @[]; @@ -608,43 +508,7 @@ - (NSArray *)readPreviousBreadcrumbs return breadcrumbs; } -- (SentryAppState *_Nullable)readAppState -{ - @synchronized(self.appStateFilePath) { - return [self readAppStateFrom:self.appStateFilePath]; - } -} - -- (SentryAppState *_Nullable)readPreviousAppState -{ - @synchronized(self.previousAppStateFilePath) { - return [self readAppStateFrom:self.previousAppStateFilePath]; - } -} - -- (SentryAppState *_Nullable)readAppStateFrom:(NSString *)path -{ - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSData *currentData = [fileManager contentsAtPath:path]; - if (nil == currentData) { - SENTRY_LOG_WARN(@"No app state data found at %@", path); - return nil; - } - return [SentrySerialization appStateWithData:currentData]; -} - -- (void)deleteAppState -{ - @synchronized(self.appStateFilePath) { - [self deleteAppStateFrom:self.appStateFilePath]; - [self deleteAppStateFrom:self.previousAppStateFilePath]; - } -} - -- (void)deleteAppStateFrom:(NSString *)path -{ - [self removeFileAtPath:path]; -} +#pragma mark - TimezoneOffset - (NSNumber *_Nullable)readTimezoneOffset { @@ -686,6 +550,53 @@ - (void)deleteTimezoneOffset } } +#pragma mark - AppHangs + +- (void)storeAppHangEvent:(SentryEvent *)appHangEvent +{ + NSData *jsonData = [SentrySerialization dataWithJSONObject:[appHangEvent serialize]]; + if (jsonData == nil) { + SENTRY_LOG_ERROR(@"Failed to store app hang event, because of an error in serialization."); + return; + } + + @synchronized(self.appHangEventFilePath) { + [self writeData:jsonData toPath:self.appHangEventFilePath]; + } +} + +- (nullable SentryEvent *)readAppHangEvent +{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSData *appHangEventJSONData = nil; + @synchronized(self.appHangEventFilePath) { + appHangEventJSONData = [fileManager contentsAtPath:self.appHangEventFilePath]; + } + if (nil == appHangEventJSONData) { + SENTRY_LOG_DEBUG(@"No app hang event found."); + return nil; + } + + return [SentryEventDecoder decodeEventWithJsonData:appHangEventJSONData]; +} + +- (BOOL)appHangEventExists +{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + @synchronized(self.appHangEventFilePath) { + return [fileManager fileExistsAtPath:self.appHangEventFilePath]; + } +} + +- (void)deleteAppHangEvent +{ + @synchronized(self.appHangEventFilePath) { + [self removeFileAtPath:self.appHangEventFilePath]; + } +} + +#pragma mark - File Operations + + (BOOL)createDirectoryAtPath:(NSString *)path withError:(NSError **)error { NSFileManager *fileManager = [NSFileManager defaultManager]; @@ -695,60 +606,195 @@ + (BOOL)createDirectoryAtPath:(NSString *)path withError:(NSError **)error error:error]; } -#pragma mark private methods +- (nullable NSData *)readDataFromPath:(NSString *)path + error:(NSError *__autoreleasing _Nullable *)error +{ + return [NSData dataWithContentsOfFile:path options:0 error:error]; +} -- (void)createPathsWithOptions:(SentryOptions *)options +- (BOOL)writeData:(NSData *)data toPath:(NSString *)path { - NSString *cachePath = options.cacheDirectoryPath; + NSError *error; + if (!createDirectoryIfNotExists(self.sentryPath, &error)) { + SENTRY_LOG_ERROR(@"File I/O not available at path %@: %@", path, error); + return NO; + } + if (![data writeToFile:path options:NSDataWritingAtomic error:&error]) { + SENTRY_LOG_ERROR(@"Failed to write data to path %@: %@", path, error); + return NO; + } + return YES; +} - SENTRY_LOG_DEBUG(@"SentryFileManager.cachePath: %@", cachePath); +- (void)deleteAllFolders +{ + [self removeFileAtPath:self.sentryPath]; +} - self.basePath = [cachePath stringByAppendingPathComponent:@"io.sentry"]; - self.sentryPath = [self.basePath stringByAppendingPathComponent:[options.parsedDsn getHash]]; - self.currentSessionFilePath = - [self.sentryPath stringByAppendingPathComponent:@"session.current"]; - self.crashedSessionFilePath = - [self.sentryPath stringByAppendingPathComponent:@"session.crashed"]; - self.lastInForegroundFilePath = - [self.sentryPath stringByAppendingPathComponent:@"lastInForeground.timestamp"]; - self.previousAppStateFilePath = - [self.sentryPath stringByAppendingPathComponent:@"previous.app.state"]; - self.appStateFilePath = [self.sentryPath stringByAppendingPathComponent:@"app.state"]; - self.previousBreadcrumbsFilePathOne = - [self.sentryPath stringByAppendingPathComponent:@"previous.breadcrumbs.1.state"]; - self.previousBreadcrumbsFilePathTwo = - [self.sentryPath stringByAppendingPathComponent:@"previous.breadcrumbs.2.state"]; - self.breadcrumbsFilePathOne = - [self.sentryPath stringByAppendingPathComponent:@"breadcrumbs.1.state"]; - self.breadcrumbsFilePathTwo = - [self.sentryPath stringByAppendingPathComponent:@"breadcrumbs.2.state"]; - self.timezoneOffsetFilePath = - [self.sentryPath stringByAppendingPathComponent:@"timezone.offset"]; - self.envelopesPath = [self.sentryPath stringByAppendingPathComponent:EnvelopesPathComponent]; +- (void)removeFileAtPath:(NSString *)path +{ + @synchronized(self) { + _non_thread_safe_removeFileAtPath(path); + } +} + +- (NSArray *)allFilesInFolder:(NSString *)path +{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + if (![fileManager fileExistsAtPath:path]) { + SENTRY_LOG_INFO(@"Returning empty files list, as folder doesn't exist at path: %@", path); + return @[]; + } + + NSError *error = nil; + NSArray *storedFiles = [fileManager contentsOfDirectoryAtPath:path error:&error]; + if (error != nil) { + SENTRY_LOG_ERROR(@"Couldn't load files in folder %@: %@", path, error); + return @[]; + } + return [storedFiles sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; +} + +- (BOOL)isDirectory:(NSString *)path +{ + BOOL isDir = NO; + return [NSFileManager.defaultManager fileExistsAtPath:path isDirectory:&isDir] && isDir; } /** * @note This method must be statically accessible because it will be called during app launch, - * before any instance of @c SentryFileManager exists, and so wouldn't be able to access this path + * before any instance of ``SentryFileManager`` exists, and so wouldn't be able to access this path * from an objc property on it like the other paths. */ -NSString *_Nullable sentryApplicationSupportPath(void) +NSString *_Nullable sentryStaticCachesPath(void) { - static NSString *_Nullable sentryApplicationSupportPath = nil; + static NSString *_Nullable sentryStaticCachesPath = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - NSArray *paths = NSSearchPathForDirectoriesInDomains( - NSApplicationSupportDirectory, NSUserDomainMask, YES); - NSString *applicationSupportDirectory = [paths firstObject]; - if (applicationSupportDirectory == nil) { - SENTRY_LOG_WARN(@"No application support directory location reported."); + // We request the users cache directory from Foundation. + // For iOS apps and macOS apps with sandboxing, this path will be scoped for the current + // app. For macOS apps without sandboxing, this path is not scoped and will be shared + // between all apps. + NSString *_Nullable cachesDirectory + = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) + .firstObject; + if (cachesDirectory == nil) { + SENTRY_LOG_WARN(@"No caches directory location reported."); return; } - sentryApplicationSupportPath = - [applicationSupportDirectory stringByAppendingPathComponent:@"io.sentry"]; + + // We need to ensure our own scoped directory so that this path is not shared between other + // apps on the same system. + NSString *_Nullable scopedCachesDirectory = sentryGetScopedCachesDirectory(cachesDirectory); + if (!scopedCachesDirectory) { + SENTRY_LOG_WARN(@"Failed to get scoped static caches directory."); + return; + } + sentryStaticCachesPath = scopedCachesDirectory; + SENTRY_LOG_DEBUG(@"Using static cache directory: %@", sentryStaticCachesPath); }); - return sentryApplicationSupportPath; + return sentryStaticCachesPath; +} + +NSString *_Nullable sentryGetScopedCachesDirectory(NSString *cachesDirectory) +{ +#if !TARGET_OS_OSX + // iOS apps are always sandboxed, therefore we can just early-return with the provided caches + // directory. + return cachesDirectory; +#else + + // For macOS apps, we need to ensure our own sandbox so that this path is not shared between + // all apps that ship the SDK. + + // We can not use the SentryNSProcessInfoWrapper here because this method is called before + // the SentryDependencyContainer is initialized. + NSProcessInfo *processInfo = [NSProcessInfo processInfo]; + + // Only apps running in a sandboxed environment have the `APP_SANDBOX_CONTAINER_ID` set as a + // process environment variable. Reference implementation: + // https://github.com/realm/realm-js/blob/a03127726939f08f608edbdb2341605938f25708/packages/realm/binding/apple/platform.mm#L58-L74 + BOOL isSandboxed = processInfo.environment[@"APP_SANDBOX_CONTAINER_ID"] != nil; + + // The bundle identifier is used to create a unique cache directory for the app. + // If the bundle identifier is not available, we use the name of the executable. + // Note: `SentryCrash.getBundleName` is using `CFBundleName` to create a scoped directory. + // That value can be absent, therefore we use a more stable approach here. + NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; + NSString *lastPathComponent = [[[NSBundle mainBundle] executablePath] lastPathComponent]; + + // Due to `NSProcessInfo` and `NSBundle` not being mockable in unit tests, we extract only the + // logic to a separate function. + return sentryBuildScopedCachesDirectoryPath( + cachesDirectory, isSandboxed, bundleIdentifier, lastPathComponent); +#endif +} + +NSString *_Nullable sentryBuildScopedCachesDirectoryPath(NSString *cachesDirectory, + BOOL isSandboxed, NSString *_Nullable bundleIdentifier, NSString *_Nullable lastPathComponent) +{ + // If the app is sandboxed, we can just use the provided caches directory. + if (isSandboxed) { + return cachesDirectory; + } + + // If the macOS app is not sandboxed, we need to manually create a scoped cache + // directory. The cache path must be unique an stable over app launches, therefore we + // can not use any changing identifier. + SENTRY_LOG_DEBUG( + @"App is not sandboxed, extending default cache directory with bundle identifier."); + NSString *_Nullable identifier = bundleIdentifier; + if (identifier == nil) { + SENTRY_LOG_WARN(@"No bundle identifier found, using main bundle executable name."); + identifier = lastPathComponent; + } else if (identifier.length == 0) { + SENTRY_LOG_WARN(@"Bundle identifier exists but is zero length, using main bundle " + @"executable name."); + identifier = lastPathComponent; + } + + // If neither the bundle identifier nor the executable name are available, we can't + // create a unique and stable cache directory. + // We do not fall back to any default path, because it could be shared with other apps + // and cause leaks impacting other apps. + if (identifier == nil) { + SENTRY_LOG_ERROR(@"No bundle identifier found, cannot create cache directory."); + return nil; + } + + // It's unlikely that the executable name will be zero length, but we'll cover this case anyways + if (identifier.length == 0) { + SENTRY_LOG_ERROR(@"Executable name was zero length."); + return nil; + } + + return [cachesDirectory stringByAppendingPathComponent:identifier]; +} + +NSString *_Nullable sentryStaticBasePath(void) +{ + static NSString *_Nullable sentryStaticBasePath = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *cachesDirectory = sentryStaticCachesPath(); + if (cachesDirectory == nil) { + SENTRY_LOG_WARN(@"No caches directory location reported."); + return; + } + sentryStaticBasePath = [cachesDirectory stringByAppendingPathComponent:@"io.sentry"]; + }); + return sentryStaticBasePath; +} + +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) +void +removeSentryStaticBasePath(void) +{ + _non_thread_safe_removeFileAtPath(sentryStaticBasePath()); } +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) + +#pragma mark - Profiling #if SENTRY_TARGET_PROFILING_SUPPORTED @@ -758,18 +804,25 @@ - (void)createPathsWithOptions:(SentryOptions *)options { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - NSString *appSupportPath = sentryApplicationSupportPath(); - if (appSupportPath == nil) { + NSString *basePath = sentryStaticBasePath(); + if (basePath == nil) { SENTRY_LOG_WARN(@"No location available to write a launch profiling config."); return; } - sentryLaunchConfigFileURL = [NSURL - fileURLWithPath:[appSupportPath stringByAppendingPathComponent:@"profileLaunch"]]; + NSError *error; + if (!createDirectoryIfNotExists(basePath, &error)) { + SENTRY_LOG_ERROR( + @"Can't create base path to store launch profile config file: %@", error); + return; + } + sentryLaunchConfigFileURL = + [NSURL fileURLWithPath:[basePath stringByAppendingPathComponent:@"profileLaunch"]]; + SENTRY_LOG_DEBUG(@"Launch profile config file URL: %@", sentryLaunchConfigFileURL); }); return sentryLaunchConfigFileURL; } -NSDictionary *_Nullable appLaunchProfileConfiguration(void) +NSDictionary *_Nullable sentry_appLaunchProfileConfiguration(void) { NSURL *url = launchProfileConfigFileURL(); if (![[NSFileManager defaultManager] fileExistsAtPath:url.path]) { @@ -789,6 +842,7 @@ - (void)createPathsWithOptions:(SentryOptions *)options { NSString *path = launchProfileConfigFileURL().path; if (path == nil) { + SENTRY_LOG_DEBUG(@"Failed to construct the path to check for launch profile configs.") return NO; } @@ -810,12 +864,215 @@ - (void)createPathsWithOptions:(SentryOptions *)options } #endif // SENTRY_TARGET_PROFILING_SUPPORTED +#pragma mark - Private Session + +- (void)storeSession:(SentrySession *)session sessionFilePath:(NSString *)sessionFilePath +{ + NSData *sessionData = [SentrySerialization dataWithSession:session]; + SENTRY_LOG_DEBUG(@"Writing session: %@", sessionFilePath); + @synchronized(self.currentSessionFilePath) { + if (![self writeData:sessionData toPath:sessionFilePath]) { + SENTRY_LOG_WARN(@"Failed to write session data."); + } + } +} + +- (void)deleteSession:(NSString *)sessionFilePath +{ + SENTRY_LOG_DEBUG(@"Deleting session: %@", sessionFilePath); + @synchronized(self.currentSessionFilePath) { + [self removeFileAtPath:sessionFilePath]; + } +} + +- (nullable SentrySession *)readSession:(NSString *)sessionFilePath +{ + [SentryLog + logWithMessage:[NSString stringWithFormat:@"Reading from session: %@", sessionFilePath] + andLevel:kSentryLevelDebug]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSData *currentData = nil; + @synchronized(self.currentSessionFilePath) { + currentData = [fileManager contentsAtPath:sessionFilePath]; + if (nil == currentData) { + SENTRY_LOG_WARN(@"No data found at %@", sessionFilePath); + return nil; + } + } + SentrySession *currentSession = [SentrySerialization sessionWithData:currentData]; + if (nil == currentSession) { + SENTRY_LOG_ERROR( + @"Data stored in session: '%@' was not parsed as session.", sessionFilePath); + return nil; + } + return currentSession; +} + +#pragma mark - Private App State + +- (SentryAppState *_Nullable)readAppStateFrom:(NSString *)path +{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSData *currentData = [fileManager contentsAtPath:path]; + if (nil == currentData) { + SENTRY_LOG_WARN(@"No app state data found at %@", path); + return nil; + } + return [SentrySerialization appStateWithData:currentData]; +} + +- (void)deleteAppStateFrom:(NSString *)path +{ + [self removeFileAtPath:path]; +} + +- (void)moveState:(NSString *)stateFilePath toPreviousState:(NSString *)previousStateFilePath +{ + SENTRY_LOG_DEBUG(@"Moving state %@ to previous %@.", stateFilePath, previousStateFilePath); + NSFileManager *fileManager = [NSFileManager defaultManager]; + + // We first need to remove the old previous state file, + // or we can't move the current state file to it. + [self removeFileAtPath:previousStateFilePath]; + NSError *error = nil; + if (![fileManager moveItemAtPath:stateFilePath toPath:previousStateFilePath error:&error]) { + // We don't want to log an error if the file doesn't exist. + if (nil != error && error.code != NSFileNoSuchFileError) { + SENTRY_LOG_ERROR(@"Failed to move %@ to previous state file: %@", stateFilePath, error); + } + } +} + +#pragma mark - Private Envelope + +// Delete every envelope in self.basePath older than 90 days, +// as Sentry only retains data for 90 days. +- (void)deleteOldEnvelopesFromAllSentryPaths +{ + // First we find all directories in the base path, these are all the various hashed DSN paths + for (NSString *filePath in [self allFilesInFolder:self.basePath]) { + NSString *envelopesPath = [self getEnvelopesPath:filePath]; + + // Then we will remove all old items from the envelopes subdirectory + [self deleteOldEnvelopesFromPath:envelopesPath]; + } +} + +- (void)deleteOldEnvelopesFromPath:(NSString *)envelopesPath +{ + NSTimeInterval now = + [[SentryDependencyContainer.sharedInstance.dateProvider date] timeIntervalSince1970]; + + for (NSString *path in [self allFilesInFolder:envelopesPath]) { + NSString *fullPath = [envelopesPath stringByAppendingPathComponent:path]; + NSDictionary *dict = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath + error:nil]; + if (!dict || !dict[NSFileCreationDate]) { + SENTRY_LOG_WARN(@"Could not get NSFileCreationDate from %@", fullPath); + continue; + } + + NSTimeInterval age = now - [dict[NSFileCreationDate] timeIntervalSince1970]; + if (age > 90 * 24 * 60 * 60) { + [self removeFileAtPath:fullPath]; + SENTRY_LOG_DEBUG( + @"Removed envelope at path %@ because it was older than 90 days", fullPath); + } + } +} + +- (void)handleEnvelopesLimit +{ + NSArray *envelopeFilePaths = [self allFilesInFolder:self.envelopesPath]; + NSInteger numberOfEnvelopesToRemove = envelopeFilePaths.count - self.maxEnvelopes; + if (numberOfEnvelopesToRemove <= 0) { + return; + } + + for (NSUInteger i = 0; i < numberOfEnvelopesToRemove; i++) { + NSString *envelopeFilePath = + [self.envelopesPath stringByAppendingPathComponent:envelopeFilePaths[i]]; + + // Remove current envelope path + NSMutableArray *envelopePathsCopy = + [[NSMutableArray alloc] initWithArray:[envelopeFilePaths copy]]; + [envelopePathsCopy removeObjectAtIndex:i]; + + NSData *envelopeData = [[NSFileManager defaultManager] contentsAtPath:envelopeFilePath]; + SentryEnvelope *envelope = [SentrySerialization envelopeWithData:envelopeData]; + + BOOL didMigrateSessionInit = + [SentryMigrateSessionInit migrateSessionInit:envelope + envelopesDirPath:self.envelopesPath + envelopeFilePaths:envelopePathsCopy]; + + for (SentryEnvelopeItem *item in envelope.items) { + SentryDataCategory rateLimitCategory + = sentryDataCategoryForEnvelopItemType(item.header.type); + + // When migrating the session init, the envelope to delete still contains the session + // migrated to another envelope. Therefore, the envelope item is not deleted but + // migrated. + if (didMigrateSessionInit && rateLimitCategory == kSentryDataCategorySession) { + continue; + } + + [_delegate envelopeItemDeleted:item withCategory:rateLimitCategory]; + } + + [self removeFileAtPath:envelopeFilePath]; + } + + SENTRY_LOG_DEBUG(@"Removed %ld file(s) from <%@>", (long)numberOfEnvelopesToRemove, + [self.envelopesPath lastPathComponent]); +} + +#pragma mark - Private Others + +- (NSString *)uniqueAscendingJsonName +{ + // %f = double + // %05lu = unsigned with always 5 digits and leading zeros if number is too small. We + // need this because otherwise 10 would be sorted before 2 for example. + // %@ = NSString + // For example 978307200.000000-00001-3FE8C3AE-EB9C-4BEB-868C-14B8D47C33DD.json + return [NSString stringWithFormat:@"%f-%05lu-%@.json", + [[SentryDependencyContainer.sharedInstance.dateProvider date] timeIntervalSince1970], + (unsigned long)self.currentFileCounter++, [NSUUID UUID].UUIDString]; +} + +- (SentryFileContents *_Nullable)getFileContents:(NSString *)folderPath + filePath:(NSString *)filePath +{ + + NSString *finalPath = [folderPath stringByAppendingPathComponent:filePath]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSData *content = [fileManager contentsAtPath:finalPath]; + if (nil != content) { + return [[SentryFileContents alloc] initWithPath:finalPath contents:content]; + } else { + return nil; + } +} + +- (NSArray *)allFilesContentInFolder:(NSString *)path +{ + @synchronized(self) { + NSMutableArray *contents = [NSMutableArray new]; + for (NSString *filePath in [self allFilesInFolder:path]) { + SentryFileContents *fileContents = [self getFileContents:path filePath:filePath]; + + if (nil != fileContents) { + [contents addObject:fileContents]; + } + } + return contents; + } +} + - (void)clearDiskState { [self removeFileAtPath:self.basePath]; -#if SENTRY_TARGET_PROFILING_SUPPORTED - [self removeFileAtPath:sentryApplicationSupportPath()]; -#endif // SENTRY_TARGET_PROFILING_SUPPORTED } @end diff --git a/Pods/Sentry/Sources/Sentry/SentryFrameRemover.m b/Pods/Sentry/Sources/Sentry/SentryFrameRemover.m index 1e1a2e661..76f416e38 100644 --- a/Pods/Sentry/Sources/Sentry/SentryFrameRemover.m +++ b/Pods/Sentry/Sources/Sentry/SentryFrameRemover.m @@ -1,6 +1,5 @@ #import "SentryFrameRemover.h" #import "SentryFrame.h" -#import @implementation SentryFrameRemover diff --git a/Pods/Sentry/Sources/Sentry/SentryFramesTracker.m b/Pods/Sentry/Sources/Sentry/SentryFramesTracker.m index cbc5188fd..b417db118 100644 --- a/Pods/Sentry/Sources/Sentry/SentryFramesTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryFramesTracker.m @@ -28,13 +28,12 @@ static CFTimeInterval const SentryFrozenFrameThreshold = 0.7; static CFTimeInterval const SentryPreviousFrameInitialValue = -1; -@interface -SentryFramesTracker () +@interface SentryFramesTracker () @property (nonatomic, assign, readonly) BOOL isStarted; @property (nonatomic, strong, readonly) SentryDisplayLinkWrapper *displayLinkWrapper; -@property (nonatomic, strong, readonly) SentryCurrentDateProvider *dateProvider; +@property (nonatomic, strong, readonly) id dateProvider; @property (nonatomic, strong, readonly) SentryDispatchQueueWrapper *dispatchQueueWrapper; @property (nonatomic, strong) SentryNSNotificationCenterWrapper *notificationCenter; @property (nonatomic, assign) CFTimeInterval previousFrameTimestamp; @@ -66,7 +65,7 @@ @implementation SentryFramesTracker { } - (instancetype)initWithDisplayLinkWrapper:(SentryDisplayLinkWrapper *)displayLinkWrapper - dateProvider:(SentryCurrentDateProvider *)dateProvider + dateProvider:(id)dateProvider dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper notificationCenter:(SentryNSNotificationCenterWrapper *)notificationCenter keepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration @@ -257,14 +256,11 @@ - (void)displayLinkCallback - (void)reportNewFrame { - NSArray *localListeners; - @synchronized(self.listeners) { - localListeners = [self.listeners allObjects]; - } - NSDate *newFrameDate = [self.dateProvider date]; - - for (id listener in localListeners) { + // We need to copy the list because some listeners will remove themselves + // from the list during the callback, causing a crash during iteration. + NSArray> *listeners = [self.listeners copy]; + for (id listener in listeners) { [listener framesTrackerHasNewFrame:newFrameDate]; } } @@ -274,9 +270,9 @@ - (void)recordTimestamp:(NSNumber *)timestamp value:(NSNumber *)value array:(NSM { BOOL shouldRecord = [SentryTraceProfiler isCurrentlyProfiling] || [SentryContinuousProfiler isCurrentlyProfiling]; -# if defined(TEST) || defined(TESTCI) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) shouldRecord = YES; -# endif // defined(TEST) || defined(TESTCI) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) if (shouldRecord) { [array addObject:@{ @"timestamp" : timestamp, @"value" : value }]; } @@ -311,17 +307,15 @@ - (SentryFramesDelayResult *)getFramesDelay:(uint64_t)startSystemTimestamp - (void)addListener:(id)listener { - - @synchronized(self.listeners) { - [self.listeners addObject:listener]; - } + // Adding listeners on the main thread to avoid race condition with new frame callback + [self.dispatchQueueWrapper dispatchAsyncOnMainQueue:^{ [self.listeners addObject:listener]; }]; } - (void)removeListener:(id)listener { - @synchronized(self.listeners) { - [self.listeners removeObject:listener]; - } + // Removing listeners on the main thread to avoid race condition with new frame callback + [self.dispatchQueueWrapper + dispatchAsyncOnMainQueue:^{ [self.listeners removeObject:listener]; }]; } - (void)pause diff --git a/Pods/Sentry/Sources/Sentry/SentryFramesTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryFramesTrackingIntegration.m index 109eb20e3..b723b55eb 100644 --- a/Pods/Sentry/Sources/Sentry/SentryFramesTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryFramesTrackingIntegration.m @@ -8,8 +8,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryFramesTrackingIntegration () +@interface SentryFramesTrackingIntegration () @property (nonatomic, strong) SentryFramesTracker *tracker; @@ -32,7 +31,7 @@ - (BOOL)installWithOptions:(SentryOptions *)options - (SentryIntegrationOption)integrationOptions { - return kIntegrationOptionEnableAutoPerformanceTracing | kIntegrationOptionIsTracingEnabled; + return kIntegrationOptionStartFramesTracker; } - (void)uninstall diff --git a/Pods/Sentry/Sources/Sentry/SentryGeo.m b/Pods/Sentry/Sources/Sentry/SentryGeo.m index 91d73818a..b913713cb 100644 --- a/Pods/Sentry/Sources/Sentry/SentryGeo.m +++ b/Pods/Sentry/Sources/Sentry/SentryGeo.m @@ -1,6 +1,5 @@ #import "SentryGeo.h" - -#import +#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN @@ -21,7 +20,21 @@ - (id)copyWithZone:(nullable NSZone *)zone - (NSDictionary *)serialize { - return @{ @"city" : self.city, @"country_code" : self.countryCode, @"region" : self.region }; + NSMutableDictionary *serializedData = [[NSMutableDictionary alloc] init]; + + if (self.city) { + [serializedData setValue:self.city forKey:@"city"]; + } + + if (self.countryCode) { + [serializedData setValue:self.countryCode forKey:@"country_code"]; + } + + if (self.region) { + [serializedData setValue:self.region forKey:@"region"]; + } + + return serializedData; } - (BOOL)isEqual:(id _Nullable)other diff --git a/Pods/Sentry/Sources/Sentry/SentryHttpDateParser.m b/Pods/Sentry/Sources/Sentry/SentryHttpDateParser.m index 5b971710b..65542b441 100644 --- a/Pods/Sentry/Sources/Sentry/SentryHttpDateParser.m +++ b/Pods/Sentry/Sources/Sentry/SentryHttpDateParser.m @@ -1,10 +1,8 @@ #import "SentryHttpDateParser.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryHttpDateParser () +@interface SentryHttpDateParser () @property (nonatomic, strong) NSDateFormatter *dateFormatter; diff --git a/Pods/Sentry/Sources/Sentry/SentryHttpTransport.m b/Pods/Sentry/Sources/Sentry/SentryHttpTransport.m index df8bf38f5..00c1002a7 100644 --- a/Pods/Sentry/Sources/Sentry/SentryHttpTransport.m +++ b/Pods/Sentry/Sources/Sentry/SentryHttpTransport.m @@ -25,8 +25,7 @@ # import "SentryReachability.h" #endif // !TARGET_OS_WATCH -@interface -SentryHttpTransport () +@interface SentryHttpTransport () #if SENTRY_HAS_REACHABILITY #endif // !TARGET_OS_WATCH @@ -41,9 +40,9 @@ @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueue; @property (nonatomic, strong) dispatch_group_t dispatchGroup; -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) @property (nullable, nonatomic, strong) void (^startFlushCallback)(void); -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) /** * Relay expects the discarded events split by data category and reason; see @@ -54,6 +53,8 @@ @property (nonatomic, strong) NSMutableDictionary *discardedEvents; +@property (nonatomic, strong) NSMutableArray *notStoredEnvelopes; + /** * Synching with a dispatch queue to have concurrent reads and writes as barrier blocks is roughly * 30% slower than using atomic here. @@ -88,6 +89,7 @@ - (id)initWithOptions:(SentryOptions *)options _isSending = NO; _isFlushing = NO; self.discardedEvents = [NSMutableDictionary new]; + self.notStoredEnvelopes = [NSMutableArray new]; [self.envelopeRateLimit setDelegate:self]; [self.fileManager setDelegate:self]; @@ -122,7 +124,7 @@ - (void)sendEnvelope:(SentryEnvelope *)envelope envelope = [self.envelopeRateLimit removeRateLimitedItems:envelope]; if (envelope.items.count == 0) { - SENTRY_LOG_DEBUG(@"RateLimit is active for all envelope items."); + SENTRY_LOG_WARN(@"RateLimit is active for all envelope items."); return; } @@ -133,11 +135,22 @@ - (void)sendEnvelope:(SentryEnvelope *)envelope // thread, which could be the main thread. __weak SentryHttpTransport *weakSelf = self; [self.dispatchQueue dispatchAsyncWithBlock:^{ - [weakSelf.fileManager storeEnvelope:envelopeToStore]; + NSString *path = [weakSelf.fileManager storeEnvelope:envelopeToStore]; + if (path == nil) { + SENTRY_LOG_DEBUG(@"Could not store envelope. Schedule for sending."); + @synchronized(weakSelf.notStoredEnvelopes) { + [weakSelf.notStoredEnvelopes addObject:envelopeToStore]; + } + } [weakSelf sendAllCachedEnvelopes]; }]; } +- (void)storeEnvelope:(SentryEnvelope *)envelope +{ + [self.fileManager storeEnvelope:envelope]; +} + - (void)recordLostEvent:(SentryDataCategory)category reason:(SentryDiscardReason)reason { [self recordLostEvent:category reason:reason quantity:1]; @@ -152,7 +165,7 @@ - (void)recordLostEvent:(SentryDataCategory)category } NSString *key = [NSString stringWithFormat:@"%@:%@", nameForSentryDataCategory(category), - nameForSentryDiscardReason(reason)]; + nameForSentryDiscardReason(reason)]; @synchronized(self.discardedEvents) { SentryDiscardedEvent *event = self.discardedEvents[key]; @@ -168,12 +181,12 @@ - (void)recordLostEvent:(SentryDataCategory)category } } -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) - (void)setStartFlushCallback:(void (^)(void))callback { _startFlushCallback = callback; } -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) - (SentryFlushResult)flush:(NSTimeInterval)timeout { @@ -193,11 +206,11 @@ - (SentryFlushResult)flush:(NSTimeInterval)timeout _isFlushing = YES; dispatch_group_enter(self.dispatchGroup); -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) if (self.startFlushCallback != nil) { self.startFlushCallback(); } -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) } // We are waiting for the dispatch group below, which we leave in finished sending. As @@ -213,7 +226,7 @@ - (SentryFlushResult)flush:(NSTimeInterval)timeout SENTRY_LOG_DEBUG(@"Finished flushing."); return kSentryFlushResultSuccess; } else { - SENTRY_LOG_DEBUG(@"Flushing timed out."); + SENTRY_LOG_WARN(@"Flushing timed out."); return kSentryFlushResultTimedOut; } } @@ -224,6 +237,8 @@ - (SentryFlushResult)flush:(NSTimeInterval)timeout - (void)envelopeItemDropped:(SentryEnvelopeItem *)envelopeItem withCategory:(SentryDataCategory)dataCategory; { + SENTRY_LOG_WARN(@"Envelope item dropped due to exceeding rate limit. Category: %@", + nameForSentryDataCategory(dataCategory)); [self recordLostEvent:dataCategory reason:kSentryDiscardReasonRateLimitBackoff]; [self recordLostSpans:envelopeItem reason:kSentryDiscardReasonRateLimitBackoff]; } @@ -274,31 +289,49 @@ - (void)sendAllCachedEnvelopes SENTRY_LOG_DEBUG(@"sendAllCachedEnvelopes start."); @synchronized(self) { - if (self.isSending || ![self.requestManager isReady]) { + if (self.isSending) { SENTRY_LOG_DEBUG(@"Already sending."); return; } + if (![self.requestManager isReady]) { + SENTRY_LOG_DEBUG(@"Request manager not ready."); + return; + } self.isSending = YES; } - SentryFileContents *envelopeFileContents = [self.fileManager getOldestEnvelope]; - if (nil == envelopeFileContents) { - SENTRY_LOG_DEBUG(@"No envelopes left to send."); - [self finishedSending]; - return; + SentryEnvelope *envelope; + NSString *envelopeFilePath; + + @synchronized(self.notStoredEnvelopes) { + if (self.notStoredEnvelopes.count > 0) { + envelope = self.notStoredEnvelopes[0]; + [self.notStoredEnvelopes removeObjectAtIndex:0]; + } } - SentryEnvelope *envelope = [SentrySerialization envelopeWithData:envelopeFileContents.contents]; - if (nil == envelope) { - SENTRY_LOG_DEBUG(@"Envelope contained no deserializable data."); - [self deleteEnvelopeAndSendNext:envelopeFileContents.path]; - return; + if (envelope == nil) { + SentryFileContents *envelopeFileContents = [self.fileManager getOldestEnvelope]; + if (nil == envelopeFileContents) { + SENTRY_LOG_DEBUG(@"No envelopes left to send."); + [self finishedSending]; + return; + } + + envelopeFilePath = envelopeFileContents.path; + + envelope = [SentrySerialization envelopeWithData:envelopeFileContents.contents]; + if (nil == envelope) { + SENTRY_LOG_DEBUG(@"Envelope contained no deserializable data."); + [self deleteEnvelopeAndSendNext:envelopeFilePath]; + return; + } } SentryEnvelope *rateLimitedEnvelope = [self.envelopeRateLimit removeRateLimitedItems:envelope]; if (rateLimitedEnvelope.items.count == 0) { SENTRY_LOG_DEBUG(@"Envelope had no rate-limited items, nothing to send."); - [self deleteEnvelopeAndSendNext:envelopeFileContents.path]; + [self deleteEnvelopeAndSendNext:envelopeFilePath]; return; } @@ -310,22 +343,24 @@ - (void)sendAllCachedEnvelopes dsn:self.options.parsedDsn didFailWithError:&requestError]; - if (nil != requestError) { - SENTRY_LOG_DEBUG(@"Failed to build request: %@.", requestError); + if (nil == request || nil != requestError) { + if (nil != requestError) { + SENTRY_LOG_DEBUG(@"Failed to build request: %@.", requestError); + } [self recordLostEventFor:rateLimitedEnvelope.items]; - [self deleteEnvelopeAndSendNext:envelopeFileContents.path]; + [self deleteEnvelopeAndSendNext:envelopeFilePath]; return; } else { - [self sendEnvelope:rateLimitedEnvelope - envelopePath:envelopeFileContents.path - request:request]; + [self sendEnvelope:rateLimitedEnvelope envelopePath:envelopeFilePath request:request]; } } -- (void)deleteEnvelopeAndSendNext:(NSString *)envelopePath +- (void)deleteEnvelopeAndSendNext:(nullable NSString *)envelopePath { SENTRY_LOG_DEBUG(@"Deleting envelope and sending next."); - [self.fileManager removeFileAtPath:envelopePath]; + if (envelopePath != nil) { + [self.fileManager removeFileAtPath:envelopePath]; + } @synchronized(self) { self.isSending = NO; } @@ -341,7 +376,7 @@ - (void)deleteEnvelopeAndSendNext:(NSString *)envelopePath } - (void)sendEnvelope:(SentryEnvelope *)envelope - envelopePath:(NSString *)envelopePath + envelopePath:(NSString *_Nullable)envelopePath request:(NSURLRequest *)request { __weak SentryHttpTransport *weakSelf = self; @@ -358,14 +393,22 @@ - (void)sendEnvelope:(SentryEnvelope *)envelope [weakSelf recordLostEventFor:envelope.items]; } - if (nil != response) { - SENTRY_LOG_DEBUG(@"Envelope sent successfully!"); - [weakSelf.rateLimits update:response]; - [weakSelf deleteEnvelopeAndSendNext:envelopePath]; - } else { + if (response == nil) { SENTRY_LOG_DEBUG(@"No internet connection."); [weakSelf finishedSending]; + return; } + + [weakSelf.rateLimits update:response]; + + if (response.statusCode == 200) { + SENTRY_LOG_DEBUG(@"Envelope sent successfully!"); + [weakSelf deleteEnvelopeAndSendNext:envelopePath]; + return; + } + + SENTRY_LOG_DEBUG(@"Received non-200 response code: %li", (long)response.statusCode); + [weakSelf finishedSending]; }]; } @@ -399,7 +442,7 @@ - (void)recordLostEventFor:(NSArray *)items - (void)recordLostSpans:(SentryEnvelopeItem *)envelopeItem reason:(SentryDiscardReason)reason { if ([SentryEnvelopeItemTypeTransaction isEqualToString:envelopeItem.header.type]) { - NSDictionary *transactionJson = + NSDictionary *_Nullable transactionJson = [SentrySerialization deserializeDictionaryFromJsonData:envelopeItem.data]; if (transactionJson == nil) { return; diff --git a/Pods/Sentry/Sources/Sentry/SentryHub.m b/Pods/Sentry/Sources/Sentry/SentryHub.m index 57186a346..41f090de5 100644 --- a/Pods/Sentry/Sources/Sentry/SentryHub.m +++ b/Pods/Sentry/Sources/Sentry/SentryHub.m @@ -9,10 +9,11 @@ #import "SentryFileManager.h" #import "SentryHub+Private.h" #import "SentryInstallation.h" +#import "SentryIntegrationProtocol.h" #import "SentryLevelMapper.h" #import "SentryLog.h" #import "SentryNSTimerFactory.h" -#import "SentryOptions.h" +#import "SentryOptions+Private.h" #import "SentryPerformanceTracker.h" #import "SentryProfilingConditionals.h" #import "SentrySDK+Private.h" @@ -22,9 +23,8 @@ #import "SentryScope+Private.h" #import "SentrySerialization.h" #import "SentrySession+Private.h" -#import "SentryStatsdClient.h" #import "SentrySwift.h" -#import "SentryTraceOrigins.h" +#import "SentryTraceOrigin.h" #import "SentryTracer.h" #import "SentryTransaction.h" #import "SentryTransactionContext+Private.h" @@ -35,8 +35,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryHub () +@interface SentryHub () @property (nullable, nonatomic, strong) SentryClient *client; @property (nullable, nonatomic, strong) SentryScope *scope; @@ -74,18 +73,6 @@ - (instancetype)initWithClient:(nullable SentryClient *)client _scope = scope; _crashWrapper = crashWrapper; _dispatchQueue = dispatchQueue; - SentryStatsdClient *statsdClient = [[SentryStatsdClient alloc] initWithClient:client]; - SentryMetricsClient *metricsClient = - [[SentryMetricsClient alloc] initWithClient:statsdClient]; - _metrics = [[SentryMetricsAPI alloc] - initWithEnabled:client.options.enableMetrics - client:metricsClient - currentDate:SentryDependencyContainer.sharedInstance.dateProvider - dispatchQueue:_dispatchQueue - random:SentryDependencyContainer.sharedInstance.random - beforeEmitMetric:client.options.beforeEmitMetric]; - [_metrics setDelegate:self]; - _sessionLock = [[NSObject alloc] init]; _integrationsLock = [[NSObject alloc] init]; _installedIntegrations = [[NSMutableArray alloc] init]; @@ -105,10 +92,13 @@ - (void)startSession SentrySession *lastSession = nil; SentryScope *scope = self.scope; SentryOptions *options = [_client options]; - if (options == nil || options.releaseName == nil) { - [SentryLog - logWithMessage:[NSString stringWithFormat:@"No option or release to start a session."] - andLevel:kSentryLevelError]; + if (options == nil) { + SENTRY_LOG_ERROR(@"Options of the client are nil. Not starting a session."); + return; + } + if (options.releaseName == nil) { + SENTRY_LOG_ERROR( + @"Release name of the options of the client is nil. Not starting a session."); return; } @@ -218,10 +208,8 @@ - (void)captureSession:(nullable SentrySession *)session SentryClient *client = _client; if (client.options.diagnosticLevel == kSentryLevelDebug) { - [SentryLog - logWithMessage:[NSString stringWithFormat:@"Capturing session with status: %@", - [self createSessionDebugString:session]] - andLevel:kSentryLevelDebug]; + SENTRY_LOG_DEBUG( + @"Capturing session with status: %@", [self createSessionDebugString:session]); } [client captureSession:session]; } @@ -241,9 +229,9 @@ - (nullable SentrySession *)incrementSessionErrors return sessionCopy; } -- (void)captureCrashEvent:(SentryEvent *)event +- (void)captureFatalEvent:(SentryEvent *)event { - [self captureCrashEvent:event withScope:self.scope]; + [self captureFatalEvent:event withScope:self.scope]; } /** @@ -252,9 +240,9 @@ - (void)captureCrashEvent:(SentryEvent *)event * currently no way to know which one belongs to the crashed session, so we send the session with * the first crash event we receive. */ -- (void)captureCrashEvent:(SentryEvent *)event withScope:(SentryScope *)scope +- (void)captureFatalEvent:(SentryEvent *)event withScope:(SentryScope *)scope { - event.isCrashEvent = YES; + event.isFatalEvent = YES; SentryClient *client = _client; if (client == nil) { @@ -268,13 +256,49 @@ - (void)captureCrashEvent:(SentryEvent *)event withScope:(SentryScope *)scope // users didn't start a manual session yet, and there is a previous crash on disk. In this case, // we just send the crash event. if (crashedSession != nil) { - [client captureCrashEvent:event withSession:crashedSession withScope:scope]; + [client captureFatalEvent:event withSession:crashedSession withScope:scope]; [fileManager deleteCrashedSession]; } else { - [client captureCrashEvent:event withScope:scope]; + [client captureFatalEvent:event withScope:scope]; + } +} + +#if SENTRY_HAS_UIKIT + +/** + * This method expects an abnormal session already stored to disk. For more info checkout: @c + * SentryCrashIntegrationSessionHandler + */ +- (void)captureFatalAppHangEvent:(SentryEvent *)event +{ + // We treat fatal app hang events similar to crashes. + event.isFatalEvent = YES; + + SentryClient *_Nullable client = _client; + if (client == nil) { + return; + } + + SentryFileManager *fileManager = [client fileManager]; + SentrySession *abnormalSession = [fileManager readAbnormalSession]; + + // It can occur that there is no session yet because autoSessionTracking was just enabled or + // users didn't start a manual session yet, and there is a previous fatal app hang on disk. In + // this case, we just send the fatal app hang event. + if (abnormalSession == nil) { + [client captureFatalEvent:event withScope:self.scope]; + return; } + + // Users won't see the anr_foreground mechanism in the UI. The Sentry UI will present release + // health and session statistics as app hangs. + abnormalSession.abnormalMechanism = @"anr_foreground"; + [client captureFatalEvent:event withSession:abnormalSession withScope:self.scope]; + [fileManager deleteAbnormalSession]; } +#endif // SENTRY_HAS_UIKIT + - (void)captureTransaction:(SentryTransaction *)transaction withScope:(SentryScope *)scope { [self captureTransaction:transaction withScope:scope additionalEnvelopeItems:@[]]; @@ -305,6 +329,21 @@ - (void)captureTransaction:(SentryTransaction *)transaction }]; } +- (void)saveCrashTransaction:(SentryTransaction *)transaction +{ + SentrySampleDecision decision = transaction.trace.sampled; + + if (decision != kSentrySampleDecisionYes) { + // No need to update client reports when we're crashing cause they get lost anyways. + return; + } + + SentryClient *client = _client; + if (client != nil) { + [client saveCrashTransaction:transaction withScope:self.scope]; + } +} + - (SentryId *)captureEvent:(SentryEvent *)event { return [self captureEvent:event withScope:self.scope]; @@ -392,8 +431,9 @@ - (void)captureReplayEvent:(SentryReplayEvent *)replayEvent - (SentryTransactionContext *)transactionContext:(SentryTransactionContext *)context withSampled:(SentrySampleDecision)sampleDecision + sampleRate:(NSNumber *)sampleRate + sampleRand:(NSNumber *)sampleRand { - return [[SentryTransactionContext alloc] initWithName:context.name nameSource:context.nameSource operation:context.operation @@ -402,7 +442,11 @@ - (SentryTransactionContext *)transactionContext:(SentryTransactionContext *)con spanId:context.spanId parentSpanId:context.parentSpanId sampled:sampleDecision - parentSampled:context.parentSampled]; + parentSampled:context.parentSampled + sampleRate:sampleRate + parentSampleRate:context.parentSampleRate + sampleRand:sampleRand + parentSampleRand:context.parentSampleRand]; } - (SentryTracer *)startTransactionWithContext:(SentryTransactionContext *)transactionContext @@ -417,14 +461,16 @@ - (SentryTracer *)startTransactionWithContext:(SentryTransactionContext *)transa SentrySamplerDecision *tracesSamplerDecision = sentry_sampleTrace(samplingContext, self.client.options); transactionContext = [self transactionContext:transactionContext - withSampled:tracesSamplerDecision.decision]; - transactionContext.sampleRate = tracesSamplerDecision.sampleRate; + withSampled:tracesSamplerDecision.decision + sampleRate:tracesSamplerDecision.sampleRate + sampleRand:tracesSamplerDecision.sampleRand]; #if SENTRY_TARGET_PROFILING_SUPPORTED - SentrySamplerDecision *profilesSamplerDecision - = sentry_sampleTraceProfile(samplingContext, tracesSamplerDecision, self.client.options); - - configuration.profilesSamplerDecision = profilesSamplerDecision; + if (![self.client.options isContinuousProfilingEnabled]) { + SentrySamplerDecision *profilesSamplerDecision = sentry_sampleTraceProfile( + samplingContext, tracesSamplerDecision, self.client.options); + configuration.profilesSamplerDecision = profilesSamplerDecision; + } #endif // SENTRY_TARGET_PROFILING_SUPPORTED" SentryTracer *tracer = [[SentryTracer alloc] initWithTransactionContext:transactionContext @@ -503,6 +549,14 @@ - (void)captureUserFeedback:(SentryUserFeedback *)userFeedback } } +- (void)captureFeedback:(SentryFeedback *)feedback +{ + SentryClient *client = _client; + if (client != nil) { + [client captureFeedback:feedback withScope:self.scope]; + } +} + - (void)addBreadcrumb:(SentryBreadcrumb *)crumb { SentryOptions *options = [[self client] options]; @@ -680,10 +734,8 @@ - (SentryEnvelope *)updateSessionState:(SentryEnvelope *)envelope endSessionCrashedWithTimestamp:[SentryDependencyContainer.sharedInstance .dateProvider date]]; if (_client.options.diagnosticLevel == kSentryLevelDebug) { - [SentryLog - logWithMessage:[NSString stringWithFormat:@"Ending session with status: %@", - [self createSessionDebugString:currentSession]] - andLevel:kSentryLevelDebug]; + SENTRY_LOG_DEBUG(@"Ending session with status: %@", + [self createSessionDebugString:currentSession]); } if (startNewSession) { // Setting _session to nil so startSession doesn't capture it again @@ -708,7 +760,7 @@ - (BOOL)envelopeContainsEventWithErrorOrHigher:(NSArray *) for (SentryEnvelopeItem *item in items) { if ([item.header.type isEqualToString:SentryEnvelopeItemTypeEvent]) { // If there is no level the default is error - NSDictionary *eventJson = + NSDictionary *_Nullable eventJson = [SentrySerialization deserializeDictionaryFromJsonData:item.data]; if (eventJson == nil) { return NO; @@ -741,11 +793,8 @@ - (BOOL)eventContainsOnlyHandledErrors:(NSDictionary *)eventDictionary - (void)reportFullyDisplayed { #if SENTRY_HAS_UIKIT - if (_client.options.enableTimeToFullDisplayTracing) { - [SentryUIViewControllerPerformanceTracker.shared reportFullyDisplayed]; - } else { - SENTRY_LOG_DEBUG(@"The options `enableTimeToFullDisplay` is disabled."); - } + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] + reportFullyDisplayed]; #endif // SENTRY_HAS_UIKIT } @@ -763,7 +812,6 @@ - (NSString *)createSessionDebugString:(SentrySession *)session - (void)flush:(NSTimeInterval)timeout { - [_metrics flush]; SentryClient *client = _client; if (client != nil) { [client flush:timeout]; @@ -772,47 +820,10 @@ - (void)flush:(NSTimeInterval)timeout - (void)close { - [_metrics close]; [_client close]; SENTRY_LOG_DEBUG(@"Closed the Hub."); } -#pragma mark - SentryMetricsAPIDelegate - -- (NSDictionary *)getDefaultTagsForMetrics -{ - SentryOptions *options = [_client options]; - if (options == nil || options.enableDefaultTagsForMetrics == NO) { - return @{}; - } - - NSMutableDictionary *defaultTags = [NSMutableDictionary dictionary]; - - if (options.releaseName != nil) { - defaultTags[@"release"] = options.releaseName; - } - - defaultTags[@"environment"] = options.environment; - - return defaultTags; -} - -- (id _Nullable)getCurrentSpan -{ - return _scope.span; -} - -- (LocalMetricsAggregator *_Nullable)getLocalMetricsAggregatorWithSpan:(id)span -{ - // We don't want to add them LocalMetricsAggregator to the SentrySpan protocol and make it - // public. Instead, we check if the span responds to the getLocalMetricsAggregator which, every - // span should do. - if ([span isKindOfClass:SentrySpan.class]) { - return [(SentrySpan *)span getLocalMetricsAggregator]; - } - return nil; -} - - (void)registerSessionListener:(id)listener { _sessionListener = listener; diff --git a/Pods/Sentry/Sources/Sentry/SentryInAppLogic.m b/Pods/Sentry/Sources/Sentry/SentryInAppLogic.m index 1b5ac288b..0d7cf0413 100644 --- a/Pods/Sentry/Sources/Sentry/SentryInAppLogic.m +++ b/Pods/Sentry/Sources/Sentry/SentryInAppLogic.m @@ -1,17 +1,34 @@ #import "SentryInAppLogic.h" -#import +#import "SentryLog.h" #import NS_ASSUME_NONNULL_BEGIN +@interface SentryInAppLogic () + +@property (nonnull, readonly) NSArray *inAppExcludes; + +@end + @implementation SentryInAppLogic - (instancetype)initWithInAppIncludes:(NSArray *)inAppIncludes inAppExcludes:(NSArray *)inAppExcludes { if (self = [super init]) { - _inAppIncludes = inAppIncludes; - _inAppExcludes = inAppExcludes; + NSMutableArray *includes = + [[NSMutableArray alloc] initWithCapacity:inAppIncludes.count]; + for (NSString *include in inAppIncludes) { + [includes addObject:include.lowercaseString]; + } + _inAppIncludes = includes; + + NSMutableArray *excludes = + [[NSMutableArray alloc] initWithCapacity:inAppExcludes.count]; + for (NSString *exclude in inAppExcludes) { + [excludes addObject:exclude.lowercaseString]; + } + _inAppExcludes = excludes; } return self; @@ -23,13 +40,17 @@ - (BOOL)isInApp:(nullable NSString *)imageName return NO; } + NSString *imageNameLastPathComponent = imageName.lastPathComponent.lowercaseString; + for (NSString *inAppInclude in self.inAppIncludes) { - if ([SentryInAppLogic isImageNameInApp:imageName inAppInclude:inAppInclude]) + if ([SentryInAppLogic isImageNameLastPathComponentInApp:imageNameLastPathComponent + inAppInclude:inAppInclude]) + return YES; } - for (NSString *inAppExlude in self.inAppExcludes) { - if ([imageName.lastPathComponent.lowercaseString hasPrefix:inAppExlude.lowercaseString]) + for (NSString *inAppExclude in self.inAppExcludes) { + if ([imageNameLastPathComponent hasPrefix:inAppExclude]) return NO; } @@ -48,7 +69,15 @@ - (BOOL)isClassInApp:(Class)targetClass + (BOOL)isImageNameInApp:(NSString *)imageName inAppInclude:(NSString *)inAppInclude { - return [imageName.lastPathComponent.lowercaseString hasPrefix:inAppInclude.lowercaseString]; + return [SentryInAppLogic + isImageNameLastPathComponentInApp:imageName.lastPathComponent.lowercaseString + inAppInclude:inAppInclude.lowercaseString]; +} + ++ (BOOL)isImageNameLastPathComponentInApp:(NSString *)imageNameLastPathComponent + inAppInclude:(NSString *)inAppInclude +{ + return [imageNameLastPathComponent hasPrefix:inAppInclude]; } @end diff --git a/Pods/Sentry/Sources/Sentry/SentryInstallation.m b/Pods/Sentry/Sources/Sentry/SentryInstallation.m index 7a0c64121..ae79dc89d 100644 --- a/Pods/Sentry/Sources/Sentry/SentryInstallation.m +++ b/Pods/Sentry/Sources/Sentry/SentryInstallation.m @@ -6,8 +6,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryInstallation () +@interface SentryInstallation () @property (class, nonatomic, readonly) NSMutableDictionary *installationStringsByCacheDirectoryPaths; diff --git a/Pods/Sentry/Sources/Sentry/SentryLevelHelper.m b/Pods/Sentry/Sources/Sentry/SentryLevelHelper.m index 104092d5d..aa7a73b0e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryLevelHelper.m +++ b/Pods/Sentry/Sources/Sentry/SentryLevelHelper.m @@ -1,8 +1,21 @@ #import "SentryLevelHelper.h" #import "SentryBreadcrumb+Private.h" +#import "SentryEvent.h" -NSUInteger -sentry_breadcrumbLevel(SentryBreadcrumb *breadcrumb) +@implementation SentryLevelBridge : NSObject ++ (NSUInteger)breadcrumbLevel:(SentryBreadcrumb *)breadcrumb { return breadcrumb.level; } + ++ (void)setBreadcrumbLevel:(SentryBreadcrumb *)breadcrumb level:(NSUInteger)level +{ + breadcrumb.level = level; +} + ++ (void)setBreadcrumbLevelOnEvent:(SentryEvent *)event level:(NSUInteger)level +{ + event.level = level; +} + +@end diff --git a/Pods/Sentry/Sources/Sentry/SentryLogC.m b/Pods/Sentry/Sources/Sentry/SentryLogC.m index 994ebdacb..88f7e825a 100644 --- a/Pods/Sentry/Sources/Sentry/SentryLogC.m +++ b/Pods/Sentry/Sources/Sentry/SentryLogC.m @@ -1,19 +1,104 @@ +#import "SentryLogC.h" #import "SentryAsyncSafeLog.h" #import "SentryFileManager.h" #import "SentryInternalCDefines.h" #import "SentryLevelMapper.h" #import "SentryLog.h" +#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN void -sentry_initializeAsyncLogFile(void) +sendLog(NSInteger level, const char file[], int line, NSString *format, va_list args) +{ + NSString *formattedMessage = [[NSString alloc] initWithFormat:format arguments:args]; + + [SentryLog logWithMessage:[NSString stringWithFormat:@"[%@:%d] %@", + [[[NSString stringWithUTF8String:file] lastPathComponent] + stringByDeletingPathExtension], + line, formattedMessage] + andLevel:level]; +} + +bool +debugEnabled(void) +{ + return [SentryLog willLogAtLevel:kSentryLevelDebug]; +} +bool +infoEnabled(void) +{ + return [SentryLog willLogAtLevel:kSentryLevelInfo]; +} +bool +warnEnabled(void) +{ + return [SentryLog willLogAtLevel:kSentryLevelWarning]; +} +bool +errorEnabled(void) +{ + return [SentryLog willLogAtLevel:kSentryLevelError]; +} +bool +fatalEnabled(void) +{ + return [SentryLog willLogAtLevel:kSentryLevelFatal]; +} + +void +logDebug(const char file[], int line, NSString *format, ...) +{ + va_list args; + va_start(args, format); + sendLog(kSentryLevelDebug, file, line, format, args); + va_end(args); +} + +void +logInfo(const char file[], int line, NSString *format, ...) +{ + va_list args; + va_start(args, format); + sendLog(kSentryLevelInfo, file, line, format, args); + va_end(args); +} + +void +logWarn(const char file[], int line, NSString *format, ...) +{ + va_list args; + va_start(args, format); + sendLog(kSentryLevelWarning, file, line, format, args); + va_end(args); +} + +void +logError(const char file[], int line, NSString *format, ...) +{ + va_list args; + va_start(args, format); + sendLog(kSentryLevelError, file, line, format, args); + va_end(args); +} + +void +logFatal(const char file[], int line, NSString *format, ...) +{ + va_list args; + va_start(args, format); + sendLog(kSentryLevelFatal, file, line, format, args); + va_end(args); +} + +@implementation SentryAsyncLogWrapper ++ (void)initializeAsyncLogFile { const char *asyncLogPath = - [[sentryApplicationSupportPath() stringByAppendingPathComponent:@"async.log"] UTF8String]; + [[sentryStaticCachesPath() stringByAppendingPathComponent:@"async.log"] UTF8String]; NSError *error; - if (!createDirectoryIfNotExists(sentryApplicationSupportPath(), &error)) { + if (!createDirectoryIfNotExists(sentryStaticCachesPath(), &error)) { SENTRY_LOG_ERROR(@"Failed to initialize directory for async log file: %@", error); return; } @@ -25,5 +110,6 @@ @"Could not open a handle to specified path for async logging %s", asyncLogPath); }; } +@end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryMessage.m b/Pods/Sentry/Sources/Sentry/SentryMessage.m index 637422523..bc4a3ab24 100644 --- a/Pods/Sentry/Sources/Sentry/SentryMessage.m +++ b/Pods/Sentry/Sources/Sentry/SentryMessage.m @@ -1,31 +1,20 @@ #import "SentryMessage.h" -#import NS_ASSUME_NONNULL_BEGIN -const NSUInteger MAX_STRING_LENGTH = 8192; - @implementation SentryMessage - (instancetype)initWithFormatted:(NSString *)formatted { if (self = [super init]) { - if (nil != formatted && formatted.length > MAX_STRING_LENGTH) { - _formatted = [formatted substringToIndex:MAX_STRING_LENGTH]; - } else { - _formatted = formatted; - } + _formatted = formatted; } return self; } - (void)setMessage:(NSString *_Nullable)message { - if (nil != message && message.length > MAX_STRING_LENGTH) { - _message = [message substringToIndex:MAX_STRING_LENGTH]; - } else { - _message = message; - } + _message = message; } - (NSDictionary *)serialize diff --git a/Pods/Sentry/Sources/Sentry/SentryMeta.m b/Pods/Sentry/Sources/Sentry/SentryMeta.m index f66013d67..bd861cc90 100644 --- a/Pods/Sentry/Sources/Sentry/SentryMeta.m +++ b/Pods/Sentry/Sources/Sentry/SentryMeta.m @@ -5,7 +5,7 @@ @implementation SentryMeta // Don't remove the static keyword. If you do the compiler adds the constant name to the global // symbol table and it might clash with other constants. When keeping the static keyword the // compiler replaces all occurrences with the value. -static NSString *versionString = @"8.36.0"; +static NSString *versionString = @"8.52.0"; static NSString *sdkName = @"sentry.cocoa"; + (NSString *)versionString diff --git a/Pods/Sentry/Sources/Sentry/SentryMetricKitIntegration.m b/Pods/Sentry/Sources/Sentry/SentryMetricKitIntegration.m index 48de54802..18e6e480e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryMetricKitIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryMetricKitIntegration.m @@ -5,6 +5,7 @@ # import "SentryInternalDefines.h" # import "SentryOptions.h" # import "SentryScope.h" +# import "SentrySwift.h" # import # import # import @@ -45,8 +46,7 @@ @implementation SentryMXExceptionParams @end -@interface -SentryMetricKitIntegration () +@interface SentryMetricKitIntegration () @property (nonatomic, strong, nullable) SentryMXManager *metricKitManager; @property (nonatomic, strong) NSMeasurementFormatter *measurementFormatter; @@ -100,7 +100,7 @@ - (void)didReceiveCrashDiagnostic:(MXCrashDiagnostic *)diagnostic { NSString *exceptionValue = [NSString stringWithFormat:@"MachException Type:%@ Code:%@ Signal:%@", - diagnostic.exceptionType, diagnostic.exceptionCode, diagnostic.signal]; + diagnostic.exceptionType, diagnostic.exceptionCode, diagnostic.signal]; SentryMXExceptionParams *params = [[SentryMXExceptionParams alloc] init]; params.handled = NO; @@ -135,7 +135,7 @@ - (void)didReceiveCpuExceptionDiagnostic:(MXCPUExceptionDiagnostic *)diagnostic NSString *exceptionValue = [NSString stringWithFormat:@"MXCPUException totalCPUTime:%@ totalSampledTime:%@", - totalCPUTime, totalSampledTime]; + totalCPUTime, totalSampledTime]; // Still need to figure out proper exception values and types. // This code is currently only there for testing with TestFlight. @@ -228,7 +228,7 @@ - (void)captureMXEvent:(SentryMXCallStackTree *)callStackTree event.debugMeta = [self extractDebugMetaFromMXCallStacks:callStackTree.callStacks]; // The crash event can be way from the past. We don't want to impact the current session. - // Therefore we don't call captureCrashEvent. + // Therefore we don't call captureFatalEvent. [self captureEvent:event withDiagnosticJSON:diagnosticJSON]; } else { for (SentryMXCallStack *callStack in callStackTree.callStacks) { diff --git a/Pods/Sentry/Sources/Sentry/SentryMigrateSessionInit.m b/Pods/Sentry/Sources/Sentry/SentryMigrateSessionInit.m index 621b2df37..87b309f07 100644 --- a/Pods/Sentry/Sources/Sentry/SentryMigrateSessionInit.m +++ b/Pods/Sentry/Sources/Sentry/SentryMigrateSessionInit.m @@ -5,6 +5,7 @@ #import "SentryLog.h" #import "SentrySerialization.h" #import "SentrySession+Private.h" +#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN @@ -108,7 +109,7 @@ + (void)storeSessionInit:(SentryEnvelope *)originalEnvelope [SentryLog logWithMessage:[NSString stringWithFormat:@"Could not migrate session init, because " @"storing the updated envelope failed: %@", - error.description] + error.description] andLevel:kSentryLevelError]; } } diff --git a/Pods/Sentry/Sources/Sentry/SentryMsgPackSerializer.m b/Pods/Sentry/Sources/Sentry/SentryMsgPackSerializer.m index 1bbe76e02..8193ce04d 100644 --- a/Pods/Sentry/Sources/Sentry/SentryMsgPackSerializer.m +++ b/Pods/Sentry/Sources/Sentry/SentryMsgPackSerializer.m @@ -71,8 +71,7 @@ + (BOOL)serializeDictionaryToMessagePack: @end -@implementation -NSURL (SentryStreameble) +@implementation NSURL (SentryStreameble) - (NSInputStream *)asInputStream { @@ -94,8 +93,7 @@ - (NSInteger)streamSize @end -@implementation -NSData (SentryStreameble) +@implementation NSData (SentryStreameble) - (NSInputStream *)asInputStream { diff --git a/Pods/Sentry/Sources/Sentry/SentryNSDataSwizzling.m b/Pods/Sentry/Sources/Sentry/SentryNSDataSwizzling.m index c61c4fd79..6b7dcc7ad 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNSDataSwizzling.m +++ b/Pods/Sentry/Sources/Sentry/SentryNSDataSwizzling.m @@ -1,22 +1,13 @@ #import "SentryNSDataSwizzling.h" -#import "SentryCrashDefaultMachineContextWrapper.h" -#import "SentryCrashMachineContextWrapper.h" -#import "SentryCrashStackEntryMapper.h" -#import "SentryDependencyContainer.h" -#import "SentryInAppLogic.h" -#import "SentryNSDataTracker.h" -#import "SentryNSProcessInfoWrapper.h" -#import "SentryOptions+Private.h" -#import "SentryStacktraceBuilder.h" +#import "SentryLog.h" +#import "SentrySwift.h" #import "SentrySwizzle.h" -#import "SentryThreadInspector.h" -#import +#import "SentryTraceOrigin.h" #import -@interface -SentryNSDataSwizzling () +@interface SentryNSDataSwizzling () -@property (nonatomic, strong) SentryNSDataTracker *dataTracker; +@property (nonatomic, strong) SentryFileIOTracker *tracker; @end @@ -30,34 +21,44 @@ + (SentryNSDataSwizzling *)shared return instance; } -- (void)startWithOptions:(SentryOptions *)options +- (void)startWithOptions:(SentryOptions *)options tracker:(SentryFileIOTracker *)tracker { - self.dataTracker = [[SentryNSDataTracker alloc] - initWithThreadInspector:[[SentryThreadInspector alloc] initWithOptions:options] - processInfoWrapper:[SentryDependencyContainer.sharedInstance processInfoWrapper]]; - [self.dataTracker enable]; - [SentryNSDataSwizzling swizzleNSData]; + self.tracker = tracker; + + if (!options.enableSwizzling) { + SENTRY_LOG_DEBUG(@"Auto-tracking of NSData is disabled because enableSwizzling is false"); + return; + } + + if (!options.experimental.enableDataSwizzling) { + SENTRY_LOG_DEBUG( + @"Auto-tracking of NSData is disabled because enableDataSwizzling is false"); + return; + } + + [SentryNSDataSwizzling swizzle]; } - (void)stop { - [self.dataTracker disable]; + [SentryNSDataSwizzling unswizzle]; } // SentrySwizzleInstanceMethod declaration shadows a local variable. The swizzling is working // fine and we accept this warning. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wshadow" -+ (void)swizzleNSData ++ (void)swizzle { SEL writeToFileAtomicallySelector = NSSelectorFromString(@"writeToFile:atomically:"); SentrySwizzleInstanceMethod(NSData.class, writeToFileAtomicallySelector, SentrySWReturnType(BOOL), SentrySWArguments(NSString * path, BOOL useAuxiliaryFile), SentrySWReplacement({ - return [SentryNSDataSwizzling.shared.dataTracker + return [SentryNSDataSwizzling.shared.tracker measureNSData:self writeToFile:path atomically:useAuxiliaryFile + origin:SentryTraceOriginAutoNSData method:^BOOL(NSString *_Nonnull filePath, BOOL isAtomically) { return SentrySWCallOriginal(filePath, isAtomically); }]; @@ -69,10 +70,11 @@ + (void)swizzleNSData SentrySWReturnType(BOOL), SentrySWArguments(NSString * path, NSDataWritingOptions writeOptionsMask, NSError * *error), SentrySWReplacement({ - return [SentryNSDataSwizzling.shared.dataTracker + return [SentryNSDataSwizzling.shared.tracker measureNSData:self writeToFile:path options:writeOptionsMask + origin:SentryTraceOriginAutoNSData error:error method:^BOOL( NSString *filePath, NSDataWritingOptions options, NSError **outError) { @@ -87,9 +89,10 @@ + (void)swizzleNSData SentrySWReturnType(NSData *), SentrySWArguments(NSString * path, NSDataReadingOptions options, NSError * *error), SentrySWReplacement({ - return [SentryNSDataSwizzling.shared.dataTracker + return [SentryNSDataSwizzling.shared.tracker measureNSDataFromFile:path options:options + origin:SentryTraceOriginAutoNSData error:error method:^NSData *(NSString *filePath, NSDataReadingOptions options, NSError **outError) { @@ -102,8 +105,9 @@ + (void)swizzleNSData SEL initWithContentsOfFileSelector = NSSelectorFromString(@"initWithContentsOfFile:"); SentrySwizzleInstanceMethod(NSData.class, initWithContentsOfFileSelector, SentrySWReturnType(NSData *), SentrySWArguments(NSString * path), SentrySWReplacement({ - return [SentryNSDataSwizzling.shared.dataTracker + return [SentryNSDataSwizzling.shared.tracker measureNSDataFromFile:path + origin:SentryTraceOriginAutoNSData method:^NSData *( NSString *filePath) { return SentrySWCallOriginal(filePath); }]; }), @@ -115,9 +119,10 @@ + (void)swizzleNSData SentrySWReturnType(NSData *), SentrySWArguments(NSURL * url, NSDataReadingOptions options, NSError * *error), SentrySWReplacement({ - return [SentryNSDataSwizzling.shared.dataTracker + return [SentryNSDataSwizzling.shared.tracker measureNSDataFromURL:url options:options + origin:SentryTraceOriginAutoNSData error:error method:^NSData *(NSURL *fileUrl, NSDataReadingOptions options, NSError **outError) { @@ -127,5 +132,33 @@ + (void)swizzleNSData SentrySwizzleModeOncePerClassAndSuperclasses, (void *)initWithContentsOfURLOptionsErrorSelector); } + ++ (void)unswizzle +{ +#if SENTRY_TEST || SENTRY_TEST_CI + // Unswizzling is only supported in test targets as it is considered unsafe for production. + SEL writeToFileAtomicallySelector = NSSelectorFromString(@"writeToFile:atomically:"); + SentryUnswizzleInstanceMethod( + NSData.class, writeToFileAtomicallySelector, (void *)writeToFileAtomicallySelector); + + SEL writeToFileOptionsErrorSelector = NSSelectorFromString(@"writeToFile:options:error:"); + SentryUnswizzleInstanceMethod( + NSData.class, writeToFileOptionsErrorSelector, (void *)writeToFileOptionsErrorSelector); + + SEL initWithContentOfFileOptionsErrorSelector + = NSSelectorFromString(@"initWithContentsOfFile:options:error:"); + SentryUnswizzleInstanceMethod(NSData.class, initWithContentOfFileOptionsErrorSelector, + (void *)initWithContentOfFileOptionsErrorSelector); + + SEL initWithContentsOfFileSelector = NSSelectorFromString(@"initWithContentsOfFile:"); + SentryUnswizzleInstanceMethod( + NSData.class, initWithContentsOfFileSelector, (void *)initWithContentsOfFileSelector); + + SEL initWithContentsOfURLOptionsErrorSelector + = NSSelectorFromString(@"initWithContentsOfURL:options:error:"); + SentryUnswizzleInstanceMethod(NSData.class, initWithContentsOfURLOptionsErrorSelector, + (void *)initWithContentsOfURLOptionsErrorSelector); +#endif // SENTRY_TEST || SENTRY_TEST_CI +} #pragma clang diagnostic pop @end diff --git a/Pods/Sentry/Sources/Sentry/SentryNSDataUtils.m b/Pods/Sentry/Sources/Sentry/SentryNSDataUtils.m index 7df513c47..15ba40b4f 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNSDataUtils.m +++ b/Pods/Sentry/Sources/Sentry/SentryNSDataUtils.m @@ -63,11 +63,4 @@ return mutable; } -NSUInteger -sentry_crc32ofString(NSString *value) -{ - NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding]; - return crc32(0, data.bytes, (uInt)[data length]); -} - NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryNSDictionarySanitize.m b/Pods/Sentry/Sources/Sentry/SentryNSDictionarySanitize.m index 536d161ed..faa72c5df 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNSDictionarySanitize.m +++ b/Pods/Sentry/Sources/Sentry/SentryNSDictionarySanitize.m @@ -8,6 +8,10 @@ return nil; } + if (![[dictionary class] isSubclassOfClass:[NSDictionary class]]) { + return nil; + } + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; for (id rawKey in dictionary.allKeys) { id rawValue = [dictionary objectForKey:rawKey]; diff --git a/Pods/Sentry/Sources/Sentry/SentryNSFileManagerSwizzling.m b/Pods/Sentry/Sources/Sentry/SentryNSFileManagerSwizzling.m new file mode 100644 index 000000000..71ced8710 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryNSFileManagerSwizzling.m @@ -0,0 +1,97 @@ +#import "SentryNSFileManagerSwizzling.h" +#import "SentryLog.h" +#import "SentrySwift.h" +#import "SentrySwizzle.h" +#import "SentryTraceOrigin.h" +#import + +@interface SentryNSFileManagerSwizzling () + +@property (nonatomic, strong) SentryFileIOTracker *tracker; + +@end + +@implementation SentryNSFileManagerSwizzling + ++ (SentryNSFileManagerSwizzling *)shared +{ + static SentryNSFileManagerSwizzling *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); + return instance; +} + +- (void)startWithOptions:(SentryOptions *)options tracker:(SentryFileIOTracker *)tracker +{ + self.tracker = tracker; + + if (!options.enableSwizzling) { + SENTRY_LOG_DEBUG( + @"Auto-tracking of NSFileManager is disabled because enableSwizzling is false"); + return; + } + + if (!options.experimental.enableFileManagerSwizzling) { + SENTRY_LOG_DEBUG(@"Auto-tracking of NSFileManager is disabled because " + @"enableFileManagerSwizzling is false"); + return; + } + + [SentryNSFileManagerSwizzling swizzle]; +} + +- (void)stop +{ + [SentryNSFileManagerSwizzling unswizzle]; +} + +// SentrySwizzleInstanceMethod declaration shadows a local variable. The swizzling is working +// fine and we accept this warning. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wshadow" ++ (void)swizzle +{ + // Before iOS 18.0, macOS 15.0 and tvOS 18.0 the NSFileManager used NSData.writeToFile + // internally, which was tracked using swizzling of NSData. This behaviour changed, therefore + // the file manager needs to swizzled for later versions. + // + // Ref: https://github.com/swiftlang/swift-foundation/pull/410 + if (@available(iOS 18, macOS 15, tvOS 18, *)) { + SEL createFileAtPathContentsAttributes + = NSSelectorFromString(@"createFileAtPath:contents:attributes:"); + SentrySwizzleInstanceMethod(NSFileManager.class, createFileAtPathContentsAttributes, + SentrySWReturnType(BOOL), + SentrySWArguments( + NSString * path, NSData * data, NSDictionary * attributes), + SentrySWReplacement({ + return [SentryNSFileManagerSwizzling.shared.tracker + measureNSFileManagerCreateFileAtPath:path + data:data + attributes:attributes + origin:SentryTraceOriginAutoNSData + method:^BOOL(NSString *path, NSData *data, + NSDictionary + *attributes) { + return SentrySWCallOriginal( + path, data, attributes); + }]; + }), + SentrySwizzleModeOncePerClassAndSuperclasses, + (void *)createFileAtPathContentsAttributes); + } +} + ++ (void)unswizzle +{ +#if SENTRY_TEST || SENTRY_TEST_CI + // Unswizzling is only supported in test targets as it is considered unsafe for production. + if (@available(iOS 18, macOS 15, tvOS 18, *)) { + SEL createFileAtPathContentsAttributes + = NSSelectorFromString(@"createFileAtPath:contents:attributes:"); + SentryUnswizzleInstanceMethod(NSFileManager.class, createFileAtPathContentsAttributes, + (void *)createFileAtPathContentsAttributes); + } +#endif // SENTRY_TEST || SENTRY_TEST_CI +} +#pragma clang diagnostic pop +@end diff --git a/Pods/Sentry/Sources/Sentry/SentryNSProcessInfoWrapper.mm b/Pods/Sentry/Sources/Sentry/SentryNSProcessInfoWrapper.mm index bf7713e5f..91c746f1c 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNSProcessInfoWrapper.mm +++ b/Pods/Sentry/Sources/Sentry/SentryNSProcessInfoWrapper.mm @@ -1,7 +1,7 @@ #import "SentryNSProcessInfoWrapper.h" @implementation SentryNSProcessInfoWrapper { -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) NSString *_executablePath; } - (void)setProcessPath:(NSString *)path @@ -20,7 +20,7 @@ - (instancetype)init #else } # define SENTRY_BINARY_EXECUTABLE_PATH NSBundle.mainBundle.executablePath; -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) + (SentryNSProcessInfoWrapper *)shared { @@ -45,4 +45,14 @@ - (NSUInteger)processorCount return NSProcessInfo.processInfo.processorCount; } +- (NSProcessInfoThermalState)thermalState +{ + return NSProcessInfo.processInfo.thermalState; +} + +- (NSDictionary *)environment +{ + return NSProcessInfo.processInfo.environment; +} + @end diff --git a/Pods/Sentry/Sources/Sentry/SentryNSURLRequest.m b/Pods/Sentry/Sources/Sentry/SentryNSURLRequest.m index 7d9b79cca..84cff051b 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNSURLRequest.m +++ b/Pods/Sentry/Sources/Sentry/SentryNSURLRequest.m @@ -113,8 +113,7 @@ - (instancetype)initEnvelopeRequestWithURL:(NSURL *)url { NSMutableString *string = [NSMutableString stringWithString:@"Sentry "]; [string appendFormat:@"%@,", newHeaderPart(@"sentry_version", SentryServerVersionString)]; - [string - appendFormat:@"%@,", + [string appendFormat:@"%@,", newHeaderPart(@"sentry_client", [NSString stringWithFormat:@"%@/%@", SentryMeta.sdkName, SentryMeta.versionString])]; [string appendFormat:@"%@", newHeaderPart(@"sentry_key", url.user)]; diff --git a/Pods/Sentry/Sources/Sentry/SentryNSURLRequestBuilder.m b/Pods/Sentry/Sources/Sentry/SentryNSURLRequestBuilder.m index 2db67cfb4..60d9f8b0b 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNSURLRequestBuilder.m +++ b/Pods/Sentry/Sources/Sentry/SentryNSURLRequestBuilder.m @@ -1,32 +1,40 @@ #import "SentryNSURLRequestBuilder.h" #import "SentryDsn.h" +#import "SentryLog.h" #import "SentryNSURLRequest.h" #import "SentrySerialization.h" -#import NS_ASSUME_NONNULL_BEGIN @implementation SentryNSURLRequestBuilder -- (NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope - dsn:(SentryDsn *)dsn - didFailWithError:(NSError *_Nullable *_Nullable)error +- (nullable NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope + dsn:(SentryDsn *)dsn + didFailWithError:(NSError *_Nullable *_Nullable)error { - return [[SentryNSURLRequest alloc] - initEnvelopeRequestWithDsn:dsn - andData:[SentrySerialization dataWithEnvelope:envelope] - didFailWithError:error]; + NSData *data = [SentrySerialization dataWithEnvelope:envelope]; + if (nil == data) { + SENTRY_LOG_ERROR(@"Envelope cannot be converted to data"); + return nil; + } + return [[SentryNSURLRequest alloc] initEnvelopeRequestWithDsn:dsn + andData:data + didFailWithError:error]; } -- (NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope - url:(NSURL *)url - didFailWithError:(NSError *_Nullable *_Nullable)error +- (nullable NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope + url:(NSURL *)url + didFailWithError:(NSError *_Nullable *_Nullable)error { - return [[SentryNSURLRequest alloc] - initEnvelopeRequestWithURL:url - andData:[SentrySerialization dataWithEnvelope:envelope] - authHeader:nil - didFailWithError:error]; + NSData *data = [SentrySerialization dataWithEnvelope:envelope]; + if (nil == data) { + SENTRY_LOG_ERROR(@"Envelope cannot be converted to data"); + return nil; + } + return [[SentryNSURLRequest alloc] initEnvelopeRequestWithURL:url + andData:data + authHeader:nil + didFailWithError:error]; } @end diff --git a/Pods/Sentry/Sources/Sentry/SentryNetworkTracker.m b/Pods/Sentry/Sources/Sentry/SentryNetworkTracker.m index 8e1e823b2..8083fb54e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryNetworkTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryNetworkTracker.m @@ -8,6 +8,7 @@ #import "SentryHttpStatusCodeRange+Private.h" #import "SentryHttpStatusCodeRange.h" #import "SentryHub+Private.h" +#import "SentryInternalCDefines.h" #import "SentryLog.h" #import "SentryMechanism.h" #import "SentryNoOpSpan.h" @@ -17,17 +18,22 @@ #import "SentrySDK+Private.h" #import "SentryScope+Private.h" #import "SentrySerialization.h" +#import "SentrySpanOperation.h" #import "SentryStacktrace.h" #import "SentrySwift.h" #import "SentryThread.h" #import "SentryThreadInspector.h" #import "SentryTraceContext.h" #import "SentryTraceHeader.h" -#import "SentryTraceOrigins.h" +#import "SentryTraceOrigin.h" #import "SentryTracer.h" #import "SentryUser.h" #import +static NSString *const SentryNetworkTrackerThreadSanitizerMessage + = @"We accept race conditions for turning flags on and off to avoid acquiring locks, which can " + @"significantly slow down many HTTP requests running in parallel."; + /** * WARNING: We had issues in the past with this code on older iOS versions. We don't run unit tests * on all the iOS versions our SDK supports. When adding this comment on April 12th, 2023, we @@ -37,8 +43,7 @@ * break on specific iOS versions to ensure it works properly when modifying this file. If they * could, please add UI tests and run them on older iOS versions. */ -@interface -SentryNetworkTracker () +@interface SentryNetworkTracker () @property (nonatomic, assign) BOOL isNetworkTrackingEnabled; @property (nonatomic, assign) BOOL isNetworkBreadcrumbEnabled; @@ -68,42 +73,37 @@ - (instancetype)init return self; } -- (void)enableNetworkTracking +- (void)enableNetworkTracking SENTRY_DISABLE_THREAD_SANITIZER( + SentryNetworkTrackerThreadSanitizerMessage) { - @synchronized(self) { - _isNetworkTrackingEnabled = YES; - } + _isNetworkTrackingEnabled = YES; } -- (void)enableNetworkBreadcrumbs +- (void)enableNetworkBreadcrumbs SENTRY_DISABLE_THREAD_SANITIZER( + SentryNetworkTrackerThreadSanitizerMessage) { - @synchronized(self) { - _isNetworkBreadcrumbEnabled = YES; - } + _isNetworkBreadcrumbEnabled = YES; } -- (void)enableCaptureFailedRequests +- (void)enableCaptureFailedRequests SENTRY_DISABLE_THREAD_SANITIZER( + SentryNetworkTrackerThreadSanitizerMessage) { - @synchronized(self) { - _isCaptureFailedRequestsEnabled = YES; - } + _isCaptureFailedRequestsEnabled = YES; } -- (void)enableGraphQLOperationTracking +- (void)enableGraphQLOperationTracking SENTRY_DISABLE_THREAD_SANITIZER( + SentryNetworkTrackerThreadSanitizerMessage) { - @synchronized(self) { - _isGraphQLOperationTrackingEnabled = YES; - } + + _isGraphQLOperationTrackingEnabled = YES; } -- (void)disable +- (void)disable SENTRY_DISABLE_THREAD_SANITIZER(SentryNetworkTrackerThreadSanitizerMessage) { - @synchronized(self) { - _isNetworkBreadcrumbEnabled = NO; - _isNetworkTrackingEnabled = NO; - _isCaptureFailedRequestsEnabled = NO; - _isGraphQLOperationTrackingEnabled = NO; - } + _isNetworkBreadcrumbEnabled = NO; + _isNetworkTrackingEnabled = NO; + _isCaptureFailedRequestsEnabled = NO; + _isGraphQLOperationTrackingEnabled = NO; } - (BOOL)isTargetMatch:(NSURL *)URL withTargets:(NSArray *)targets @@ -169,17 +169,15 @@ - (void)urlSessionTaskResume:(NSURLSessionTask *)sessionTask OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - @synchronized(self) { - if (!self.isNetworkTrackingEnabled) { - [self addTraceWithoutTransactionToTask:sessionTask]; - return; - } + if (!self.isNetworkTrackingEnabled) { + [self addTraceWithoutTransactionToTask:sessionTask]; + return; } UrlSanitized *safeUrl = [[UrlSanitized alloc] initWithURL:url]; @synchronized(sessionTask) { - __block id span; - __block id netSpan; + __block id _Nullable span; + __block id _Nullable netSpan; netSpan = objc_getAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_TRACKER_SPAN); // The task already has a span. Nothing to do. @@ -187,29 +185,27 @@ - (void)urlSessionTaskResume:(NSURLSessionTask *)sessionTask return; } - [SentrySDK.currentHub.scope useSpan:^(id _Nullable innerSpan) { - if (innerSpan != nil) { - span = innerSpan; - netSpan = - [span startChildWithOperation:SENTRY_NETWORK_REQUEST_OPERATION - description:[NSString stringWithFormat:@"%@ %@", - sessionTask.currentRequest.HTTPMethod, - safeUrl.sanitizedUrl]]; - netSpan.origin = SentryTraceOriginAutoHttpNSURLSession; - - [netSpan setDataValue:sessionTask.currentRequest.HTTPMethod - forKey:@"http.request.method"]; - [netSpan setDataValue:safeUrl.sanitizedUrl forKey:@"url"]; - [netSpan setDataValue:@"fetch" forKey:@"type"]; - - if (safeUrl.queryItems && safeUrl.queryItems.count > 0) { - [netSpan setDataValue:safeUrl.query forKey:@"http.query"]; - } - if (safeUrl.fragment != nil) { - [netSpan setDataValue:safeUrl.fragment forKey:@"http.fragment"]; - } + id _Nullable currentSpan = [SentrySDK.currentHub.scope span]; + if (currentSpan != nil) { + span = currentSpan; + netSpan = [span startChildWithOperation:SentrySpanOperationNetworkRequestOperation + description:[NSString stringWithFormat:@"%@ %@", + sessionTask.currentRequest.HTTPMethod, + safeUrl.sanitizedUrl]]; + netSpan.origin = SentryTraceOriginAutoHttpNSURLSession; + + [netSpan setDataValue:sessionTask.currentRequest.HTTPMethod + forKey:@"http.request.method"]; + [netSpan setDataValue:safeUrl.sanitizedUrl forKey:@"url"]; + [netSpan setDataValue:@"fetch" forKey:@"type"]; + + if (safeUrl.queryItems && safeUrl.queryItems.count > 0) { + [netSpan setDataValue:safeUrl.query forKey:@"http.query"]; } - }]; + if (safeUrl.fragment != nil) { + [netSpan setDataValue:safeUrl.fragment forKey:@"http.fragment"]; + } + } // We only create a span if there is a transaction in the scope, // otherwise we have nothing else to do here. @@ -367,12 +363,10 @@ - (void)urlSessionTask:(NSURLSessionTask *)sessionTask setState:(NSURLSessionTas - (void)captureFailedRequests:(NSURLSessionTask *)sessionTask { - @synchronized(self) { - if (!self.isCaptureFailedRequestsEnabled) { - SENTRY_LOG_DEBUG( - @"captureFailedRequestsEnabled is disabled, not capturing HTTP Client errors."); - return; - } + if (!self.isCaptureFailedRequestsEnabled) { + SENTRY_LOG_DEBUG( + @"captureFailedRequestsEnabled is disabled, not capturing HTTP Client errors."); + return; } // if request or response are null, we can't raise the event @@ -462,8 +456,10 @@ - (void)captureFailedRequests:(NSURLSessionTask *)sessionTask context[@"response"] = response; if (self.isGraphQLOperationTrackingEnabled) { - context[@"graphql_operation_name"] = - [URLSessionTaskHelper getGraphQLOperationNameFrom:sessionTask]; + NSString *operationName = [URLSessionTaskHelper getGraphQLOperationNameFrom:sessionTask]; + if (operationName != nil) { + context[@"graphql"] = @{ @"operation_name" : operationName }; + } } event.context = context; @@ -497,7 +493,10 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask NSDate *requestStart = objc_getAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_START_DATE); - SentryLevel breadcrumbLevel = sessionTask.error != nil ? kSentryLevelError : kSentryLevelInfo; + NSInteger responseStatusCode = [self urlResponseStatusCode:sessionTask.response]; + SentryLevel breadcrumbLevel = [self getBreadcrumbLevel:sessionTask + responseStatusCode:responseStatusCode]; + SentryBreadcrumb *breadcrumb = [[SentryBreadcrumb alloc] initWithLevel:breadcrumbLevel category:@"http"]; @@ -512,7 +511,7 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask [NSNumber numberWithLongLong:sessionTask.countOfBytesSent]; breadcrumbData[@"response_body_size"] = [NSNumber numberWithLongLong:sessionTask.countOfBytesReceived]; - NSInteger responseStatusCode = [self urlResponseStatusCode:sessionTask.response]; + if (responseStatusCode != -1) { NSNumber *statusCode = [NSNumber numberWithInteger:responseStatusCode]; breadcrumbData[@"status_code"] = statusCode; @@ -606,4 +605,21 @@ - (SentrySpanStatus)spanStatusForHttpResponseStatusCode:(NSInteger)statusCode return kSentrySpanStatusUndefined; } +- (SentryLevel)getBreadcrumbLevel:(NSURLSessionTask *)sessionTask + responseStatusCode:(NSInteger)responseStatusCode +{ + SentryLevel breadcrumbLevel = kSentryLevelInfo; + if (responseStatusCode >= 400 && responseStatusCode < 500) { + breadcrumbLevel = kSentryLevelWarning; + } else if (responseStatusCode >= 500 && responseStatusCode < 600) { + breadcrumbLevel = kSentryLevelError; + } + + if (sessionTask.error != nil) { + breadcrumbLevel = kSentryLevelError; + } + + return breadcrumbLevel; +} + @end diff --git a/Pods/Sentry/Sources/Sentry/SentryOptions.m b/Pods/Sentry/Sources/Sentry/SentryOptions.m index 707094ccf..39509d2f6 100644 --- a/Pods/Sentry/Sources/Sentry/SentryOptions.m +++ b/Pods/Sentry/Sources/Sentry/SentryOptions.m @@ -1,4 +1,3 @@ -#import "SentryANRTracker.h" #import "SentryANRTrackingIntegration.h" #import "SentryAutoBreadcrumbTrackingIntegration.h" #import "SentryAutoSessionTrackingIntegration.h" @@ -27,6 +26,7 @@ # import "SentryPerformanceTrackingIntegration.h" # import "SentryScreenshotIntegration.h" # import "SentryUIEventTrackingIntegration.h" +# import "SentryUserFeedbackIntegration.h" # import "SentryViewHierarchyIntegration.h" # import "SentryWatchdogTerminationTrackingIntegration.h" #endif // SENTRY_HAS_UIKIT @@ -41,38 +41,51 @@ @implementation SentryOptions { } + (NSArray *)defaultIntegrations +{ + NSArray *defaultIntegrationClasses = [self defaultIntegrationClasses]; + NSMutableArray *defaultIntegrationNames = + [[NSMutableArray alloc] initWithCapacity:defaultIntegrationClasses.count]; + + for (Class class in defaultIntegrationClasses) { + [defaultIntegrationNames addObject:NSStringFromClass(class)]; + } + + return defaultIntegrationNames; +} + ++ (NSArray *)defaultIntegrationClasses { // The order of integrations here is important. // SentryCrashIntegration needs to be initialized before SentryAutoSessionTrackingIntegration. // And SentrySessionReplayIntegration before SentryCrashIntegration. - NSMutableArray *defaultIntegrations = - @[ -#if SENTRY_HAS_UIKIT && !TARGET_OS_VISION - NSStringFromClass([SentrySessionReplayIntegration class]), -#endif - NSStringFromClass([SentryCrashIntegration class]), + NSMutableArray *defaultIntegrations = [NSMutableArray arrayWithObjects: +#if SENTRY_TARGET_REPLAY_SUPPORTED + [SentrySessionReplayIntegration class], +#endif // SENTRY_TARGET_REPLAY_SUPPORTED + [SentryCrashIntegration class], #if SENTRY_HAS_UIKIT - NSStringFromClass([SentryAppStartTrackingIntegration class]), - NSStringFromClass([SentryFramesTrackingIntegration class]), - NSStringFromClass([SentryPerformanceTrackingIntegration class]), - NSStringFromClass([SentryScreenshotIntegration class]), - NSStringFromClass([SentryUIEventTrackingIntegration class]), - NSStringFromClass([SentryViewHierarchyIntegration class]), - NSStringFromClass([SentryWatchdogTerminationTrackingIntegration class]), + [SentryAppStartTrackingIntegration class], [SentryFramesTrackingIntegration class], + [SentryPerformanceTrackingIntegration class], [SentryUIEventTrackingIntegration class], + [SentryViewHierarchyIntegration class], + [SentryWatchdogTerminationTrackingIntegration class], #endif // SENTRY_HAS_UIKIT - NSStringFromClass([SentryANRTrackingIntegration class]), - NSStringFromClass([SentryAutoBreadcrumbTrackingIntegration class]), - NSStringFromClass([SentryAutoSessionTrackingIntegration class]), - NSStringFromClass([SentryCoreDataTrackingIntegration class]), - NSStringFromClass([SentryFileIOTrackingIntegration class]), - NSStringFromClass([SentryNetworkTrackingIntegration class]), - NSStringFromClass([SentrySwiftAsyncIntegration class]) - ] - .mutableCopy; +#if SENTRY_TARGET_REPLAY_SUPPORTED + [SentryScreenshotIntegration class], +#endif // SENTRY_TARGET_REPLAY_SUPPORTED + [SentryANRTrackingIntegration class], [SentryAutoBreadcrumbTrackingIntegration class], + [SentryAutoSessionTrackingIntegration class], [SentryCoreDataTrackingIntegration class], + [SentryFileIOTrackingIntegration class], [SentryNetworkTrackingIntegration class], + [SentrySwiftAsyncIntegration class], nil]; + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + if (@available(iOS 13.0, *)) { + [defaultIntegrations addObject:[SentryUserFeedbackIntegration class]]; + } +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT #if SENTRY_HAS_METRIC_KIT if (@available(iOS 15.0, macOS 12.0, macCatalyst 15.0, *)) { - [defaultIntegrations addObject:NSStringFromClass([SentryMetricKitIntegration class])]; + [defaultIntegrations addObject:[SentryMetricKitIntegration class]]; } #endif // SENTRY_HAS_METRIC_KIT @@ -85,6 +98,9 @@ - (instancetype)init self.enabled = YES; self.shutdownTimeInterval = 2.0; self.enableCrashHandler = YES; +#if TARGET_OS_OSX + self.enableUncaughtNSExceptionReporting = NO; +#endif // TARGET_OS_OSX #if !TARGET_OS_WATCH self.enableSigtermReporting = NO; #endif // !TARGET_OS_WATCH @@ -92,7 +108,7 @@ - (instancetype)init self.debug = NO; self.maxBreadcrumbs = defaultMaxBreadcrumbs; self.maxCacheItems = 30; - _integrations = SentryOptions.defaultIntegrations; + _integrations = [SentryOptions defaultIntegrations]; self.sampleRate = SENTRY_DEFAULT_SAMPLE_RATE; self.enableAutoSessionTracking = YES; self.enableGraphQLOperationTracking = NO; @@ -103,6 +119,7 @@ - (instancetype)init self.sendDefaultPii = NO; self.enableAutoPerformanceTracing = YES; self.enablePerformanceV2 = NO; + self.enablePersistingTracesWhenCrashing = NO; self.enableCaptureFailedRequests = YES; self.environment = kSentryDefaultEnvironment; self.enableTimeToFullDisplayTracing = NO; @@ -119,10 +136,16 @@ - (instancetype)init self.enableUserInteractionTracing = YES; self.idleTimeout = SentryTracerDefaultTimeout; self.enablePreWarmedAppStartTracing = NO; + self.enableAppHangTrackingV2 = NO; + self.enableReportNonFullyBlockingAppHangs = YES; #endif // SENTRY_HAS_UIKIT + +#if SENTRY_TARGET_REPLAY_SUPPORTED + self.sessionReplay = [[SentryReplayOptions alloc] init]; +#endif + self.enableAppHangTracking = YES; self.appHangTimeoutInterval = 2.0; - self.enableAppHangTrackingV2 = NO; self.enableAutoBreadcrumbTracking = YES; self.enableNetworkTracking = YES; self.enableFileIOTracing = YES; @@ -139,9 +162,6 @@ - (instancetype)init self.swiftAsyncStacktraces = NO; self.enableSpotlight = NO; self.spotlightUrl = @"http://localhost:8969/stream"; - self.enableMetrics = NO; - self.enableDefaultTagsForMetrics = YES; - self.enableSpanLocalMetricAggregation = YES; #if TARGET_OS_OSX NSString *dsn = [[[NSProcessInfo processInfo] environment] objectForKey:@"SENTRY_DSN"]; @@ -150,7 +170,7 @@ - (instancetype)init } #endif // TARGET_OS_OSX - // Use the name of the bundle’s executable file as inAppInclude, so SentryInAppLogic + // Use the name of the bundle's executable file as inAppInclude, so SentryInAppLogic // marks frames coming from there as inApp. With this approach, the SDK marks public // frameworks such as UIKitCore, CoreFoundation, GraphicsServices, and so forth, as not // inApp. For private frameworks, such as Sentry, dynamic and static frameworks differ. @@ -175,7 +195,7 @@ - (instancetype)init if (infoDict != nil) { self.releaseName = [NSString stringWithFormat:@"%@@%@+%@", infoDict[@"CFBundleIdentifier"], - infoDict[@"CFBundleShortVersionString"], infoDict[@"CFBundleVersion"]]; + infoDict[@"CFBundleShortVersionString"], infoDict[@"CFBundleVersion"]]; } NSRegularExpression *everythingAllowedRegex = @@ -251,7 +271,7 @@ - (void)setIntegrations:(NSArray *)integrations SENTRY_LOG_WARN( @"Setting `SentryOptions.integrations` is deprecated. Integrations should be enabled or " @"disabled using their respective `SentryOptions.enable*` property."); - _integrations = integrations; + _integrations = integrations.mutableCopy; } - (void)setDsn:(NSString *)dsn @@ -319,6 +339,11 @@ - (BOOL)validateOptions:(NSDictionary *)options [self setBool:options[@"enableCrashHandler"] block:^(BOOL value) { self->_enableCrashHandler = value; }]; +#if TARGET_OS_OSX + [self setBool:options[@"enableUncaughtNSExceptionReporting"] + block:^(BOOL value) { self->_enableUncaughtNSExceptionReporting = value; }]; +#endif // TARGET_OS_OSX + #if !TARGET_OS_WATCH [self setBool:options[@"enableSigtermReporting"] block:^(BOOL value) { self->_enableSigtermReporting = value; }]; @@ -364,7 +389,8 @@ - (BOOL)validateOptions:(NSDictionary *)options } if ([options[@"integrations"] isKindOfClass:[NSArray class]]) { - self.integrations = [options[@"integrations"] filteredArrayUsingPredicate:isNSString]; + self.integrations = + [[options[@"integrations"] filteredArrayUsingPredicate:isNSString] mutableCopy]; } if ([options[@"sampleRate"] isKindOfClass:[NSNumber class]]) { @@ -404,6 +430,9 @@ - (BOOL)validateOptions:(NSDictionary *)options [self setBool:options[@"enablePerformanceV2"] block:^(BOOL value) { self->_enablePerformanceV2 = value; }]; + [self setBool:options[@"enablePersistingTracesWhenCrashing"] + block:^(BOOL value) { self->_enablePersistingTracesWhenCrashing = value; }]; + [self setBool:options[@"enableCaptureFailedRequests"] block:^(BOOL value) { self->_enableCaptureFailedRequests = value; }]; @@ -436,8 +465,21 @@ - (BOOL)validateOptions:(NSDictionary *)options [self setBool:options[@"enablePreWarmedAppStartTracing"] block:^(BOOL value) { self->_enablePreWarmedAppStartTracing = value; }]; + [self setBool:options[@"enableAppHangTrackingV2"] + block:^(BOOL value) { self->_enableAppHangTrackingV2 = value; }]; + + [self setBool:options[@"enableReportNonFullyBlockingAppHangs"] + block:^(BOOL value) { self->_enableReportNonFullyBlockingAppHangs = value; }]; + #endif // SENTRY_HAS_UIKIT +#if SENTRY_TARGET_REPLAY_SUPPORTED + if ([options[@"sessionReplay"] isKindOfClass:NSDictionary.class]) { + self.sessionReplay = + [[SentryReplayOptions alloc] initWithDictionary:options[@"sessionReplay"]]; + } +#endif // SENTRY_TARGET_REPLAY_SUPPORTED + [self setBool:options[@"enableAppHangTracking"] block:^(BOOL value) { self->_enableAppHangTracking = value; }]; @@ -445,9 +487,6 @@ - (BOOL)validateOptions:(NSDictionary *)options self.appHangTimeoutInterval = [options[@"appHangTimeoutInterval"] doubleValue]; } - [self setBool:options[@"enableAppHangTrackingV2"] - block:^(BOOL value) { self->_enableAppHangTrackingV2 = value; }]; - [self setBool:options[@"enableNetworkTracking"] block:^(BOOL value) { self->_enableNetworkTracking = value; }]; @@ -547,18 +586,6 @@ - (BOOL)validateOptions:(NSDictionary *)options self.spotlightUrl = options[@"spotlightUrl"]; } - [self setBool:options[@"enableMetrics"] block:^(BOOL value) { self->_enableMetrics = value; }]; - - [self setBool:options[@"enableDefaultTagsForMetrics"] - block:^(BOOL value) { self->_enableDefaultTagsForMetrics = value; }]; - - [self setBool:options[@"enableSpanLocalMetricAggregation"] - block:^(BOOL value) { self->_enableSpanLocalMetricAggregation = value; }]; - - if ([self isBlock:options[@"beforeEmitMetric"]]) { - self.beforeEmitMetric = options[@"beforeEmitMetric"]; - } - if ([options[@"experimental"] isKindOfClass:NSDictionary.class]) { [self.experimental validateOptions:options[@"experimental"]]; } @@ -673,6 +700,17 @@ - (BOOL)isContinuousProfilingEnabled # pragma clang diagnostic pop } +- (BOOL)isContinuousProfilingV2Enabled +{ + return [self isContinuousProfilingEnabled] && _profiling != nil; +} + +- (BOOL)isProfilingCorrelatedToTraces +{ + return ![self isContinuousProfilingEnabled] + || (_profiling != nil && _profiling.lifecycle == SentryProfileLifecycleTrace); +} + - (void)setEnableProfiling_DEPRECATED_TEST_ONLY:(BOOL)enableProfiling_DEPRECATED_TEST_ONLY { # pragma clang diagnostic push @@ -703,7 +741,7 @@ - (BOOL)isBlock:(nullable id)block static Class blockClass; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - blockClass = [^{} class]; + blockClass = [^{ } class]; while ([blockClass superclass] != NSObject.class) { blockClass = [blockClass superclass]; } @@ -793,7 +831,22 @@ - (void)setEnableSpotlight:(BOOL)value #endif // defined(RELEASE) } -#if defined(DEBUG) || defined(TEST) || defined(TESTCI) +#if SENTRY_HAS_UIKIT +- (BOOL)isAppHangTrackingV2Disabled +{ + return !self.enableAppHangTrackingV2 || self.appHangTimeoutInterval <= 0; +} +#endif // SENTRY_HAS_UIKIT + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT +- (void)setConfigureUserFeedback:(SentryUserFeedbackConfigurationBlock)configureUserFeedback +{ + self.userFeedbackConfiguration = [[SentryUserFeedbackConfiguration alloc] init]; + configureUserFeedback(self.userFeedbackConfiguration); +} +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT + +#if defined(DEBUG) || defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) - (NSString *)debugDescription { NSMutableString *propertiesDescription = [NSMutableString string]; @@ -815,6 +868,6 @@ - (NSString *)debugDescription } return [NSString stringWithFormat:@"<%@: {\n%@\n}>", self, propertiesDescription]; } -#endif // defined(DEBUG) || defined(TEST) || defined(TESTCI) +#endif // defined(DEBUG) || defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) @end diff --git a/Pods/Sentry/Sources/Sentry/SentryPerformanceTracker.m b/Pods/Sentry/Sources/Sentry/SentryPerformanceTracker.m index 6dc1572a0..349c1f37f 100644 --- a/Pods/Sentry/Sources/Sentry/SentryPerformanceTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryPerformanceTracker.m @@ -15,8 +15,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryPerformanceTracker () +@interface SentryPerformanceTracker () @property (nonatomic, strong) NSMutableDictionary> *spans; @property (nonatomic, strong) NSMutableArray> *activeSpanStack; @@ -52,7 +51,7 @@ - (SentrySpanId *)startSpanWithName:(NSString *)name activeSpan = [self.activeSpanStack lastObject]; } - __block id newSpan; + id newSpan; if (activeSpan != nil) { newSpan = [activeSpan startChildWithOperation:operation description:name]; newSpan.origin = origin; @@ -62,35 +61,37 @@ - (SentrySpanId *)startSpanWithName:(NSString *)name operation:operation origin:origin]; - [SentrySDK.currentHub.scope useSpan:^(id span) { - BOOL bindToScope = NO; - if (span == nil) { - bindToScope = YES; - } + id span = SentrySDK.currentHub.scope.span; + + BOOL bindToScope = NO; + if (span == nil) { + bindToScope = YES; + } #if SENTRY_HAS_UIKIT - else { - if ([SentryUIEventTracker isUIEventOperation:span.operation]) { - SENTRY_LOG_DEBUG( - @"Cancelling previous UI event span %@", span.spanId.sentrySpanIdString); - [span finishWithStatus:kSentrySpanStatusCancelled]; - bindToScope = YES; - } + else { + if ([SentryUIEventTracker isUIEventOperation:span.operation]) { + SENTRY_LOG_DEBUG( + @"Cancelling previous UI event span %@", span.spanId.sentrySpanIdString); + [span finishWithStatus:kSentrySpanStatusCancelled]; + bindToScope = YES; } + } #endif // SENTRY_HAS_UIKIT - SENTRY_LOG_DEBUG(@"Creating new transaction bound to scope: %d", bindToScope); + SENTRY_LOG_DEBUG( + @"Starting new transaction for %@ with bindToScope: %d", name, bindToScope); - newSpan = [SentrySDK.currentHub - startTransactionWithContext:context - bindToScope:bindToScope - customSamplingContext:@{} - configuration:[SentryTracerConfiguration configurationWithBlock:^( - SentryTracerConfiguration *configuration) { - configuration.waitForChildren = YES; - }]]; + newSpan = [SentrySDK.currentHub + startTransactionWithContext:context + bindToScope:bindToScope + customSamplingContext:@{} + configuration:[SentryTracerConfiguration configurationWithBlock:^( + SentryTracerConfiguration *configuration) { + configuration.waitForChildren = YES; + configuration.finishMustBeCalled = YES; + }]]; - [(SentryTracer *)newSpan setDelegate:self]; - }]; + [(SentryTracer *)newSpan setDelegate:self]; } SentrySpanId *spanId = newSpan.spanId; @@ -222,7 +223,7 @@ - (BOOL)isSpanAlive:(SentrySpanId *)spanId } } -- (nullable id)activeSpanForTracer:(SentryTracer *)tracer +- (nullable id)getActiveSpan { @synchronized(self.activeSpanStack) { return [self.activeSpanStack lastObject]; diff --git a/Pods/Sentry/Sources/Sentry/SentryPerformanceTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryPerformanceTrackingIntegration.m index c3bfc6517..92b523897 100644 --- a/Pods/Sentry/Sources/Sentry/SentryPerformanceTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryPerformanceTrackingIntegration.m @@ -12,8 +12,7 @@ # import "SentryUIViewControllerPerformanceTracker.h" # import "SentryUIViewControllerSwizzling.h" -@interface -SentryPerformanceTrackingIntegration () +@interface SentryPerformanceTrackingIntegration () @property (nonatomic, strong) SentryUIViewControllerSwizzling *swizzling; @@ -30,7 +29,7 @@ - (BOOL)installWithOptions:(SentryOptions *)options dispatch_queue_attr_t attributes = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, DISPATCH_QUEUE_PRIORITY_HIGH, 0); SentryDispatchQueueWrapper *dispatchQueue = - [[SentryDispatchQueueWrapper alloc] initWithName:"sentry-ui-view-controller-swizzling" + [[SentryDispatchQueueWrapper alloc] initWithName:"io.sentry.ui-view-controller-swizzling" attributes:attributes]; SentrySubClassFinder *subClassFinder = [[SentrySubClassFinder alloc] @@ -47,8 +46,9 @@ - (BOOL)installWithOptions:(SentryOptions *)options binaryImageCache:[SentryDependencyContainer.sharedInstance binaryImageCache]]; [self.swizzling start]; - SentryUIViewControllerPerformanceTracker.shared.enableWaitForFullDisplay - = options.enableTimeToFullDisplayTracing; + SentryUIViewControllerPerformanceTracker *performanceTracker = + [SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker]; + performanceTracker.alwaysWaitForFullDisplay = options.enableTimeToFullDisplayTracing; return YES; } diff --git a/Pods/Sentry/Sources/Sentry/SentryPredicateDescriptor.m b/Pods/Sentry/Sources/Sentry/SentryPredicateDescriptor.m index 229aeddd5..8dad25e35 100644 --- a/Pods/Sentry/Sources/Sentry/SentryPredicateDescriptor.m +++ b/Pods/Sentry/Sources/Sentry/SentryPredicateDescriptor.m @@ -32,8 +32,8 @@ - (NSString *)compoundPredicateDescription:(NSCompoundPredicate *)predicate if (expressions.count == 1) { return [NSString stringWithFormat:@"%@ %@", - [self compoundPredicateTypeDescription:predicate.compoundPredicateType], - expressions.firstObject]; + [self compoundPredicateTypeDescription:predicate.compoundPredicateType], + expressions.firstObject]; } return [expressions @@ -76,9 +76,9 @@ - (NSString *)expressionDescription:(NSExpression *)predicate case NSConditionalExpressionType: if (@available(macOS 10.11, *)) { return [NSString stringWithFormat:@"TERNARY(%@,%@,%@)", - [self predicateDescription:predicate.predicate], - [self expressionDescription:predicate.trueExpression], - [self expressionDescription:predicate.falseExpression]]; + [self predicateDescription:predicate.predicate], + [self expressionDescription:predicate.trueExpression], + [self expressionDescription:predicate.falseExpression]]; } else { // this is not supposed to happen, NSConditionalExpressionType was introduced in // macOS 10.11 but we need this version check because cocoapod lint check is failing diff --git a/Pods/Sentry/Sources/Sentry/SentryProfileTimeseries.mm b/Pods/Sentry/Sources/Sentry/SentryProfileTimeseries.mm index 25d3098fb..213c35aad 100644 --- a/Pods/Sentry/Sources/Sentry/SentryProfileTimeseries.mm +++ b/Pods/Sentry/Sources/Sentry/SentryProfileTimeseries.mm @@ -11,6 +11,7 @@ # import "SentryFormatter.h" # import "SentryTime.h" # endif // SENTRY_HAS_UIKIT +# import "SentrySwift.h" namespace { /** diff --git a/Pods/Sentry/Sources/Sentry/SentryProfiler.mm b/Pods/Sentry/Sources/Sentry/SentryProfiler.mm index a46f1a733..33a91bf97 100644 --- a/Pods/Sentry/Sources/Sentry/SentryProfiler.mm +++ b/Pods/Sentry/Sources/Sentry/SentryProfiler.mm @@ -5,8 +5,10 @@ # import "SentryContinuousProfiler.h" # import "SentryDependencyContainer.h" # import "SentryDispatchQueueWrapper.h" +# import "SentryFileManager.h" # import "SentryFramesTracker.h" # import "SentryHub+Private.h" +# import "SentryInternalDefines.h" # import "SentryLaunchProfiling.h" # import "SentryLog.h" # import "SentryMetricProfiler.h" @@ -14,6 +16,7 @@ # import "SentryProfilerState+ObjCpp.h" # import "SentryProfilerTestHelpers.h" # import "SentrySDK+Private.h" +# import "SentrySampling.h" # import "SentrySamplingProfiler.hpp" # import "SentryScreenFrames.h" # import "SentrySwift.h" @@ -28,6 +31,8 @@ using namespace sentry::profiling; +SentrySamplerDecision *_Nullable sentry_profilerSessionSampleDecision; + namespace { static const int kSentryProfilerFrequencyHz = 101; @@ -37,36 +42,119 @@ # pragma mark - Public void -sentry_manageTraceProfilerOnStartSDK(SentryOptions *options, SentryHub *hub) +sentry_reevaluateSessionSampleRate(float sessionSampleRate) +{ + sentry_profilerSessionSampleDecision = sentry_sampleProfileSession(sessionSampleRate); +} + +void +sentry_configureContinuousProfiling(SentryOptions *options) { + if (![options isContinuousProfilingEnabled]) { + if (options.configureProfiling != nil) { + SENTRY_LOG_WARN(@"In order to configure SentryProfileOptions you must remove " + @"configuration of the older SentryOptions.profilesSampleRate, " + @"SentryOptions.profilesSampler and/or SentryOptions.enableProfiling"); + } + return; + } + + if (options.configureProfiling == nil) { + SENTRY_LOG_DEBUG(@"Continuous profiling V2 configuration not set by SDK consumer, nothing " + @"to do here."); + return; + } + + options.profiling = [[SentryProfileOptions alloc] init]; + options.configureProfiling(options.profiling); + + if (options.profiling.lifecycle == SentryProfileLifecycleTrace && !options.isTracingEnabled) { + SENTRY_LOG_WARN( + @"Tracing must be enabled in order to configure profiling with trace lifecycle."); + return; + } + + sentry_reevaluateSessionSampleRate(options.profiling.sessionSampleRate); + + SENTRY_LOG_DEBUG(@"Configured profiling options: <%@: {\n lifecycle: %@\n sessionSampleRate: " + @"%.2f\n profileAppStarts: %@\n}", + options.profiling, + options.profiling.lifecycle == SentryProfileLifecycleTrace ? @"trace" : @"manual", + options.profiling.sessionSampleRate, options.profiling.profileAppStarts ? @"YES" : @"NO"); +} + +void +sentry_sdkInitProfilerTasks(SentryOptions *options, SentryHub *hub) +{ + sentry_configureContinuousProfiling(options); + [SentryDependencyContainer.sharedInstance.dispatchQueueWrapper dispatchAsyncWithBlock:^{ - BOOL shouldStopAndTransmitLaunchProfile = options.profilesSampleRate != nil; + // get the configuration options from the last time the launch config was written; it may be + // different than the new options the SDK was just started with + const auto configDict = sentry_appLaunchProfileConfiguration(); + const auto profileIsContinuousV1 = + [configDict[kSentryLaunchProfileConfigKeyContinuousProfiling] boolValue]; + const auto profileIsContinuousV2 = + [configDict[kSentryLaunchProfileConfigKeyContinuousProfilingV2] boolValue]; + const auto v2LifecycleValue + = configDict[kSentryLaunchProfileConfigKeyContinuousProfilingV2Lifecycle]; + const auto v2Lifecycle = (SentryProfileLifecycle) + [configDict[kSentryLaunchProfileConfigKeyContinuousProfilingV2Lifecycle] intValue]; + const auto v2LifecycleIsManual = profileIsContinuousV2 && v2LifecycleValue != nil + && v2Lifecycle == SentryProfileLifecycleManual; + + BOOL shouldStopAndTransmitLaunchProfile = YES; + # if SENTRY_HAS_UIKIT - if (SentryUIViewControllerPerformanceTracker.shared.enableWaitForFullDisplay) { + const auto v2LifecycleIsTrace = profileIsContinuousV2 && v2LifecycleValue != nil + && v2Lifecycle == SentryProfileLifecycleTrace; + const auto profileIsCorrelatedToTrace = !profileIsContinuousV2 || v2LifecycleIsTrace; + SentryUIViewControllerPerformanceTracker *performanceTracker = + [SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker]; + if (profileIsCorrelatedToTrace && performanceTracker.alwaysWaitForFullDisplay) { + SENTRY_LOG_DEBUG(@"Will wait to stop launch profile correlated to a trace until full " + @"display reported."); shouldStopAndTransmitLaunchProfile = NO; } # endif // SENTRY_HAS_UIKIT + + if (profileIsContinuousV1 || v2LifecycleIsManual) { + SENTRY_LOG_DEBUG( + @"Continuous manual launch profiles aren't stopped on calls to SentrySDK.start, " + @"not stopping profile."); + shouldStopAndTransmitLaunchProfile = NO; + } + if (shouldStopAndTransmitLaunchProfile) { SENTRY_LOG_DEBUG(@"Stopping launch profile in SentrySDK.start because there will " @"be no automatic trace to attach it to."); sentry_stopAndTransmitLaunchProfile(hub); } + sentry_configureLaunchProfiling(options); }]; } @implementation SentryProfiler { - std::shared_ptr _samplingProfiler; + std::unique_ptr _samplingProfiler; } + (void)load { -# if defined(TEST) || defined(TESTCI) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) // we want to allow starting a launch profile from here for UI tests, but not unit tests if (NSProcessInfo.processInfo.environment[@"--io.sentry.ui-test.test-name"] == nil) { return; } -# endif // defined(TEST) || defined(TESTCI) + + // the ui tests want to wipe the data before each test case runs, to remove any launch config + // files that might be present before launching the app initially, however we need to make sure + // to remove stale versions of the file before it gets used to potentially start a launch + // profile that shouldn't have started, so we check here for this + if ([NSProcessInfo.processInfo.arguments containsObject:@"--io.sentry.wipe-data"]) { + removeSentryStaticBasePath(); + } +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) sentry_startLaunchProfile(); } @@ -125,9 +213,16 @@ - (void)stopForReason:(SentryProfilerTruncationReason)reason } # if SENTRY_HAS_UIKIT - // if SentryOptions.enableAutoPerformanceTracing is NO, then we need to stop the frames tracker - // from running outside of profiles because it isn't needed for anything else - if (![[[[SentrySDK currentHub] getClient] options] enableAutoPerformanceTracing]) { + // if SentryOptions.enableAutoPerformanceTracing is NO and appHangsV2Disabled, which uses the + // frames tracker, is YES, then we need to stop the frames tracker from running outside of + // profiles because it isn't needed for anything else + + BOOL autoPerformanceTracingDisabled + = ![[[[SentrySDK currentHub] getClient] options] enableAutoPerformanceTracing]; + BOOL appHangsV2Disabled = + [[[[SentrySDK currentHub] getClient] options] isAppHangTrackingV2Disabled]; + + if (autoPerformanceTracingDisabled && appHangsV2Disabled) { [SentryDependencyContainer.sharedInstance.framesTracker stop]; } # endif // SENTRY_HAS_UIKIT @@ -165,12 +260,14 @@ - (void)start SentryProfilerState *const state = [[SentryProfilerState alloc] init]; self.state = state; - _samplingProfiler = std::make_shared( + _samplingProfiler = std::make_unique( [state](auto &backtrace) { Backtrace backtraceCopy = backtrace; backtraceCopy.absoluteTimestamp = SentryDependencyContainer.sharedInstance.dateProvider.systemTime; - [state appendBacktrace:backtraceCopy]; + @autoreleasepool { + [state appendBacktrace:backtraceCopy]; + } }, kSentryProfilerFrequencyHz); _samplingProfiler->startSampling(); diff --git a/Pods/Sentry/Sources/Sentry/SentryPropagationContext.h b/Pods/Sentry/Sources/Sentry/SentryPropagationContext.h index 553dffb44..420e331dc 100644 --- a/Pods/Sentry/Sources/Sentry/SentryPropagationContext.h +++ b/Pods/Sentry/Sources/Sentry/SentryPropagationContext.h @@ -8,10 +8,12 @@ NS_ASSUME_NONNULL_BEGIN @interface SentryPropagationContext : NSObject -@property (nonatomic, strong) SentryId *traceId; -@property (nonatomic, strong) SentrySpanId *spanId; +@property (nonatomic, strong, readonly) SentryId *traceId; +@property (nonatomic, strong, readonly) SentrySpanId *spanId; @property (nonatomic, readonly) SentryTraceHeader *traceHeader; +- (instancetype)initWithTraceId:(SentryId *)traceId spanId:(SentrySpanId *)spanId; + - (NSDictionary *)traceContextForEvent; @end diff --git a/Pods/Sentry/Sources/Sentry/SentryPropagationContext.m b/Pods/Sentry/Sources/Sentry/SentryPropagationContext.m index 965f3ab19..83d9c32a3 100644 --- a/Pods/Sentry/Sources/Sentry/SentryPropagationContext.m +++ b/Pods/Sentry/Sources/Sentry/SentryPropagationContext.m @@ -8,8 +8,17 @@ @implementation SentryPropagationContext - (instancetype)init { if (self = [super init]) { - self.traceId = [[SentryId alloc] init]; - self.spanId = [[SentrySpanId alloc] init]; + _traceId = [[SentryId alloc] init]; + _spanId = [[SentrySpanId alloc] init]; + } + return self; +} + +- (instancetype)initWithTraceId:(SentryId *)traceId spanId:(SentrySpanId *)spanId +{ + if (self = [super init]) { + _traceId = traceId; + _spanId = spanId; } return self; } diff --git a/Pods/Sentry/Sources/Sentry/SentryQueueableRequestManager.m b/Pods/Sentry/Sources/Sentry/SentryQueueableRequestManager.m index fada462bc..660c1bb86 100644 --- a/Pods/Sentry/Sources/Sentry/SentryQueueableRequestManager.m +++ b/Pods/Sentry/Sources/Sentry/SentryQueueableRequestManager.m @@ -4,8 +4,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryQueueableRequestManager () +@interface SentryQueueableRequestManager () @property (nonatomic, strong) NSOperationQueue *queue; @property (nonatomic, strong) NSURLSession *session; @@ -28,6 +27,20 @@ - (instancetype)initWithSession:(NSURLSession *)session - (BOOL)isReady { +#if SENTRY_TEST || SENTRY_TEST_CI + // force every envelope to be cached in UI tests so we can inspect what the SDK would've sent + // for a given operation + if ([NSProcessInfo.processInfo.environment[@"--io.sentry.sdk-environment"] + isEqualToString:@"ui-tests"]) { + return NO; + } +#elif DEBUG + if ([NSProcessInfo.processInfo.arguments + containsObject:@"--io.sentry.disable-http-transport"]) { + return NO; + } +#endif // SENTRY_TEST || SENTRY_TEST_CI + // We always have at least one operation in the queue when calling this return self.queue.operationCount <= 1; } diff --git a/Pods/Sentry/Sources/Sentry/SentryRateLimitParser.m b/Pods/Sentry/Sources/Sentry/SentryRateLimitParser.m index df2931e66..6386228c5 100644 --- a/Pods/Sentry/Sources/Sentry/SentryRateLimitParser.m +++ b/Pods/Sentry/Sources/Sentry/SentryRateLimitParser.m @@ -2,20 +2,18 @@ #import "SentryDataCategoryMapper.h" #import "SentryDateUtil.h" #import "SentrySwift.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryRateLimitParser () +@interface SentryRateLimitParser () -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @end @implementation SentryRateLimitParser -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.currentDateProvider = currentDateProvider; diff --git a/Pods/Sentry/Sources/Sentry/SentryReachability.m b/Pods/Sentry/Sources/Sentry/SentryReachability.m index 3d5aca8f1..f9de602b6 100644 --- a/Pods/Sentry/Sources/Sentry/SentryReachability.m +++ b/Pods/Sentry/Sources/Sentry/SentryReachability.m @@ -39,7 +39,7 @@ NSString *const SentryConnectivityWiFi = @"wifi"; NSString *const SentryConnectivityNone = @"none"; -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) static BOOL sentry_reachability_ignore_actual_callback = NO; void @@ -48,7 +48,7 @@ SENTRY_LOG_DEBUG(@"Setting ignore actual callback to %@", value ? @"YES" : @"NO"); sentry_reachability_ignore_actual_callback = value; } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) /** * Check whether the connectivity change should be noted or ignored. @@ -135,18 +135,17 @@ { SENTRY_LOG_DEBUG( @"SentryConnectivityCallback called with target: %@; flags: %u", target, flags); -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) if (sentry_reachability_ignore_actual_callback) { SENTRY_LOG_DEBUG(@"Ignoring actual callback."); return; } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) SentryConnectivityCallback(flags); } -@interface -SentryReachability () +@interface SentryReachability () @property SCNetworkReachabilityRef sentry_reachability_ref; @@ -161,7 +160,7 @@ + (void)initialize } } -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) - (instancetype)init { @@ -172,7 +171,7 @@ - (instancetype)init return self; } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) - (void)addObserver:(id)observer; { @@ -190,12 +189,12 @@ - (void)addObserver:(id)observer; return; } -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) if (self.skipRegisteringActualCallbacks) { SENTRY_LOG_DEBUG(@"Skip registering actual callbacks"); return; } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) sentry_reachability_queue = dispatch_queue_create("io.sentry.cocoa.connectivity", DISPATCH_QUEUE_SERIAL); @@ -240,11 +239,11 @@ - (void)removeAllObservers - (void)unsetReachabilityCallback { -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) if (self.skipRegisteringActualCallbacks) { SENTRY_LOG_DEBUG(@"Skip unsetting actual callbacks"); } -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) sentry_current_reachability_state = kSCNetworkReachabilityFlagsUninitialized; diff --git a/Pods/Sentry/Sources/Sentry/SentryReplayApi.m b/Pods/Sentry/Sources/Sentry/SentryReplayApi.m new file mode 100644 index 000000000..f05f805b2 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryReplayApi.m @@ -0,0 +1,110 @@ +#import "SentryReplayApi.h" + +#if SENTRY_TARGET_REPLAY_SUPPORTED + +# import "SentryHub+Private.h" +# import "SentryInternalCDefines.h" +# import "SentryLog.h" +# import "SentryOptions+Private.h" +# import "SentrySDK+Private.h" +# import "SentrySessionReplayIntegration+Private.h" +# import "SentrySwift.h" +# import + +@implementation SentryReplayApi + +- (void)maskView:(UIView *)view +{ + [SentryRedactViewHelper maskView:view]; +} + +- (void)unmaskView:(UIView *)view +{ + [SentryRedactViewHelper unmaskView:view]; +} + +- (void)pause +{ + SENTRY_LOG_INFO(@"[Session Replay] Pausing session"); + SentrySessionReplayIntegration *replayIntegration + = (SentrySessionReplayIntegration *)[SentrySDK.currentHub + getInstalledIntegration:SentrySessionReplayIntegration.class]; + [replayIntegration pause]; +} + +- (void)resume +{ + SENTRY_LOG_INFO(@"[Session Replay] Resuming session"); + SentrySessionReplayIntegration *replayIntegration + = (SentrySessionReplayIntegration *)[SentrySDK.currentHub + getInstalledIntegration:SentrySessionReplayIntegration.class]; + [replayIntegration resume]; +} + +- (void)start SENTRY_DISABLE_THREAD_SANITIZER("double-checked lock produce false alarms") +{ + SENTRY_LOG_INFO(@"[Session Replay] Starting session"); + SentrySessionReplayIntegration *replayIntegration + = (SentrySessionReplayIntegration *)[SentrySDK.currentHub + getInstalledIntegration:SentrySessionReplayIntegration.class]; + + // Start could be misused and called multiple times, causing it to + // be initialized more than once before being installed. + // Synchronizing it will prevent this problem. + if (replayIntegration == nil) { + @synchronized(self) { + replayIntegration = (SentrySessionReplayIntegration *)[SentrySDK.currentHub + getInstalledIntegration:SentrySessionReplayIntegration.class]; + if (replayIntegration == nil) { + SENTRY_LOG_DEBUG(@"[Session Replay] Initializing replay integration"); + SentryOptions *currentOptions = SentrySDK.currentHub.client.options; + replayIntegration = + [[SentrySessionReplayIntegration alloc] initForManualUse:currentOptions]; + + [SentrySDK.currentHub + addInstalledIntegration:replayIntegration + name:NSStringFromClass(SentrySessionReplay.class)]; + } + } + } + [replayIntegration start]; +} + +- (void)stop +{ + SENTRY_LOG_INFO(@"[Session Replay] Stopping session"); + SentrySessionReplayIntegration *replayIntegration + = (SentrySessionReplayIntegration *)[SentrySDK.currentHub + getInstalledIntegration:SentrySessionReplayIntegration.class]; + [replayIntegration stop]; +} + +- (void)showMaskPreview +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Showing mask preview"); + [self showMaskPreview:1]; +} + +- (void)showMaskPreview:(CGFloat)opacity +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Showing mask preview with opacity: %f", opacity); + SentrySessionReplayIntegration *replayIntegration + = (SentrySessionReplayIntegration *)[SentrySDK.currentHub + getInstalledIntegration:SentrySessionReplayIntegration.class]; + + [replayIntegration showMaskPreview:opacity]; +} + +- (void)hideMaskPreview +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Hiding mask preview"); + SentrySessionReplayIntegration *replayIntegration + = (SentrySessionReplayIntegration *)[SentrySDK.currentHub + getInstalledIntegration:SentrySessionReplayIntegration.class]; + + [replayIntegration hideMaskPreview]; +} + +@end + +#endif diff --git a/Pods/Sentry/Sources/Sentry/SentryRequestOperation.m b/Pods/Sentry/Sources/Sentry/SentryRequestOperation.m index 4745e6151..fc4efab26 100644 --- a/Pods/Sentry/Sources/Sentry/SentryRequestOperation.m +++ b/Pods/Sentry/Sources/Sentry/SentryRequestOperation.m @@ -9,8 +9,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryRequestOperation () +@interface SentryRequestOperation () @property (nonatomic, strong) NSURLSessionTask *task; @property (nonatomic, strong) NSURLRequest *request; diff --git a/Pods/Sentry/Sources/Sentry/SentryRetryAfterHeaderParser.m b/Pods/Sentry/Sources/Sentry/SentryRetryAfterHeaderParser.m index 2a1121a41..5186207ab 100644 --- a/Pods/Sentry/Sources/Sentry/SentryRetryAfterHeaderParser.m +++ b/Pods/Sentry/Sources/Sentry/SentryRetryAfterHeaderParser.m @@ -1,22 +1,20 @@ #import "SentryRetryAfterHeaderParser.h" #import "SentryHttpDateParser.h" #import "SentrySwift.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryRetryAfterHeaderParser () +@interface SentryRetryAfterHeaderParser () @property (nonatomic, strong) SentryHttpDateParser *httpDateParser; -@property (nonatomic, strong) SentryCurrentDateProvider *currentDateProvider; +@property (nonatomic, strong) id currentDateProvider; @end @implementation SentryRetryAfterHeaderParser - (instancetype)initWithHttpDateParser:(SentryHttpDateParser *)httpDateParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider + currentDateProvider:(id)currentDateProvider { if (self = [super init]) { self.httpDateParser = httpDateParser; diff --git a/Pods/Sentry/Sources/Sentry/SentrySDK.m b/Pods/Sentry/Sources/Sentry/SentrySDK.m index a8257d8df..2165de978 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySDK.m +++ b/Pods/Sentry/Sources/Sentry/SentrySDK.m @@ -14,14 +14,19 @@ #import "SentryHub+Private.h" #import "SentryInternalDefines.h" #import "SentryLog.h" +#import "SentryLogC.h" #import "SentryMeta.h" +#import "SentryNSProcessInfoWrapper.h" #import "SentryOptions+Private.h" #import "SentryProfilingConditionals.h" +#import "SentryReplayApi.h" +#import "SentrySamplerDecision.h" #import "SentrySamplingContext.h" #import "SentryScope.h" #import "SentrySerialization.h" #import "SentrySwift.h" #import "SentryTransactionContext.h" +#import "SentryUserFeedbackIntegration.h" #if TARGET_OS_OSX # import "SentryCrashExceptionApplication.h" @@ -30,6 +35,9 @@ #if SENTRY_HAS_UIKIT # import "SentryUIDeviceWrapper.h" # import "SentryUIViewControllerPerformanceTracker.h" +# if TARGET_OS_IOS +# import "SentryFeedbackAPI.h" +# endif // TARGET_OS_IOS #endif // SENTRY_HAS_UIKIT #if SENTRY_TARGET_PROFILING_SUPPORTED @@ -37,8 +45,9 @@ # import "SentryProfiler+Private.h" #endif // SENTRY_TARGET_PROFILING_SUPPORTED -@interface -SentrySDK () +NSString *const SENTRY_XCODE_PREVIEW_ENVIRONMENT_KEY = @"XCODE_RUNNING_FOR_PREVIEWS"; + +@interface SentrySDK () @property (class) SentryHub *currentHub; @@ -46,7 +55,6 @@ NS_ASSUME_NONNULL_BEGIN @implementation SentrySDK - static SentryHub *_Nullable currentHub; static NSObject *currentHubLock; static BOOL crashedLastRunCalled; @@ -57,8 +65,8 @@ @implementation SentrySDK static NSObject *startOptionsLock; /** - * @brief We need to keep track of the number of times @c +[startWith...] is called, because our OOM - * reporting breaks if it's called more than once. + * @brief We need to keep track of the number of times @c +[startWith...] is called, because our + * watchdog termination reporting breaks if it's called more than once. * @discussion This doesn't just protect from multiple sequential calls to start the SDK, so we * can't simply @c dispatch_once the logic inside the start method; there is also a valid workflow * where a consumer could start the SDK, then call @c +[close] and then start again, and we want to @@ -94,7 +102,15 @@ + (nullable SentryOptions *)options return startOption; } } - +#if SENTRY_TARGET_REPLAY_SUPPORTED ++ (SentryReplayApi *)replay +{ + static SentryReplayApi *replay; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ replay = [[SentryReplayApi alloc] init]; }); + return replay; +} +#endif /** Internal, only needed for testing. */ + (void)setCurrentHub:(nullable SentryHub *)hub { @@ -192,17 +208,26 @@ + (void)setStartTimestamp:(NSDate *)value + (void)startWithOptions:(SentryOptions *)options { + // We save the options before checking for Xcode preview because + // we will use this options in the preview startOption = options; - [SentryLog configure:options.debug diagnosticLevel:options.diagnosticLevel]; + if ([SentryDependencyContainer.sharedInstance.processInfoWrapper + .environment[SENTRY_XCODE_PREVIEW_ENVIRONMENT_KEY] isEqualToString:@"1"]) { + // Using NSLog because SentryLog was not initialized yet. + NSLog(@"[SENTRY] [WARNING] SentrySDK not started. Running from Xcode preview."); + return; + } + + [SentryLogSwiftSupport configure:options.debug diagnosticLevel:options.diagnosticLevel]; // We accept the tradeoff that the SDK might not be fully initialized directly after // initializing it on a background thread because scheduling the init synchronously on the main // thread could lead to deadlocks. SENTRY_LOG_DEBUG(@"Starting SDK..."); -#if defined(DEBUG) || defined(TEST) || defined(TESTCI) +#if defined(DEBUG) || defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) SENTRY_LOG_DEBUG(@"Configured options: %@", options.debugDescription); -#endif // defined(DEBUG) || defined(TEST) || defined(TESTCI) +#endif // defined(DEBUG) || defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) #if TARGET_OS_OSX // Reference to SentryCrashExceptionApplication to prevent compiler from stripping it @@ -215,6 +240,8 @@ + (void)startWithOptions:(SentryOptions *)options SentryClient *newClient = [[SentryClient alloc] initWithOptions:options]; [newClient.fileManager moveAppStateToPreviousAppState]; [newClient.fileManager moveBreadcrumbsToPreviousBreadcrumbs]; + [SentryDependencyContainer.sharedInstance + .scopeContextPersistentStore moveCurrentFileToPreviousFile]; SentryScope *scope = options.initialScope([[SentryScope alloc] initWithMaxBreadcrumbs:options.maxBreadcrumbs]); @@ -240,7 +267,7 @@ + (void)startWithOptions:(SentryOptions *)options [SentrySDK installIntegrations]; #if SENTRY_TARGET_PROFILING_SUPPORTED - sentry_manageTraceProfilerOnStartSDK(options, hub); + sentry_sdkInitProfilerTasks(options, hub); #endif // SENTRY_TARGET_PROFILING_SUPPORTED }]; @@ -254,16 +281,25 @@ + (void)startWithConfigureOptions:(void (^)(SentryOptions *options))configureOpt [SentrySDK startWithOptions:options]; } -+ (void)captureCrashEvent:(SentryEvent *)event ++ (void)captureFatalEvent:(SentryEvent *)event { - [SentrySDK.currentHub captureCrashEvent:event]; + [SentrySDK.currentHub captureFatalEvent:event]; } -+ (void)captureCrashEvent:(SentryEvent *)event withScope:(SentryScope *)scope ++ (void)captureFatalEvent:(SentryEvent *)event withScope:(SentryScope *)scope { - [SentrySDK.currentHub captureCrashEvent:event withScope:scope]; + [SentrySDK.currentHub captureFatalEvent:event withScope:scope]; } +#if SENTRY_HAS_UIKIT + ++ (void)captureFatalAppHangEvent:(SentryEvent *)event +{ + [SentrySDK.currentHub captureFatalAppHangEvent:event]; +} + +#endif // SENTRY_HAS_UIKIT + + (SentryId *)captureEvent:(SentryEvent *)event { return [SentrySDK captureEvent:event withScope:SentrySDK.currentHub.scope]; @@ -396,6 +432,23 @@ + (void)captureUserFeedback:(SentryUserFeedback *)userFeedback [SentrySDK.currentHub captureUserFeedback:userFeedback]; } ++ (void)captureFeedback:(SentryFeedback *)feedback +{ + [SentrySDK.currentHub captureFeedback:feedback]; +} + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + ++ (SentryFeedbackAPI *)feedback +{ + static SentryFeedbackAPI *feedbackAPI; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ feedbackAPI = [[SentryFeedbackAPI alloc] init]; }); + return feedbackAPI; +} + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT + + (void)addBreadcrumb:(SentryBreadcrumb *)crumb { [SentrySDK.currentHub addBreadcrumb:crumb]; @@ -408,6 +461,16 @@ + (void)configureScope:(void (^)(SentryScope *scope))callback + (void)setUser:(SentryUser *_Nullable)user { + if (![SentrySDK isEnabled]) { + // We must log with level fatal because only fatal messages get logged even when the SDK + // isn't started. We've seen multiple times that users try to set the user before starting + // the SDK, and it confuses them. Ideally, we would do something to store the user and set + // it once we start the SDK, but this is a breaking change, so we live with the workaround + // for now. + SENTRY_LOG_FATAL(@"The SDK is disabled, so setUser doesn't work. Please ensure to start " + @"the SDK before setting the user."); + } + [SentrySDK.currentHub setUser:user]; } @@ -446,8 +509,31 @@ + (void)installIntegrations return; } SentryOptions *options = [SentrySDK.currentHub getClient].options; - for (NSString *integrationName in [SentrySDK.currentHub getClient].options.integrations) { - Class integrationClass = NSClassFromString(integrationName); + NSMutableArray *integrationNames = + [SentrySDK.currentHub getClient].options.integrations.mutableCopy; + + NSArray *defaultIntegrations = SentryOptions.defaultIntegrationClasses; + + // Since 8.22.0, we use a precompiled XCFramework for SPM, which can lead to Sentry's + // definition getting duplicated in the app with a warning “SentrySDK is defined in both + // ModuleA and ModuleB”. This doesn't happen when users use Sentry-Dynamic and + // when compiling Sentry from source via SPM. Due to the duplication, some users didn't + // see any crashes reported to Sentry cause the SentryCrashReportSink couldn't find + // a hub bound to the SentrySDK, and it dropped the crash events. This problem + // is fixed now by using a dictionary that links the classes with their names + // so we can quickly check whether that class is in the option integrations collection. + // We cannot load the class itself with NSClassFromString because doing so may load a class + // that was duplicated in another module, leading to undefined behavior. + NSMutableDictionary *integrationDictionary = + [[NSMutableDictionary alloc] init]; + + for (Class integrationClass in defaultIntegrations) { + integrationDictionary[NSStringFromClass(integrationClass)] = integrationClass; + } + + for (NSString *integrationName in integrationNames) { + Class integrationClass + = integrationDictionary[integrationName] ?: NSClassFromString(integrationName); if (nil == integrationClass) { SENTRY_LOG_ERROR(@"[SentryHub doInstallIntegrations] " @"couldn't find \"%@\" -> skipping.", @@ -549,12 +635,34 @@ + (void)crash #if SENTRY_TARGET_PROFILING_SUPPORTED + (void)startProfiler { - if (![currentHub.client.options isContinuousProfilingEnabled]) { + SentryOptions *options = currentHub.client.options; + if (![options isContinuousProfilingEnabled]) { SENTRY_LOG_WARN( @"You must disable trace profiling by setting SentryOptions.profilesSampleRate and " @"SentryOptions.profilesSampler to nil (which is the default initial value for both " @"properties, so you can also just remove those lines from your configuration " - @"altogether) before attempting to start a continuous profiling session."); + @"altogether) before attempting to start a continuous profiling session. This behavior " + @"relies on deprecated options and will change in a future version."); + return; + } + + if (options.profiling != nil) { + if (options.profiling.lifecycle == SentryProfileLifecycleTrace) { + SENTRY_LOG_WARN( + @"The profiling lifecycle is set to trace, so you cannot start profile sessions " + @"manually. See SentryProfileLifecycle for more information."); + return; + } + + if (sentry_profilerSessionSampleDecision.decision != kSentrySampleDecisionYes) { + SENTRY_LOG_DEBUG( + @"The profiling session has been sampled out, no profiling will take place."); + return; + } + } + + if ([SentryContinuousProfiler isCurrentlyProfiling]) { + SENTRY_LOG_WARN(@"There is already a profile session running."); return; } @@ -563,30 +671,32 @@ + (void)startProfiler + (void)stopProfiler { - if (![currentHub.client.options isContinuousProfilingEnabled]) { + SentryOptions *options = currentHub.client.options; + if (![options isContinuousProfilingEnabled]) { SENTRY_LOG_WARN( @"You must disable trace profiling by setting SentryOptions.profilesSampleRate and " @"SentryOptions.profilesSampler to nil (which is the default initial value for both " @"properties, so you can also just remove those lines from your configuration " - @"altogether) before attempting to stop a continuous profiling session."); + @"altogether) before attempting to stop a continuous profiling session. This behavior " + @"relies on deprecated options and will change in a future version."); return; } - [SentryContinuousProfiler stop]; -} -#endif // SENTRY_TARGET_PROFILING_SUPPORTED + if (options.profiling != nil && options.profiling.lifecycle == SentryProfileLifecycleTrace) { + SENTRY_LOG_WARN( + @"The profiling lifecycle is set to trace, so you cannot stop profile sessions " + @"manually. See SentryProfileLifecycle for more information."); + return; + } -#if SENTRY_TARGET_REPLAY_SUPPORTED -+ (void)replayRedactView:(UIView *)view -{ - [SentryRedactViewHelper redactView:view]; -} + if (![SentryContinuousProfiler isCurrentlyProfiling]) { + SENTRY_LOG_WARN(@"No profile session to stop."); + return; + } -+ (void)replayIgnoreView:(UIView *)view -{ - [SentryRedactViewHelper ignoreView:view]; + [SentryContinuousProfiler stop]; } -#endif +#endif // SENTRY_TARGET_PROFILING_SUPPORTED @end diff --git a/Pods/Sentry/Sources/Sentry/SentrySamplerDecision.m b/Pods/Sentry/Sources/Sentry/SentrySamplerDecision.m index d3f2203ca..b5d324a2f 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySamplerDecision.m +++ b/Pods/Sentry/Sources/Sentry/SentrySamplerDecision.m @@ -4,10 +4,12 @@ @implementation SentrySamplerDecision - (instancetype)initWithDecision:(SentrySampleDecision)decision forSampleRate:(nullable NSNumber *)sampleRate + withSampleRand:(nullable NSNumber *)sampleRand { if (self = [super init]) { _decision = decision; _sampleRate = sampleRate; + _sampleRand = sampleRand; } return self; } diff --git a/Pods/Sentry/Sources/Sentry/SentrySampling.m b/Pods/Sentry/Sources/Sentry/SentrySampling.m index 446dfca51..4e6740624 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySampling.m +++ b/Pods/Sentry/Sources/Sentry/SentrySampling.m @@ -38,7 +38,9 @@ double random = [SentryDependencyContainer.sharedInstance.random nextNumber]; SentrySampleDecision decision = random <= rate.doubleValue ? kSentrySampleDecisionYes : kSentrySampleDecisionNo; - return [[SentrySamplerDecision alloc] initWithDecision:decision forSampleRate:rate]; + return [[SentrySamplerDecision alloc] initWithDecision:decision + forSampleRate:rate + withSampleRand:@(random)]; } SentrySamplerDecision * @@ -46,7 +48,8 @@ { if (rate == nil) { return [[SentrySamplerDecision alloc] initWithDecision:kSentrySampleDecisionNo - forSampleRate:nil]; + forSampleRate:nil + withSampleRand:nil]; } return _sentry_calcSample(rate); @@ -61,7 +64,8 @@ if (context.transactionContext.sampled != kSentrySampleDecisionUndecided) { return [[SentrySamplerDecision alloc] initWithDecision:context.transactionContext.sampled - forSampleRate:context.transactionContext.sampleRate]; + forSampleRate:context.transactionContext.sampleRate + withSampleRand:context.transactionContext.sampleRand]; } NSNumber *callbackRate = _sentry_samplerCallbackRate( @@ -74,7 +78,8 @@ if (context.transactionContext.parentSampled != kSentrySampleDecisionUndecided) { return [[SentrySamplerDecision alloc] initWithDecision:context.transactionContext.parentSampled - forSampleRate:context.transactionContext.sampleRate]; + forSampleRate:context.transactionContext.sampleRate + withSampleRand:context.transactionContext.sampleRand]; } return _sentry_calcSampleFromNumericalRate(options.tracesSampleRate); @@ -91,7 +96,8 @@ // whether the associated profile should be sampled. if (tracesSamplerDecision.decision != kSentrySampleDecisionYes) { return [[SentrySamplerDecision alloc] initWithDecision:kSentrySampleDecisionNo - forSampleRate:nil]; + forSampleRate:nil + withSampleRand:nil]; } // Backward compatibility for clients that are still using the enableProfiling option. @@ -99,7 +105,8 @@ # pragma clang diagnostic ignored "-Wdeprecated-declarations" if (options.enableProfiling) { return [[SentrySamplerDecision alloc] initWithDecision:kSentrySampleDecisionYes - forSampleRate:@1.0]; + forSampleRate:@1.0 + withSampleRand:@1.0]; } # pragma clang diagnostic pop @@ -112,6 +119,12 @@ return _sentry_calcSampleFromNumericalRate(options.profilesSampleRate); } +SentrySamplerDecision * +sentry_sampleProfileSession(float sessionSampleRate) +{ + return _sentry_calcSampleFromNumericalRate(@(sessionSampleRate)); +} + #endif // SENTRY_TARGET_PROFILING_SUPPORTED NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentrySamplingProfiler.cpp b/Pods/Sentry/Sources/Sentry/SentrySamplingProfiler.cpp index ecba14ae8..1f006e12f 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySamplingProfiler.cpp +++ b/Pods/Sentry/Sources/Sentry/SentrySamplingProfiler.cpp @@ -21,7 +21,7 @@ namespace profiling { mach_port_t port; clock_serv_t clock; mach_timespec_t delaySpec; - std::shared_ptr cache; + ThreadMetadataCache *cache; std::function callback; std::atomic_uint64_t &numSamples; std::function onThreadStart; @@ -77,7 +77,7 @@ namespace profiling { SamplingProfiler::SamplingProfiler( std::function callback, std::uint32_t samplingRateHz) : callback_(std::move(callback)) - , cache_(std::make_shared()) + , cache_(std::make_unique()) , isInitialized_(false) , isSampling_(false) , port_(0) @@ -139,8 +139,8 @@ namespace profiling { SENTRY_ASYNC_SAFE_LOG_ERRNO_RETURN(pthread_attr_setschedparam(&attr, ¶m)); } - const auto params = new SamplingThreadParams { port_, clock_, delaySpec_, cache_, callback_, - std::ref(numSamples_), std::move(onThreadStart) }; + const auto params = new SamplingThreadParams { port_, clock_, delaySpec_, cache_.get(), + callback_, std::ref(numSamples_), std::move(onThreadStart) }; if (SENTRY_ASYNC_SAFE_LOG_ERRNO_RETURN( pthread_create(&thread_, &attr, samplingThreadMain, params)) != 0) { diff --git a/Pods/Sentry/Sources/Sentry/SentryScope.m b/Pods/Sentry/Sources/Sentry/SentryScope.m index 82c5bf299..bec358450 100644 --- a/Pods/Sentry/Sources/Sentry/SentryScope.m +++ b/Pods/Sentry/Sources/Sentry/SentryScope.m @@ -2,7 +2,7 @@ #import "SentryAttachment+Private.h" #import "SentryBreadcrumb.h" #import "SentryEnvelopeItemType.h" -#import "SentryEvent.h" +#import "SentryEvent+Private.h" #import "SentryGlobalEventProcessor.h" #import "SentryLevelMapper.h" #import "SentryLog.h" @@ -11,14 +11,14 @@ #import "SentryScopeObserver.h" #import "SentrySession.h" #import "SentrySpan.h" +#import "SentrySwift.h" #import "SentryTracer.h" #import "SentryTransactionContext.h" #import "SentryUser.h" NS_ASSUME_NONNULL_BEGIN -@interface -SentryScope () +@interface SentryScope () /** * Set global tags -> these will be sent with every event @@ -60,6 +60,8 @@ @implementation SentryScope { NSObject *_spanLock; } +@synthesize span = _span; + #pragma mark Initializer - (instancetype)initWithMaxBreadcrumbs:(NSInteger)maxBreadcrumbs @@ -98,7 +100,7 @@ - (instancetype)initWithScope:(SentryScope *)scope [_fingerprintArray addObjectsFromArray:[scope fingerprints]]; [_attachmentArray addObjectsFromArray:[scope attachments]]; - self.propagationContext = [[SentryPropagationContext alloc] init]; + self.propagationContext = scope.propagationContext; self.maxBreadcrumbs = scope.maxBreadcrumbs; self.userObject = scope.userObject.copy; self.distString = scope.distString; @@ -134,8 +136,10 @@ - (void)addBreadcrumb:(SentryBreadcrumb *)crumb _currentBreadcrumbIndex = (_currentBreadcrumbIndex + 1) % _maxBreadcrumbs; + // Serializing is expensive. Only do it once. + NSDictionary *serializedBreadcrumb = [crumb serialize]; for (id observer in self.observers) { - [observer addSerializedBreadcrumb:[crumb serialize]]; + [observer addSerializedBreadcrumb:serializedBreadcrumb]; } } } @@ -144,15 +148,37 @@ - (void)setSpan:(nullable id)span { @synchronized(_spanLock) { _span = span; + + for (id observer in self.observers) { + [observer setTraceContext:[self buildTraceContext:span]]; + } } } -- (void)useSpan:(SentrySpanCallback)callback +- (void)setPropagationContext:(SentryPropagationContext *)propagationContext +{ + @synchronized(_propagationContext) { + _propagationContext = propagationContext; + + if (self.observers.count > 0) { + NSDictionary *traceContext = [self.propagationContext traceContextForEvent]; + for (id observer in self.observers) { + [observer setTraceContext:traceContext]; + } + } + } +} + +- (nullable id)span { - id localSpan = nil; @synchronized(_spanLock) { - localSpan = _span; + return _span; } +} + +- (void)useSpan:(SentrySpanCallback)callback +{ + id localSpan = [self span]; callback(localSpan); } @@ -237,7 +263,7 @@ - (void)removeContextForKey:(NSString *)key [_contextDictionary removeObjectForKey:key]; for (id observer in self.observers) { - [observer setExtras:_contextDictionary]; + [observer setContext:_contextDictionary]; } } } @@ -454,9 +480,23 @@ - (void)clearAttachments if (self.extras.count > 0) { [serializedData setValue:[self extras] forKey:@"extra"]; } - if (self.context.count > 0) { - [serializedData setValue:[self context] forKey:@"context"]; + + NSDictionary *traceContext = nil; + id span = nil; + + if (self.span != nil) { + @synchronized(_spanLock) { + span = self.span; + } + } + traceContext = [self buildTraceContext:span]; + serializedData[@"traceContext"] = traceContext; + + NSDictionary *context = [self context]; + if (context.count > 0) { + [serializedData setValue:context forKey:@"context"]; } + [serializedData setValue:[self.userObject serialize] forKey:@"user"]; [serializedData setValue:self.distString forKey:@"dist"]; [serializedData setValue:self.environmentString forKey:@"environment"]; @@ -506,6 +546,13 @@ - (void)applyToSession:(SentrySession *)session - (SentryEvent *__nullable)applyToEvent:(SentryEvent *)event maxBreadcrumb:(NSUInteger)maxBreadcrumbs { + if (event.isFatalEvent) { + SENTRY_LOG_WARN(@"Won't apply scope to a crash event. This is not allowed as crash " + @"events are from a previous run of the app and the current scope might " + @"have different data than the scope that was active during the crash."); + return event; + } + if (event.tags == nil) { event.tags = [self tags]; } else { @@ -560,13 +607,9 @@ - (SentryEvent *__nullable)applyToEvent:(SentryEvent *)event event.level = level; } - NSMutableDictionary *newContext = [self context].mutableCopy; - if (event.context != nil) { - [SentryDictionary mergeEntriesFromDictionary:event.context intoDictionary:newContext]; - } + id span; if (self.span != nil) { - id span; @synchronized(_spanLock) { span = self.span; } @@ -577,15 +620,16 @@ - (SentryEvent *__nullable)applyToEvent:(SentryEvent *)event [span isKindOfClass:[SentryTracer class]]) { event.transaction = [[(SentryTracer *)span transactionContext] name]; } - newContext[@"trace"] = [span serialize]; } } - if (newContext[@"trace"] == nil) { - // If this is an error event we need to add the distributed trace context. - newContext[@"trace"] = [self.propagationContext traceContextForEvent]; + NSMutableDictionary *newContext = [self context].mutableCopy; + if (event.context != nil) { + [SentryDictionary mergeEntriesFromDictionary:event.context intoDictionary:newContext]; } + newContext[@"trace"] = [self buildTraceContext:span]; + event.context = newContext; return event; } @@ -595,6 +639,15 @@ - (void)addObserver:(id)observer [self.observers addObject:observer]; } +- (NSDictionary *)buildTraceContext:(nullable id)span +{ + if (span != nil) { + return [span serialize]; + } else { + return [self.propagationContext traceContextForEvent]; + } +} + @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentryScopeSyncC.c b/Pods/Sentry/Sources/Sentry/SentryScopeSyncC.c index cbbacd85f..4d518f3cf 100644 --- a/Pods/Sentry/Sources/Sentry/SentryScopeSyncC.c +++ b/Pods/Sentry/Sources/Sentry/SentryScopeSyncC.c @@ -46,6 +46,12 @@ sentrycrash_scopesync_setContext(const char *const jsonEncodedCString) setField(jsonEncodedCString, &scope.context); } +void +sentrycrash_scopesync_setTraceContext(const char *const jsonEncodedCString) +{ + setField(jsonEncodedCString, &scope.traceContext); +} + void sentrycrash_scopesync_setEnvironment(const char *const jsonEncodedCString) { diff --git a/Pods/Sentry/Sources/Sentry/SentryScreenFrames.m b/Pods/Sentry/Sources/Sentry/SentryScreenFrames.m index 6b2ce14d6..6f2bf9c0e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryScreenFrames.m +++ b/Pods/Sentry/Sources/Sentry/SentryScreenFrames.m @@ -85,8 +85,8 @@ - (NSString *)description (unsigned long)_total, (unsigned long)_slow, (unsigned long)_frozen]; # if SENTRY_TARGET_PROFILING_SUPPORTED [result appendFormat: - @"\nslowFrameTimestamps: %@\nfrozenFrameTimestamps: %@\nframeRateTimestamps: %@", - _slowFrameTimestamps, _frozenFrameTimestamps, _frameRateTimestamps]; + @"\nslowFrameTimestamps: %@\nfrozenFrameTimestamps: %@\nframeRateTimestamps: %@", + _slowFrameTimestamps, _frozenFrameTimestamps, _frameRateTimestamps]; # endif // SENTRY_TARGET_PROFILING_SUPPORTED return result; } diff --git a/Pods/Sentry/Sources/Sentry/SentryScreenshot.m b/Pods/Sentry/Sources/Sentry/SentryScreenshot.m index 50017f073..73c328a74 100644 --- a/Pods/Sentry/Sources/Sentry/SentryScreenshot.m +++ b/Pods/Sentry/Sources/Sentry/SentryScreenshot.m @@ -1,18 +1,31 @@ #import "SentryScreenshot.h" -#if SENTRY_HAS_UIKIT +#if SENTRY_TARGET_REPLAY_SUPPORTED # import "SentryCompiler.h" # import "SentryDependencyContainer.h" # import "SentryDispatchQueueWrapper.h" +# import "SentrySwift.h" # import "SentryUIApplication.h" -# import -@implementation SentryScreenshot +@implementation SentryScreenshot { + SentryViewPhotographer *photographer; +} + +- (instancetype)init +{ + if (self = [super init]) { + photographer = [[SentryViewPhotographer alloc] + initWithRenderer:[[SentryDefaultViewRenderer alloc] init] + redactOptions:[[SentryRedactDefaultOptions alloc] init] + enableMaskRendererV2:false]; + } + return self; +} -- (NSArray *)appScreenshotsFromMainThread +- (NSArray *)appScreenshotsFromMainThread { - __block NSArray *result; + __block NSArray *result; void (^takeScreenShot)(void) = ^{ result = [self appScreenshots]; }; @@ -22,6 +35,18 @@ @implementation SentryScreenshot return result; } +- (NSArray *)appScreenshotDatasFromMainThread +{ + __block NSArray *result; + + void (^takeScreenShot)(void) = ^{ result = [self appScreenshotsData]; }; + + [[SentryDependencyContainer sharedInstance].dispatchQueueWrapper + dispatchSyncOnMainQueue:takeScreenShot]; + + return result; +} + - (void)saveScreenShots:(NSString *)imagesDirectoryPath { // This function does not dispatch the screenshot to the main thread. @@ -29,20 +54,20 @@ - (void)saveScreenShots:(NSString *)imagesDirectoryPath // We did it this way because we use this function to save screenshots // during signal handling, and if we dispatch it to the main thread, // that is probably blocked by the crash event, we freeze the application. - [[self appScreenshots] enumerateObjectsUsingBlock:^(NSData *obj, NSUInteger idx, BOOL *stop) { - NSString *name = idx == 0 - ? @"screenshot.png" - : [NSString stringWithFormat:@"screenshot-%li.png", (unsigned long)idx + 1]; - NSString *fileName = [imagesDirectoryPath stringByAppendingPathComponent:name]; - [obj writeToFile:fileName atomically:YES]; - }]; + [[self appScreenshotsData] + enumerateObjectsUsingBlock:^(NSData *obj, NSUInteger idx, BOOL *stop) { + NSString *name = idx == 0 + ? @"screenshot.png" + : [NSString stringWithFormat:@"screenshot-%li.png", (unsigned long)idx + 1]; + NSString *fileName = [imagesDirectoryPath stringByAppendingPathComponent:name]; + [obj writeToFile:fileName atomically:YES]; + }]; } -- (NSArray *)appScreenshots +- (NSArray *)appScreenshots { NSArray *windows = [SentryDependencyContainer.sharedInstance.application windows]; - - NSMutableArray *result = [NSMutableArray arrayWithCapacity:windows.count]; + NSMutableArray *result = [NSMutableArray arrayWithCapacity:windows.count]; for (UIWindow *window in windows) { CGSize size = window.frame.size; @@ -53,21 +78,32 @@ - (void)saveScreenShots:(NSString *)imagesDirectoryPath continue; } - UIGraphicsBeginImageContext(size); - - if ([window drawViewHierarchyInRect:window.bounds afterScreenUpdates:false]) { - UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); - // this shouldn't happen now that we discard windows with either 0 height or 0 width, - // but still, we shouldn't send any images with either one. - if (LIKELY(img.size.width > 0 && img.size.height > 0)) { - NSData *bytes = UIImagePNGRepresentation(img); - if (bytes && bytes.length > 0) { - [result addObject:bytes]; - } - } + UIImage *img = [photographer imageWithView:window]; + + // this shouldn't happen now that we discard windows with either 0 height or 0 width, + // but still, we shouldn't send any images with either one. + if (LIKELY(img.size.width > 0 && img.size.height > 0)) { + [result addObject:img]; } + } + return result; +} - UIGraphicsEndImageContext(); +- (NSArray *)appScreenshotsData +{ + NSArray *screenshots = [self appScreenshots]; + NSMutableArray *result = + [NSMutableArray arrayWithCapacity:screenshots.count]; + + for (UIImage *screenshot in screenshots) { + // this shouldn't happen now that we discard windows with either 0 height or 0 width, + // but still, we shouldn't send any images with either one. + if (LIKELY(screenshot.size.width > 0 && screenshot.size.height > 0)) { + NSData *bytes = UIImagePNGRepresentation(screenshot); + if (bytes && bytes.length > 0) { + [result addObject:bytes]; + } + } } return result; } diff --git a/Pods/Sentry/Sources/Sentry/SentryScreenshotIntegration.m b/Pods/Sentry/Sources/Sentry/SentryScreenshotIntegration.m index ea6e98263..5eccb7aba 100644 --- a/Pods/Sentry/Sources/Sentry/SentryScreenshotIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryScreenshotIntegration.m @@ -1,6 +1,6 @@ #import "SentryScreenshotIntegration.h" -#if SENTRY_HAS_UIKIT +#if SENTRY_TARGET_REPLAY_SUPPORTED # import "SentryAttachment.h" # import "SentryCrashC.h" @@ -22,8 +22,7 @@ [SentryDependencyContainer.sharedInstance.screenshot saveScreenShots:reportPath]; } -@interface -SentryScreenshotIntegration () +@interface SentryScreenshotIntegration () @property (nonatomic, strong) SentryOptions *options; @@ -60,15 +59,16 @@ - (void)uninstall [client removeAttachmentProcessor:self]; } -- (NSArray *)processAttachments:(NSArray *)attachments - forEvent:(nonnull SentryEvent *)event +- (nonnull NSArray *)processAttachments: + (nonnull NSArray *)attachments + forEvent:(nonnull SentryEvent *)event { // We don't take screenshots if there is no exception/error. // We don't take screenshots if the event is a metric kit event. // Screenshots are added via an alternate codepath for crashes, see // sentrycrash_setSaveScreenshots in SentryCrashC.c - if ((event.exceptions == nil && event.error == nil) || event.isCrashEvent + if ((event.exceptions == nil && event.error == nil) || event.isFatalEvent # if SENTRY_HAS_METRIC_KIT || [event isMetricKitEvent] # endif // SENTRY_HAS_METRIC_KIT @@ -86,8 +86,8 @@ - (void)uninstall return attachments; } - NSArray *screenshot = - [SentryDependencyContainer.sharedInstance.screenshot appScreenshotsFromMainThread]; + NSArray *screenshot = + [SentryDependencyContainer.sharedInstance.screenshot appScreenshotDatasFromMainThread]; NSMutableArray *result = [NSMutableArray arrayWithCapacity:attachments.count + screenshot.count]; diff --git a/Pods/Sentry/Sources/Sentry/SentrySdkInfo.m b/Pods/Sentry/Sources/Sentry/SentrySdkInfo.m index dd22b480a..d6f82d376 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySdkInfo.m +++ b/Pods/Sentry/Sources/Sentry/SentrySdkInfo.m @@ -1,115 +1,130 @@ #import "SentrySdkInfo.h" -#import - -typedef NS_ENUM(NSUInteger, SentryPackageManagerOption) { - SentrySwiftPackageManager, - SentryCocoaPods, - SentryCarthage, - SentryPackageManagerUnkown -}; - -/** - * This is required to identify the package manager used when installing sentry. - */ -#if SWIFT_PACKAGE -static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentrySwiftPackageManager; -#elif COCOAPODS -static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentryCocoaPods; -#elif CARTHAGE_YES -// CARTHAGE is a xcodebuild build setting with value `YES`, we need to convert it into a compiler -// definition to be able to use it. -static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentryCarthage; -#else -static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentryPackageManagerUnkown; -#endif +#import "SentryClient+Private.h" +#import "SentryExtraPackages.h" +#import "SentryHub+Private.h" +#import "SentryMeta.h" +#import "SentryOptions.h" +#import "SentrySDK+Private.h" +#import "SentrySdkPackage.h" +#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN -@interface -SentrySdkInfo () - -@property (nonatomic) SentryPackageManagerOption packageManager; - +@interface SentrySdkInfo () @end @implementation SentrySdkInfo -- (instancetype)initWithName:(NSString *)name andVersion:(NSString *)version ++ (instancetype)global +{ + SentryClient *_Nullable client = [SentrySDK.currentHub getClient]; + return [[SentrySdkInfo alloc] initWithOptions:client.options]; +} + +- (instancetype)initWithOptions:(SentryOptions *_Nullable)options +{ + + NSArray *features = + [SentryEnabledFeaturesBuilder getEnabledFeaturesWithOptions:options]; + + NSMutableArray *integrations = + [SentrySDK.currentHub trimmedInstalledIntegrationNames]; + +#if SENTRY_HAS_UIKIT + if (options.enablePreWarmedAppStartTracing) { + [integrations addObject:@"PreWarmedAppStartTracing"]; + } +#endif + + NSMutableSet *> *packages = + [SentryExtraPackages getPackages]; + NSDictionary *sdkPackage = [SentrySdkPackage global]; + if (sdkPackage != nil) { + [packages addObject:sdkPackage]; + } + + return [self initWithName:SentryMeta.sdkName + version:SentryMeta.versionString + integrations:integrations + features:features + packages:[packages allObjects]]; +} + +- (instancetype)initWithName:(NSString *)name + version:(NSString *)version + integrations:(NSArray *)integrations + features:(NSArray *)features + packages:(NSArray *> *)packages { if (self = [super init]) { _name = name ?: @""; _version = version ?: @""; - _packageManager = SENTRY_PACKAGE_INFO; + _integrations = integrations ?: @[]; + _features = features ?: @[]; + _packages = packages ?: @[]; } return self; } - (instancetype)initWithDict:(NSDictionary *)dict -{ - return [self initWithDictInternal:dict orDefaults:nil]; -} - -- (instancetype)initWithDict:(NSDictionary *)dict orDefaults:(SentrySdkInfo *)info; -{ - return [self initWithDictInternal:dict orDefaults:info]; -} - -- (instancetype)initWithDictInternal:(NSDictionary *)dict orDefaults:(SentrySdkInfo *_Nullable)info; { NSString *name = @""; NSString *version = @""; + NSMutableSet *integrations = [[NSMutableSet alloc] init]; + NSMutableSet *features = [[NSMutableSet alloc] init]; + NSMutableSet *> *packages = [[NSMutableSet alloc] init]; - if (nil != dict[@"sdk"] && [dict[@"sdk"] isKindOfClass:[NSDictionary class]]) { - NSDictionary *sdkInfoDict = dict[@"sdk"]; - if ([sdkInfoDict[@"name"] isKindOfClass:[NSString class]]) { - name = sdkInfoDict[@"name"]; - } else if (info && info.name) { - name = info.name; - } + if ([dict[@"name"] isKindOfClass:[NSString class]]) { + name = dict[@"name"]; + } + + if ([dict[@"version"] isKindOfClass:[NSString class]]) { + version = dict[@"version"]; + } - if ([sdkInfoDict[@"version"] isKindOfClass:[NSString class]]) { - version = sdkInfoDict[@"version"]; - } else if (info && info.version) { - version = info.version; + if ([dict[@"integrations"] isKindOfClass:[NSArray class]]) { + for (id item in dict[@"integrations"]) { + if ([item isKindOfClass:[NSString class]]) { + [integrations addObject:item]; + } } } - return [self initWithName:name andVersion:version]; -} + if ([dict[@"features"] isKindOfClass:[NSArray class]]) { + for (id item in dict[@"features"]) { + if ([item isKindOfClass:[NSString class]]) { + [features addObject:item]; + } + } + } -- (nullable NSString *)getPackageName:(SentryPackageManagerOption)packageManager -{ - switch (packageManager) { - case SentrySwiftPackageManager: - return @"spm:getsentry/%@"; - case SentryCocoaPods: - return @"cocoapods:getsentry/%@"; - case SentryCarthage: - return @"carthage:getsentry/%@"; - default: - return nil; + if ([dict[@"packages"] isKindOfClass:[NSArray class]]) { + for (id item in dict[@"packages"]) { + if ([item isKindOfClass:[NSDictionary class]] && + [item[@"name"] isKindOfClass:[NSString class]] && + [item[@"version"] isKindOfClass:[NSString class]]) { + [packages addObject:@{ @"name" : item[@"name"], @"version" : item[@"version"] }]; + } + } } + + return [self initWithName:name + version:version + integrations:[integrations allObjects] + features:[features allObjects] + packages:[packages allObjects]]; } - (NSDictionary *)serialize { - NSMutableDictionary *sdk = @{ + return @{ @"name" : self.name, @"version" : self.version, - } - .mutableCopy; - if (self.packageManager != SentryPackageManagerUnkown) { - NSString *format = [self getPackageName:self.packageManager]; - if (format != nil) { - sdk[@"packages"] = @{ - @"name" : [NSString stringWithFormat:format, self.name], - @"version" : self.version - }; - } - } - - return @{ @"sdk" : sdk }; + @"integrations" : self.integrations, + @"features" : self.features, + @"packages" : self.packages, + }; } @end diff --git a/Pods/Sentry/Sources/Sentry/SentrySdkPackage.m b/Pods/Sentry/Sources/Sentry/SentrySdkPackage.m new file mode 100644 index 000000000..1589c6fd1 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentrySdkPackage.m @@ -0,0 +1,79 @@ +#import "SentrySdkPackage.h" +#import "SentryMeta.h" + +typedef NS_ENUM(NSUInteger, SentryPackageManagerOption) { + SentrySwiftPackageManager, + SentryCocoaPods, + SentryCarthage, + SentryPackageManagerUnkown +}; + +/** + * This is required to identify the package manager used when installing sentry. + */ +#if SWIFT_PACKAGE +static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentrySwiftPackageManager; +#elif COCOAPODS +static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentryCocoaPods; +#elif CARTHAGE_YES +// CARTHAGE is a xcodebuild build setting with value `YES`, we need to convert it into a compiler +// definition to be able to use it. +static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentryCarthage; +#else +static SentryPackageManagerOption SENTRY_PACKAGE_INFO = SentryPackageManagerUnkown; +#endif + +NS_ASSUME_NONNULL_BEGIN + +@implementation SentrySdkPackage + ++ (nullable NSString *)getSentrySDKPackageName:(SentryPackageManagerOption)packageManager +{ + switch (packageManager) { + case SentrySwiftPackageManager: + return [NSString stringWithFormat:@"spm:getsentry/%@", SentryMeta.sdkName]; + case SentryCocoaPods: + return [NSString stringWithFormat:@"cocoapods:getsentry/%@", SentryMeta.sdkName]; + case SentryCarthage: + return [NSString stringWithFormat:@"carthage:getsentry/%@", SentryMeta.sdkName]; + default: + return nil; + } +} + ++ (nullable NSDictionary *)getSentrySDKPackage: + (SentryPackageManagerOption)packageManager +{ + + if (packageManager == SentryPackageManagerUnkown) { + return nil; + } + + NSString *name = [SentrySdkPackage getSentrySDKPackageName:packageManager]; + if (nil == name) { + return nil; + } + + return @{ @"name" : name, @"version" : SentryMeta.versionString }; +} + ++ (nullable NSDictionary *)global +{ + return [SentrySdkPackage getSentrySDKPackage:SENTRY_PACKAGE_INFO]; +} + +#if SENTRY_TEST || SENTRY_TEST_CI ++ (void)setPackageManager:(NSUInteger)manager +{ + SENTRY_PACKAGE_INFO = manager; +} + ++ (void)resetPackageManager +{ + SENTRY_PACKAGE_INFO = SentryPackageManagerUnkown; +} +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentrySerialization.m b/Pods/Sentry/Sources/Sentry/SentrySerialization.m index 507490bf0..7a0538a01 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySerialization.m +++ b/Pods/Sentry/Sources/Sentry/SentrySerialization.m @@ -42,7 +42,7 @@ + (NSData *_Nullable)dataWithEnvelope:(SentryEnvelope *)envelope SentrySdkInfo *sdkInfo = envelope.header.sdkInfo; if (nil != sdkInfo) { - [serializedData addEntriesFromDictionary:[sdkInfo serialize]]; + [serializedData setValue:[sdkInfo serialize] forKey:@"sdk"]; } SentryTraceContext *traceContext = envelope.header.traceContext; @@ -82,9 +82,9 @@ + (SentryEnvelope *_Nullable)envelopeWithData:(NSData *)data { SentryEnvelopeHeader *envelopeHeader = nil; const unsigned char *bytes = [data bytes]; - int envelopeHeaderIndex = 0; + NSUInteger envelopeHeaderIndex = 0; - for (int i = 0; i < data.length; ++i) { + for (NSUInteger i = 0; i < data.length; ++i) { if (bytes[i] == '\n') { envelopeHeaderIndex = i; // Envelope header end @@ -100,32 +100,33 @@ + (SentryEnvelope *_Nullable)envelopeWithData:(NSData *)data error:&error]; if (nil != error) { SENTRY_LOG_ERROR(@"Failed to parse envelope header %@", error); - } else { - SentryId *eventId = nil; - NSString *eventIdAsString = headerDictionary[@"event_id"]; - if (nil != eventIdAsString) { - eventId = [[SentryId alloc] initWithUUIDString:eventIdAsString]; - } - - SentrySdkInfo *sdkInfo = nil; - if (nil != headerDictionary[@"sdk"]) { - sdkInfo = [[SentrySdkInfo alloc] initWithDict:headerDictionary]; - } - - SentryTraceContext *traceContext = nil; - if (nil != headerDictionary[@"trace"]) { - traceContext = - [[SentryTraceContext alloc] initWithDict:headerDictionary[@"trace"]]; - } - - envelopeHeader = [[SentryEnvelopeHeader alloc] initWithId:eventId - sdkInfo:sdkInfo - traceContext:traceContext]; - - if (headerDictionary[@"sent_at"] != nil) { - envelopeHeader.sentAt = sentry_fromIso8601String(headerDictionary[@"sent_at"]); - } + break; + } + + SentryId *eventId = nil; + NSString *eventIdAsString = headerDictionary[@"event_id"]; + if (nil != eventIdAsString) { + eventId = [[SentryId alloc] initWithUUIDString:eventIdAsString]; + } + + SentrySdkInfo *sdkInfo = nil; + if (nil != headerDictionary[@"sdk"]) { + sdkInfo = [[SentrySdkInfo alloc] initWithDict:headerDictionary[@"sdk"]]; + } + + SentryTraceContext *traceContext = nil; + if (nil != headerDictionary[@"trace"]) { + traceContext = [[SentryTraceContext alloc] initWithDict:headerDictionary[@"trace"]]; } + + envelopeHeader = [[SentryEnvelopeHeader alloc] initWithId:eventId + sdkInfo:sdkInfo + traceContext:traceContext]; + + if (headerDictionary[@"sent_at"] != nil) { + envelopeHeader.sentAt = sentry_fromIso8601String(headerDictionary[@"sent_at"]); + } + break; } } @@ -135,18 +136,18 @@ + (SentryEnvelope *_Nullable)envelopeWithData:(NSData *)data return nil; } - NSAssert(envelopeHeaderIndex > 0, @"EnvelopeHeader was parsed, its index is expected."); if (envelopeHeaderIndex == 0) { - NSLog(@"EnvelopeHeader was parsed, its index is expected."); + SENTRY_LOG_ERROR(@"EnvelopeHeader was parsed, its index is expected."); return nil; } // Parse items - NSInteger itemHeaderStart = envelopeHeaderIndex + 1; + NSUInteger itemHeaderStart = envelopeHeaderIndex + 1; NSMutableArray *items = [NSMutableArray new]; NSUInteger endOfEnvelope = data.length - 1; - for (NSInteger i = itemHeaderStart; i <= endOfEnvelope; ++i) { + + for (NSUInteger i = itemHeaderStart; i <= endOfEnvelope; ++i) { if (bytes[i] == '\n' || i == endOfEnvelope) { NSData *itemHeaderData = @@ -154,44 +155,34 @@ + (SentryEnvelope *_Nullable)envelopeWithData:(NSData *)data #ifdef DEBUG NSString *itemHeaderString = [[NSString alloc] initWithData:itemHeaderData encoding:NSUTF8StringEncoding]; - [SentryLog - logWithMessage:[NSString stringWithFormat:@"Item Header %@", itemHeaderString] - andLevel:kSentryLevelDebug]; + SENTRY_LOG_DEBUG(@"Item Header %@", itemHeaderString); #endif NSError *error = nil; NSDictionary *headerDictionary = [NSJSONSerialization JSONObjectWithData:itemHeaderData options:0 error:&error]; if (nil != error) { - [SentryLog - logWithMessage:[NSString - stringWithFormat:@"Failed to parse envelope item header %@", - error] - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR(@"Failed to parse envelope item header %@", error); return nil; } NSString *_Nullable type = [headerDictionary valueForKey:@"type"]; if (nil == type) { - [SentryLog - logWithMessage:[NSString stringWithFormat:@"Envelope item type is required."] - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR(@"Envelope item type is required."); break; } NSNumber *bodyLengthNumber = [headerDictionary valueForKey:@"length"]; NSUInteger bodyLength = [bodyLengthNumber unsignedIntegerValue]; if (endOfEnvelope == i && bodyLength != 0) { - [SentryLog - logWithMessage:[NSString - stringWithFormat:@"Envelope item has no data but header " - @"indicates it's length is %d.", - (int)bodyLength] - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR( + @"Envelope item has no data but header indicates it's length is %d.", + (int)bodyLength); break; } NSString *filename = [headerDictionary valueForKey:@"filename"]; NSString *contentType = [headerDictionary valueForKey:@"content_type"]; NSString *attachmentType = [headerDictionary valueForKey:@"attachment_type"]; + NSNumber *itemCount = [headerDictionary valueForKey:@"item_count"]; SentryEnvelopeItemHeader *itemHeader; if (nil != filename) { @@ -201,6 +192,11 @@ + (SentryEnvelope *_Nullable)envelopeWithData:(NSData *)data filename:filename contentType:contentType attachmentType:typeForSentryAttachmentName(attachmentType)]; + } else if (nil != itemCount) { + itemHeader = [[SentryEnvelopeItemHeader alloc] initWithType:type + length:bodyLength + contentType:contentType + itemCount:itemCount]; } else { itemHeader = [[SentryEnvelopeItemHeader alloc] initWithType:type length:bodyLength]; } @@ -211,7 +207,7 @@ + (SentryEnvelope *_Nullable)envelopeWithData:(NSData *)data if (bodyLength > 0 && data.length < (i + 1 + bodyLength)) { SENTRY_LOG_ERROR(@"Envelope is corrupted or has invalid data. Trying to read %li " - @"bytes by skiping %li from a buffer of %li bytes.", + @"bytes by skipping %li from a buffer of %li bytes.", (unsigned long)data.length, (unsigned long)bodyLength, (long)(i + 1)); return nil; } @@ -245,10 +241,7 @@ + (SentrySession *_Nullable)sessionWithData:(NSData *)sessionData options:0 error:&error]; if (nil != error) { - [SentryLog - logWithMessage:[NSString - stringWithFormat:@"Failed to deserialize session data %@", error] - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR(@"Failed to deserialize session data %@", error); return nil; } SentrySession *session = [[SentrySession alloc] initWithJSONObject:sessionDictionary]; @@ -259,9 +252,7 @@ + (SentrySession *_Nullable)sessionWithData:(NSData *)sessionData } if (nil == session.releaseName || [session.releaseName isEqualToString:@""]) { - [SentryLog - logWithMessage:@"Deserialized session doesn't contain a release name. Dropping it." - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR(@"Deserialized session doesn't contain a release name. Dropping it."); return nil; } @@ -285,28 +276,21 @@ + (SentryAppState *_Nullable)appStateWithData:(NSData *)data options:0 error:&error]; if (nil != error) { - [SentryLog - logWithMessage:[NSString - stringWithFormat:@"Failed to deserialize app state data %@", error] - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR(@"Failed to deserialize app state data %@", error); return nil; } return [[SentryAppState alloc] initWithJSONObject:appSateDictionary]; } -+ (NSDictionary *)deserializeDictionaryFromJsonData:(NSData *)data ++ (NSDictionary *_Nullable)deserializeDictionaryFromJsonData:(NSData *)data { NSError *error = nil; - NSDictionary *eventDictionary = [NSJSONSerialization JSONObjectWithData:data - options:0 - error:&error]; + NSDictionary *_Nullable eventDictionary = [NSJSONSerialization JSONObjectWithData:data + options:0 + error:&error]; if (nil != error) { - [SentryLog - logWithMessage:[NSString - stringWithFormat:@"Failed to deserialize json item dictionary: %@", - error] - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR(@"Failed to deserialize json item dictionary: %@", error); } return eventDictionary; @@ -319,12 +303,7 @@ + (SentryLevel)levelFromData:(NSData *)eventEnvelopeItemData options:0 error:&error]; if (nil != error) { - [SentryLog - logWithMessage: - [NSString - stringWithFormat:@"Failed to retrieve event level from envelope item data: %@", - error] - andLevel:kSentryLevelError]; + SENTRY_LOG_ERROR(@"Failed to retrieve event level from envelope item data: %@", error); return kSentryLevelError; } diff --git a/Pods/Sentry/Sources/Sentry/SentrySession.m b/Pods/Sentry/Sources/Sentry/SentrySession.m index 27e54dd3a..b28efa360 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySession.m +++ b/Pods/Sentry/Sources/Sentry/SentrySession.m @@ -132,6 +132,11 @@ - (nullable instancetype)initWithJSONObject:(NSDictionary *)jsonObject if ([duration isKindOfClass:[NSNumber class]]) { _duration = duration; } + + id abnormalMechanism = [jsonObject valueForKey:@"abnormal_mechanism"]; + if ([abnormalMechanism isKindOfClass:[NSString class]]) { + _abnormalMechanism = abnormalMechanism; + } } return self; @@ -238,6 +243,10 @@ - (void)incrementErrors [serializedData setValue:_distinctId forKey:@"did"]; + if (_abnormalMechanism != nil) { + serializedData[@"abnormal_mechanism"] = _abnormalMechanism; + } + return serializedData; } } @@ -258,6 +267,7 @@ - (id)copyWithZone:(nullable NSZone *)zone copy->_releaseName = _releaseName; copy.environment = self.environment; copy.user = self.user; + copy->_abnormalMechanism = _abnormalMechanism; copy->_init = _init; } diff --git a/Pods/Sentry/Sources/Sentry/SentrySessionReplayIntegration.m b/Pods/Sentry/Sources/Sentry/SentrySessionReplayIntegration.m index 42537d21e..ec4f4b144 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySessionReplayIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentrySessionReplayIntegration.m @@ -3,7 +3,9 @@ #if SENTRY_TARGET_REPLAY_SUPPORTED # import "SentryClient+Private.h" +# import "SentryCrashWrapper.h" # import "SentryDependencyContainer.h" +# import "SentryDispatchQueueProviderProtocol.h" # import "SentryDispatchQueueWrapper.h" # import "SentryDisplayLinkWrapper.h" # import "SentryEvent+Private.h" @@ -14,6 +16,7 @@ # import "SentryNSNotificationCenterWrapper.h" # import "SentryOptions.h" # import "SentryRandom.h" +# import "SentryRateLimits.h" # import "SentryReachability.h" # import "SentrySDK+Private.h" # import "SentryScope+Private.h" @@ -27,6 +30,8 @@ NS_ASSUME_NONNULL_BEGIN static NSString *SENTRY_REPLAY_FOLDER = @"replay"; +static NSString *SENTRY_CURRENT_REPLAY = @"replay.current"; +static NSString *SENTRY_LAST_REPLAY = @"replay.last"; /** * We need to use this from the swizzled block @@ -35,16 +40,48 @@ */ static SentryTouchTracker *_touchTracker; -@interface -SentrySessionReplayIntegration () +@interface SentrySessionReplayIntegration () + +@property (nonatomic, strong) SentryDispatchQueueWrapper *replayProcessingQueue; +@property (nonatomic, strong) SentryDispatchQueueWrapper *replayAssetWorkerQueue; + - (void)newSceneActivate; + @end @implementation SentrySessionReplayIntegration { BOOL _startedAsFullSession; SentryReplayOptions *_replayOptions; SentryNSNotificationCenterWrapper *_notificationCenter; - SentryOnDemandReplay *_resumeReplayMaker; + id _rateLimits; + id _currentScreenshotProvider; + id _currentBreadcrumbConverter; + SentryMaskingPreviewView *_previewView; + // We need to use this variable to identify whether rate limiting was ever activated for session + // replay in this session, instead of always looking for the rate status in `SentryRateLimits` + // This is the easiest way to ensure segment 0 will always reach the server, because session + // replay absolutely needs segment 0 to make replay work. + BOOL _rateLimited; + id _dateProvider; +} + +- (instancetype)init +{ + self = [super init]; + return self; +} + +- (instancetype)initForManualUse:(nonnull SentryOptions *)options +{ + if (self = [super init]) { + [self setupWith:options.sessionReplay + enableTouchTracker:options.enableSwizzling + enableViewRendererV2:options.sessionReplay.enableViewRendererV2 + enableFastViewRendering:options.sessionReplay.enableFastViewRendering]; + [self startWithOptions:options.sessionReplay fullSession:YES]; + } + return self; } - (BOOL)installWithOptions:(nonnull SentryOptions *)options @@ -53,22 +90,76 @@ - (BOOL)installWithOptions:(nonnull SentryOptions *)options return NO; } - _replayOptions = options.experimental.sessionReplay; + [self setupWith:options.sessionReplay + enableTouchTracker:options.enableSwizzling + enableViewRendererV2:options.sessionReplay.enableViewRendererV2 + enableFastViewRendering:options.sessionReplay.enableFastViewRendering]; + return YES; +} + +- (void)setupWith:(SentryReplayOptions *)replayOptions + enableTouchTracker:(BOOL)touchTracker + enableViewRendererV2:(BOOL)enableViewRendererV2 + enableFastViewRendering:(BOOL)enableFastViewRendering +{ + _replayOptions = replayOptions; + _rateLimits = SentryDependencyContainer.sharedInstance.rateLimits; + _dateProvider = SentryDependencyContainer.sharedInstance.dateProvider; + + id viewRenderer; + if (enableViewRendererV2) { + SENTRY_LOG_DEBUG(@"[Session Replay] Setting up view renderer v2, fast view rendering: %@", + enableFastViewRendering ? @"YES" : @"NO"); + viewRenderer = + [[SentryViewRendererV2 alloc] initWithEnableFastViewRendering:enableFastViewRendering]; + } else { + SENTRY_LOG_DEBUG(@"[Session Replay] Setting up default view renderer"); + viewRenderer = [[SentryDefaultViewRenderer alloc] init]; + } + + // We are using the flag for the view renderer V2 also for the mask renderer V2, as it would + // just introduce another option without affecting the SDK user experience. + _viewPhotographer = [[SentryViewPhotographer alloc] initWithRenderer:viewRenderer + redactOptions:replayOptions + enableMaskRendererV2:enableViewRendererV2]; - if (options.enableSwizzling) { - _touchTracker = [[SentryTouchTracker alloc] - initWithDateProvider:SentryDependencyContainer.sharedInstance.dateProvider - scale:options.experimental.sessionReplay.sizeScale]; + if (touchTracker) { + SENTRY_LOG_DEBUG( + @"[Session Replay] Setting up touch tracker, scale: %f", replayOptions.sizeScale); + _touchTracker = [[SentryTouchTracker alloc] initWithDateProvider:_dateProvider + scale:replayOptions.sizeScale]; [self swizzleApplicationTouch]; } _notificationCenter = SentryDependencyContainer.sharedInstance.notificationCenterWrapper; + _dateProvider = SentryDependencyContainer.sharedInstance.dateProvider; + + // We use the dispatch queue provider as a factory to create the queues, but store the queues + // directly in this instance, so they get deallocated when the integration is deallocated. + id dispatchQueueProvider + = SentryDependencyContainer.sharedInstance.dispatchQueueProvider; + + // The asset worker queue is used to work on video and frames data. + // Use a relative priority of -1 to make it lower than the default background priority. + _replayAssetWorkerQueue = + [dispatchQueueProvider createLowPriorityQueue:"io.sentry.session-replay.asset-worker" + relativePriority:-1]; + // The dispatch queue is used to asynchronously wait for the asset worker queue to finish its + // work. To avoid a deadlock, the priority of the processing queue must be lower than the asset + // worker queue. Use a relative priority of -2 to make it lower than the asset worker queue. + _replayProcessingQueue = + [dispatchQueueProvider createLowPriorityQueue:"io.sentry.session-replay.processing" + relativePriority:-2]; + + // The asset worker queue is used to work on video and frames data. + + [self moveCurrentReplay]; + [self cleanUp]; [SentrySDK.currentHub registerSessionListener:self]; - [SentryGlobalEventProcessor.shared addEventProcessor:^SentryEvent *_Nullable(SentryEvent *_Nonnull event) { - if (event.isCrashEvent) { + if (event.isFatalEvent) { [self resumePreviousSessionReplay:event]; } else { [self.sessionReplay captureReplayForEvent:event]; @@ -77,10 +168,20 @@ - (BOOL)installWithOptions:(nonnull SentryOptions *)options }]; [SentryDependencyContainer.sharedInstance.reachability addObserver:self]; - [SentryViewPhotographer.shared addIgnoreClasses:_replayOptions.ignoreRedactViewTypes]; - [SentryViewPhotographer.shared addRedactClasses:_replayOptions.redactViewTypes]; +} - return YES; +- (nullable NSDictionary *)lastReplayInfo +{ + NSURL *dir = [self replayDirectory]; + NSURL *lastReplayUrl = [dir URLByAppendingPathComponent:SENTRY_LAST_REPLAY]; + NSData *lastReplay = [NSData dataWithContentsOfURL:lastReplayUrl]; + + if (lastReplay == nil) { + SENTRY_LOG_DEBUG(@"[Session Replay] No last replay info found"); + return nil; + } + + return [SentrySerialization deserializeDictionaryFromJsonData:lastReplay]; } /** @@ -91,16 +192,13 @@ - (BOOL)installWithOptions:(nonnull SentryOptions *)options */ - (void)resumePreviousSessionReplay:(SentryEvent *)event { + SENTRY_LOG_DEBUG(@"[Session Replay] Resuming previous session replay"); NSURL *dir = [self replayDirectory]; - NSData *lastReplay = - [NSData dataWithContentsOfURL:[dir URLByAppendingPathComponent:@"lastreplay"]]; - if (lastReplay == nil) { - return; - } + NSDictionary *jsonObject = [self lastReplayInfo]; - NSDictionary *jsonObject = - [SentrySerialization deserializeDictionaryFromJsonData:lastReplay]; if (jsonObject == nil) { + SENTRY_LOG_DEBUG( + @"[Session Replay] No last replay info found, not resuming previous session replay"); return; } @@ -120,37 +218,45 @@ - (void)resumePreviousSessionReplay:(SentryEvent *)event int segmentId = hasCrashInfo ? crashInfo.segmentId + 1 : 0; if (type == SentryReplayTypeBuffer) { + SENTRY_LOG_DEBUG( + @"[Session Replay] Previous session replay is a buffer, using error sample rate"); float errorSampleRate = [jsonObject[@"errorSampleRate"] floatValue]; if ([SentryDependencyContainer.sharedInstance.random nextNumber] >= errorSampleRate) { + SENTRY_LOG_INFO( + @"[Session Replay] Buffer session replay event not sampled, dropping replay"); return; } } SentryOnDemandReplay *resumeReplayMaker = - [[SentryOnDemandReplay alloc] initWithContentFrom:lastReplayURL.path]; + [[SentryOnDemandReplay alloc] initWithContentFrom:lastReplayURL.path + processingQueue:_replayProcessingQueue + assetWorkerQueue:_replayAssetWorkerQueue]; resumeReplayMaker.bitRate = _replayOptions.replayBitRate; resumeReplayMaker.videoScale = _replayOptions.sizeScale; + resumeReplayMaker.frameRate = _replayOptions.frameRate; NSDate *beginning = hasCrashInfo ? [NSDate dateWithTimeIntervalSinceReferenceDate:crashInfo.lastSegmentEnd] : [resumeReplayMaker oldestFrameDate]; - if (beginning == nil) { + SENTRY_LOG_DEBUG(@"[Session Replay] No frames to send, dropping replay"); return; // no frames to send } + NSDate *end = [beginning dateByAddingTimeInterval:duration]; - SentryReplayType _type = type; - int _segmentId = segmentId; - - NSError *error; - NSArray *videos = - [resumeReplayMaker createVideoWithBeginning:beginning - end:[beginning dateByAddingTimeInterval:duration] - error:&error]; + NSArray *videos = [resumeReplayMaker createVideoWithBeginning:beginning + end:end]; if (videos == nil) { - SENTRY_LOG_ERROR(@"Could not create replay video: %@", error); + SENTRY_LOG_ERROR( + @"[Session Replay] Could not create replay video, reason: no videos available"); return; } + SENTRY_LOG_DEBUG(@"[Session Replay] Created replay with %lu video segments", videos.count); + + // For each segment we need to create a new event with the video. + int _segmentId = segmentId; + SentryReplayType _type = type; for (SentryVideoInfo *video in videos) { [self captureVideo:video replayId:replayId segmentId:_segmentId++ type:_type]; // type buffer is only for the first segment @@ -161,6 +267,16 @@ - (void)resumePreviousSessionReplay:(SentryEvent *)event eventContext[@"replay"] = [NSDictionary dictionaryWithObjectsAndKeys:replayId.sentryIdString, @"replay_id", nil]; event.context = eventContext; + + NSError *_Nullable removeError; + BOOL result = [NSFileManager.defaultManager removeItemAtURL:lastReplayURL error:&removeError]; + if (result == NO) { + SENTRY_LOG_ERROR( + @"[Session Replay] Can't delete '%@' with file item at url: '%@', reason: %@", + SENTRY_LAST_REPLAY, lastReplayURL, removeError); + } else { + SENTRY_LOG_DEBUG(@"[Session Replay] Deleted last replay file at path: %@", lastReplayURL); + } } - (void)captureVideo:(SentryVideoInfo *)video @@ -190,39 +306,55 @@ - (void)captureVideo:(SentryVideoInfo *)video - (void)startSession { - [self.sessionReplay stop]; + SENTRY_LOG_DEBUG(@"[Session Replay] Starting session"); + [self.sessionReplay pause]; _startedAsFullSession = [self shouldReplayFullSession:_replayOptions.sessionSampleRate]; if (!_startedAsFullSession && _replayOptions.onErrorSampleRate == 0) { + SENTRY_LOG_DEBUG( + @"[Session Replay] Not full session and onErrorSampleRate is 0, not starting session"); return; } + [self runReplayForAvailableWindow]; +} + +- (void)runReplayForAvailableWindow +{ if (SentryDependencyContainer.sharedInstance.application.windows.count > 0) { + SENTRY_LOG_DEBUG(@"[Session Replay] Running replay for available window"); // If a window its already available start replay right away [self startWithOptions:_replayOptions fullSession:_startedAsFullSession]; - } else { + } else if (@available(iOS 13.0, tvOS 13.0, *)) { + SENTRY_LOG_DEBUG( + @"[Session Replay] Waiting for a scene to be available to started the replay"); // Wait for a scene to be available to started the replay - if (@available(iOS 13.0, tvOS 13.0, *)) { - [_notificationCenter addObserver:self - selector:@selector(newSceneActivate) - name:UISceneDidActivateNotification]; - } + [_notificationCenter addObserver:self + selector:@selector(newSceneActivate) + name:UISceneDidActivateNotification]; } } - (void)newSceneActivate { - [SentryDependencyContainer.sharedInstance.notificationCenterWrapper removeObserver:self]; - [self startWithOptions:_replayOptions fullSession:_startedAsFullSession]; + if (@available(iOS 13.0, tvOS 13.0, *)) { + SENTRY_LOG_DEBUG(@"[Session Replay] Scene is available, starting replay"); + [SentryDependencyContainer.sharedInstance.notificationCenterWrapper + removeObserver:self + name:UISceneDidActivateNotification]; + [self startWithOptions:_replayOptions fullSession:_startedAsFullSession]; + } } - (void)startWithOptions:(SentryReplayOptions *)replayOptions fullSession:(BOOL)shouldReplayFullSession { + SENTRY_LOG_DEBUG(@"[Session Replay] Starting session"); [self startWithOptions:replayOptions - screenshotProvider:SentryViewPhotographer.shared - breadcrumbConverter:[[SentrySRDefaultBreadcrumbConverter alloc] init] + screenshotProvider:_currentScreenshotProvider ?: _viewPhotographer + breadcrumbConverter:_currentBreadcrumbConverter + ?: [[SentrySRDefaultBreadcrumbConverter alloc] init] fullSession:shouldReplayFullSession]; } @@ -231,48 +363,57 @@ - (void)startWithOptions:(SentryReplayOptions *)replayOptions breadcrumbConverter:(id)breadcrumbConverter fullSession:(BOOL)shouldReplayFullSession { + SENTRY_LOG_DEBUG(@"[Session Replay] Starting session"); NSURL *docs = [self replayDirectory]; NSString *currentSession = [NSUUID UUID].UUIDString; docs = [docs URLByAppendingPathComponent:currentSession]; if (![NSFileManager.defaultManager fileExistsAtPath:docs.path]) { + SENTRY_LOG_DEBUG(@"[Session Replay] Creating directory at path: %@", docs.path); [NSFileManager.defaultManager createDirectoryAtURL:docs withIntermediateDirectories:YES attributes:nil error:nil]; } - SentryOnDemandReplay *replayMaker = [[SentryOnDemandReplay alloc] initWithOutputPath:docs.path]; + SentryOnDemandReplay *replayMaker = + [[SentryOnDemandReplay alloc] initWithOutputPath:docs.path + processingQueue:_replayProcessingQueue + assetWorkerQueue:_replayAssetWorkerQueue]; replayMaker.bitRate = replayOptions.replayBitRate; replayMaker.videoScale = replayOptions.sizeScale; - replayMaker.cacheMaxSize - = (NSInteger)(shouldReplayFullSession ? replayOptions.sessionSegmentDuration + 1 - : replayOptions.errorReplayDuration + 1); - - self.sessionReplay = [[SentrySessionReplay alloc] - initWithReplayOptions:replayOptions - replayFolderPath:docs - screenshotProvider:screenshotProvider - replayMaker:replayMaker - breadcrumbConverter:breadcrumbConverter - touchTracker:_touchTracker - dateProvider:SentryDependencyContainer.sharedInstance.dateProvider - delegate:self - dispatchQueue:[[SentryDispatchQueueWrapper alloc] init] - displayLinkWrapper:[[SentryDisplayLinkWrapper alloc] init]]; + replayMaker.frameRate = replayOptions.frameRate; + + // The cache should be at least the amount of frames fitting into the session segment duration + // plus one frame to ensure that the last frame is not dropped. + NSInteger sessionSegmentDuration + = (NSInteger)(shouldReplayFullSession ? replayOptions.sessionSegmentDuration + : replayOptions.errorReplayDuration); + replayMaker.cacheMaxSize = (sessionSegmentDuration * replayOptions.frameRate) + 1; + + SentryDisplayLinkWrapper *displayLinkWrapper = [[SentryDisplayLinkWrapper alloc] init]; + self.sessionReplay = [[SentrySessionReplay alloc] initWithReplayOptions:replayOptions + replayFolderPath:docs + screenshotProvider:screenshotProvider + replayMaker:replayMaker + breadcrumbConverter:breadcrumbConverter + touchTracker:_touchTracker + dateProvider:_dateProvider + delegate:self + displayLinkWrapper:displayLinkWrapper]; [self.sessionReplay startWithRootView:SentryDependencyContainer.sharedInstance.application.windows.firstObject - fullSession:[self shouldReplayFullSession:replayOptions.sessionSampleRate]]; + fullSession:shouldReplayFullSession]; [_notificationCenter addObserver:self - selector:@selector(stop) + selector:@selector(pause) name:UIApplicationDidEnterBackgroundNotification object:nil]; [_notificationCenter addObserver:self selector:@selector(resume) - name:UIApplicationWillEnterForegroundNotification + name:UIApplicationDidBecomeActiveNotification object:nil]; [self saveCurrentSessionInfo:self.sessionReplay.sessionReplayId @@ -282,8 +423,8 @@ - (void)startWithOptions:(SentryReplayOptions *)replayOptions - (NSURL *)replayDirectory { - NSURL *dir = - [NSURL fileURLWithPath:[SentryDependencyContainer.sharedInstance.fileManager sentryPath]]; + NSString *sentryPath = [SentryDependencyContainer.sharedInstance.fileManager sentryPath]; + NSURL *dir = [NSURL fileURLWithPath:sentryPath]; return [dir URLByAppendingPathComponent:SENTRY_REPLAY_FOLDER]; } @@ -291,36 +432,143 @@ - (void)saveCurrentSessionInfo:(SentryId *)sessionId path:(NSString *)path options:(SentryReplayOptions *)options { - NSDictionary *info = [[NSDictionary alloc] - initWithObjectsAndKeys:sessionId.sentryIdString, @"replayId", path.lastPathComponent, - @"path", @(options.onErrorSampleRate), @"errorSampleRate", nil]; + SENTRY_LOG_DEBUG(@"[Session Replay] Saving current session info for session: %@ to path: %@", + sessionId, path); + NSDictionary *info = + [[NSDictionary alloc] initWithObjectsAndKeys:sessionId.sentryIdString, @"replayId", + path.lastPathComponent, @"path", @(options.onErrorSampleRate), @"errorSampleRate", nil]; NSData *data = [SentrySerialization dataWithJSONObject:info]; - NSString *infoPath = - [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"lastreplay"]; + NSString *infoPath = [[path stringByDeletingLastPathComponent] + stringByAppendingPathComponent:SENTRY_CURRENT_REPLAY]; if ([NSFileManager.defaultManager fileExistsAtPath:infoPath]) { + SENTRY_LOG_DEBUG( + @"[Session Replay] Removing existing current replay info at path: %@", infoPath); [NSFileManager.defaultManager removeItemAtPath:infoPath error:nil]; } [data writeToFile:infoPath atomically:YES]; + SENTRY_LOG_DEBUG(@"[Session Replay] Saved current session info at path: %@", infoPath); sentrySessionReplaySync_start([[path stringByAppendingPathComponent:@"crashInfo"] cStringUsingEncoding:NSUTF8StringEncoding]); } -- (void)stop +- (void)moveCurrentReplay { - [self.sessionReplay stop]; + SENTRY_LOG_DEBUG(@"[Session Replay] Moving current replay"); + NSFileManager *fileManager = NSFileManager.defaultManager; + + NSURL *path = [self replayDirectory]; + NSURL *current = [path URLByAppendingPathComponent:SENTRY_CURRENT_REPLAY]; + NSURL *last = [path URLByAppendingPathComponent:SENTRY_LAST_REPLAY]; + + NSError *error; + if ([fileManager fileExistsAtPath:last.path]) { + SENTRY_LOG_DEBUG(@"[Session Replay] Removing last replay file at path: %@", last); + if ([NSFileManager.defaultManager removeItemAtURL:last error:&error] == NO) { + SENTRY_LOG_ERROR( + @"[Session Replay] Could not delete last replay file, reason: %@", error); + return; + } + SENTRY_LOG_DEBUG(@"[Session Replay] Removed last replay file at path: %@", last); + } else { + SENTRY_LOG_DEBUG(@"[Session Replay] No last replay file to remove at path: %@", last); + } + + if ([fileManager fileExistsAtPath:current.path]) { + SENTRY_LOG_DEBUG( + @"[Session Replay] Moving current replay file at path: %@ to: %@", current, last); + if ([fileManager moveItemAtURL:current toURL:last error:&error] == NO) { + SENTRY_LOG_ERROR(@"[Session Replay] Could not move replay file, reason: %@", error); + return; + } + SENTRY_LOG_DEBUG(@"[Session Replay] Moved current replay file at path: %@", current); + } else { + SENTRY_LOG_DEBUG(@"[Session Replay] No current replay file to move at path: %@", current); + } +} + +- (void)cleanUp +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Cleaning up"); + NSURL *replayDir = [self replayDirectory]; + NSDictionary *lastReplayInfo = [self lastReplayInfo]; + NSString *lastReplayFolder = lastReplayInfo[@"path"]; + + SentryFileManager *fileManager = SentryDependencyContainer.sharedInstance.fileManager; + // Mapping replay folder here and not in dispatched queue to prevent a race condition between + // listing files and creating a new replay session. + NSArray *replayFiles = [fileManager allFilesInFolder:replayDir.path]; + if (replayFiles.count == 0) { + SENTRY_LOG_DEBUG(@"[Session Replay] No replay files to clean up"); + return; + } + + [SentryDependencyContainer.sharedInstance.dispatchQueueWrapper dispatchAsyncWithBlock:^{ + for (NSString *file in replayFiles) { + // Skip the last replay folder. + if ([file isEqualToString:lastReplayFolder]) { + SENTRY_LOG_DEBUG(@"[Session Replay] Skipping last replay folder: %@", file); + continue; + } + + NSString *filePath = [replayDir.path stringByAppendingPathComponent:file]; + + // Check if the file is a directory before deleting it. + if ([fileManager isDirectory:filePath]) { + SENTRY_LOG_DEBUG( + @"[Session Replay] Removing replay directory at path: %@", filePath); + [fileManager removeFileAtPath:filePath]; + } + } + }]; +} + +- (void)pause +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Pausing session"); + [self.sessionReplay pause]; } - (void)resume { + SENTRY_LOG_DEBUG(@"[Session Replay] Resuming session"); [self.sessionReplay resume]; } +- (void)start +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Starting session"); + if (_rateLimited) { + SENTRY_LOG_WARN(@"[Session Replay] This session was rate limited. Not starting session " + @"replay until next app session"); + return; + } + + if (self.sessionReplay != nil) { + if (self.sessionReplay.isFullSession == NO) { + SENTRY_LOG_DEBUG(@"[Session Replay] Not full session, capturing replay"); + [self.sessionReplay captureReplay]; + } + return; + } + + _startedAsFullSession = YES; + [self runReplayForAvailableWindow]; +} + +- (void)stop +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Stopping session"); + [self.sessionReplay pause]; + self.sessionReplay = nil; +} + - (void)sentrySessionEnded:(SentrySession *)session { - [self stop]; + SENTRY_LOG_DEBUG(@"[Session Replay] Session ended"); + [self pause]; [_notificationCenter removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; @@ -332,26 +580,38 @@ - (void)sentrySessionEnded:(SentrySession *)session - (void)sentrySessionStarted:(SentrySession *)session { + SENTRY_LOG_DEBUG(@"[Session Replay] Session started"); + _rateLimited = NO; [self startSession]; } - (BOOL)captureReplay { + SENTRY_LOG_DEBUG(@"[Session Replay] Capturing replay"); return [self.sessionReplay captureReplay]; } - (void)configureReplayWith:(nullable id)breadcrumbConverter screenshotProvider:(nullable id)screenshotProvider { + SENTRY_LOG_DEBUG(@"[Session Replay] Configuring replay"); if (breadcrumbConverter) { + _currentBreadcrumbConverter = breadcrumbConverter; self.sessionReplay.breadcrumbConverter = breadcrumbConverter; } if (screenshotProvider) { + _currentScreenshotProvider = screenshotProvider; self.sessionReplay.screenshotProvider = screenshotProvider; } } +- (void)setReplayTags:(NSDictionary *)tags +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Setting replay tags: %@", tags); + self.sessionReplay.replayTags = [tags copy]; +} + - (SentryIntegrationOption)integrationOptions { return kIntegrationOptionEnableReplay; @@ -359,9 +619,10 @@ - (SentryIntegrationOption)integrationOptions - (void)uninstall { + SENTRY_LOG_DEBUG(@"[Session Replay] Uninstalling"); [SentrySDK.currentHub unregisterSessionListener:self]; _touchTracker = nil; - [self stop]; + [self pause]; } - (void)dealloc @@ -376,6 +637,7 @@ - (BOOL)shouldReplayFullSession:(CGFloat)rate - (void)swizzleApplicationTouch { + SENTRY_LOG_DEBUG(@"[Session Replay] Swizzling application touch tracker"); # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wshadow" SEL selector = NSSelectorFromString(@"sendEvent:"); @@ -388,7 +650,7 @@ - (void)swizzleApplicationTouch # pragma clang diagnostic pop } -# if TEST || TESTCI +# if SENTRY_TEST || SENTRY_TEST_CI - (SentryTouchTracker *)getTouchTracker { return _touchTracker; @@ -401,6 +663,9 @@ - (SentryTouchTracker *)getTouchTracker level:(enum SentryLevel)level data:(nullable NSDictionary *)data { + SENTRY_LOG_DEBUG(@"[Session Replay] Creating breadcrumb with timestamp: %@, category: %@, " + @"message: %@, level: %lu, data: %@", + timestamp, category, message, level, data); return [[SentryRRWebBreadcrumbEvent alloc] initWithTimestamp:timestamp category:category message:message @@ -414,6 +679,9 @@ - (SentryTouchTracker *)getTouchTracker description:(NSString *)description data:(NSDictionary *)data { + SENTRY_LOG_DEBUG(@"[Session Replay] Creating network breadcrumb with timestamp: %@, " + @"endTimestamp: %@, operation: %@, description: %@, data: %@", + timestamp, endTimestamp, operation, description, data); return [[SentryRRWebSpanEvent alloc] initWithTimestamp:timestamp endTimestamp:endTimestamp operation:operation @@ -423,6 +691,7 @@ - (SentryTouchTracker *)getTouchTracker + (id)createDefaultBreadcrumbConverter { + SENTRY_LOG_DEBUG(@"[Session Replay] Creating default breadcrumb converter"); return [[SentrySRDefaultBreadcrumbConverter alloc] init]; } @@ -438,6 +707,17 @@ - (void)sessionReplayNewSegmentWithReplayEvent:(SentryReplayEvent *)replayEvent replayRecording:(SentryReplayRecording *)replayRecording videoUrl:(NSURL *)videoUrl { + SENTRY_LOG_DEBUG(@"[Session Replay] New segment with replay event, eventId: %@, segmentId: %lu", + replayEvent.eventId, replayEvent.segmentId); + if ([_rateLimits isRateLimitActive:kSentryDataCategoryReplay] || + [_rateLimits isRateLimitActive:kSentryDataCategoryAll]) { + SENTRY_LOG_DEBUG( + @"Rate limiting is active for replays. Stopping session replay until next session."); + _rateLimited = YES; + [self stop]; + return; + } + [SentrySDK.currentHub captureReplayEvent:replayEvent replayRecording:replayRecording video:videoUrl]; @@ -448,6 +728,7 @@ - (void)sessionReplayNewSegmentWithReplayEvent:(SentryReplayEvent *)replayEvent - (void)sessionReplayStartedWithReplayId:(SentryId *)replayId { + SENTRY_LOG_DEBUG(@"[Session Replay] Session replay started with replay id: %@", replayId); [SentrySDK.currentHub configureScope:^( SentryScope *_Nonnull scope) { scope.replayId = [replayId sentryIdString]; }]; } @@ -467,15 +748,46 @@ - (nullable NSString *)currentScreenNameForSessionReplay .firstObject; } +- (void)showMaskPreview:(CGFloat)opacity +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Showing mask preview with opacity: %f", opacity); + if ([SentryDependencyContainer.sharedInstance.crashWrapper isBeingTraced] == NO) { + SENTRY_LOG_DEBUG(@"[Session Replay] No tracing is active, not showing mask preview"); + return; + } + + UIWindow *window = SentryDependencyContainer.sharedInstance.application.windows.firstObject; + if (window == nil) { + SENTRY_LOG_WARN(@"[Session Replay] No UIWindow available to display preview"); + return; + } + + if (_previewView == nil) { + _previewView = [[SentryMaskingPreviewView alloc] initWithRedactOptions:_replayOptions]; + } + + _previewView.opacity = opacity; + [_previewView setFrame:window.bounds]; + [window addSubview:_previewView]; +} + +- (void)hideMaskPreview +{ + SENTRY_LOG_DEBUG(@"[Session Replay] Hiding mask preview"); + [_previewView removeFromSuperview]; + _previewView = nil; +} + # pragma mark - SentryReachabilityObserver - (void)connectivityChanged:(BOOL)connected typeDescription:(nonnull NSString *)typeDescription { - + SENTRY_LOG_DEBUG(@"[Session Replay] Connectivity changed to: %@, type: %@", + connected ? @"connected" : @"disconnected", typeDescription); if (connected) { [_sessionReplay resume]; } else { - [_sessionReplay pause]; + [_sessionReplay pauseSessionMode]; } } diff --git a/Pods/Sentry/Sources/Sentry/SentrySessionReplaySyncC.c b/Pods/Sentry/Sources/Sentry/SentrySessionReplaySyncC.c index 952a38f3b..d607aef49 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySessionReplaySyncC.c +++ b/Pods/Sentry/Sources/Sentry/SentrySessionReplaySyncC.c @@ -14,6 +14,7 @@ static SentryCrashReplay crashReplay = { 0 }; void sentrySessionReplaySync_start(const char *const path) { + SENTRY_ASYNC_SAFE_LOG_DEBUG("[Session Replay] Starting session replay with path: %s", path); crashReplay.lastSegmentEnd = 0; crashReplay.segmentId = 0; @@ -21,13 +22,24 @@ sentrySessionReplaySync_start(const char *const path) free(crashReplay.path); } - crashReplay.path = malloc(strlen(path)); - strcpy(crashReplay.path, path); + size_t buffer_size = sizeof(char) * (strlen(path) + 1); // Add a byte for the null-terminator. + crashReplay.path = malloc(buffer_size); + + if (crashReplay.path == NULL) { + SENTRY_ASYNC_SAFE_LOG_ERROR( + "Failed to allocate memory for crash replay path. File path: %s", path); + return; + } + + strlcpy(crashReplay.path, path, buffer_size); } void sentrySessionReplaySync_updateInfo(unsigned int segmentId, double lastSegmentEnd) { + SENTRY_ASYNC_SAFE_LOG_DEBUG( + "[Session Replay] Updating session info with segmentId: %u, lastSegmentEnd: %f", segmentId, + lastSegmentEnd); crashReplay.segmentId = segmentId; crashReplay.lastSegmentEnd = lastSegmentEnd; } @@ -35,6 +47,12 @@ sentrySessionReplaySync_updateInfo(unsigned int segmentId, double lastSegmentEnd void sentrySessionReplaySync_writeInfo(void) { + SENTRY_ASYNC_SAFE_LOG_DEBUG("[Session Replay] Writing session info"); + if (crashReplay.path == NULL) { + SENTRY_ASYNC_SAFE_LOG_ERROR("There is no path to write replay information"); + return; + } + int fd = open(crashReplay.path, O_RDWR | O_CREAT | O_TRUNC, 0644); if (fd < 1) { @@ -63,6 +81,7 @@ sentrySessionReplaySync_writeInfo(void) bool sentrySessionReplaySync_readInfo(SentryCrashReplay *output, const char *const path) { + SENTRY_ASYNC_SAFE_LOG_DEBUG("[Session Replay] Reading session info from path: %s", path); int fd = open(path, O_RDONLY); if (fd < 0) { SENTRY_ASYNC_SAFE_LOG_ERROR( diff --git a/Pods/Sentry/Sources/Sentry/SentrySessionTracker.m b/Pods/Sentry/Sources/Sentry/SentrySessionTracker.m index 3e8e12da5..daadf4355 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySessionTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentrySessionTracker.m @@ -7,16 +7,20 @@ #import "SentryInternalNotificationNames.h" #import "SentryLog.h" #import "SentryNSNotificationCenterWrapper.h" -#import "SentryOptions.h" +#import "SentryOptions+Private.h" #import "SentrySDK+Private.h" #import "SentrySwift.h" +#import "SentryProfilingConditionals.h" +#if SENTRY_TARGET_PROFILING_SUPPORTED +# import "SentryProfiler+Private.h" +#endif // SENTRY_TARGET_PROFILING_SUPPORTED + #if SENTRY_TARGET_MACOS_HAS_UI # import #endif -@interface -SentrySessionTracker () +@interface SentrySessionTracker () @property (nonatomic, strong) SentryOptions *options; @property (atomic, strong) NSDate *lastInForeground; @@ -175,6 +179,12 @@ - (void)didBecomeActive } [[[hub getClient] fileManager] deleteTimestampLastInForeground]; self.lastInForeground = nil; + +#if SENTRY_TARGET_PROFILING_SUPPORTED + if (hub.client.options.profiling != nil) { + sentry_reevaluateSessionSampleRate(hub.client.options.profiling.sessionSampleRate); + } +#endif // SENTRY_TARGET_PROFILING_SUPPORTED } /** diff --git a/Pods/Sentry/Sources/Sentry/SentrySpan.m b/Pods/Sentry/Sources/Sentry/SentrySpan.m index f946cd7f2..bb79ae85b 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySpan.m +++ b/Pods/Sentry/Sources/Sentry/SentrySpan.m @@ -16,7 +16,7 @@ #import "SentryTime.h" #import "SentryTraceContext.h" #import "SentryTraceHeader.h" -#import "SentryTracer.h" +#import "SentryTracer+Private.h" #if SENTRY_HAS_UIKIT # import @@ -33,8 +33,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentrySpan () +@interface SentrySpan () @end @implementation SentrySpan { @@ -43,7 +42,6 @@ @implementation SentrySpan { NSObject *_stateLock; BOOL _isFinished; uint64_t _startSystemTime; - LocalMetricsAggregator *localMetricsAggregator; #if SENTRY_HAS_UIKIT NSUInteger initTotalFrames; NSUInteger initSlowFrames; @@ -112,6 +110,13 @@ - (instancetype)initWithContext:(SentrySpanContext *)context } #endif // SENTRY_TARGET_PROFILING_SUPPORTED } + + if (context.parentSpanId == nil) { + SENTRY_LOG_DEBUG(@"Started root span with id %@", context.spanId.sentrySpanIdString); + } else { + SENTRY_LOG_DEBUG(@"Started span with id %@; parent id %@", + context.spanId.sentrySpanIdString, context.parentSpanId.sentrySpanIdString); + } return self; } @@ -149,6 +154,14 @@ - (instancetype)initWithTracer:(SentryTracer *)tracer #endif // SENTRY_HAS_UIKIT _tracer = tracer; + + if (context.parentSpanId == nil) { + SENTRY_LOG_DEBUG(@"Starting root span with tracer with profilerReferenceId %@", + tracer.profilerReferenceID.sentryIdString); + } else { + SENTRY_LOG_DEBUG(@"Starting span with tracer with profilerReferenceId %@", + tracer.profilerReferenceID.sentryIdString); + } } return self; } @@ -258,7 +271,6 @@ - (void)finishWithStatus:(SentrySpanStatus)status #if SENTRY_HAS_UIKIT if (_framesTracker.isRunning) { - CFTimeInterval framesDelay = [_framesTracker getFramesDelay:_startSystemTime endSystemTimestamp:SentryDependencyContainer.sharedInstance.dateProvider.systemTime] @@ -290,6 +302,10 @@ - (void)finishWithStatus:(SentrySpanStatus)status @"No tracer associated with span with id %@", self.spanId.sentrySpanIdString); return; } + + SENTRY_LOG_DEBUG(@"Marking span %@ as finished in tracer %@ (profileReferenceId %@)", + _spanId.sentrySpanIdString, _tracer.traceId.sentryIdString, + _tracer.profilerReferenceID.sentryIdString); [self.tracer spanFinished:self]; } @@ -311,14 +327,6 @@ - (nullable SentryTraceContext *)traceContext return self.tracer.traceContext; } -- (LocalMetricsAggregator *)getLocalMetricsAggregator -{ - if (localMetricsAggregator == nil) { - localMetricsAggregator = [[LocalMetricsAggregator alloc] init]; - } - return localMetricsAggregator; -} - - (NSDictionary *)serialize { NSMutableDictionary *mutableDictionary = @{ @@ -359,10 +367,6 @@ - (NSDictionary *)serialize [mutableDictionary setValue:@(self.startTimestamp.timeIntervalSince1970) forKey:@"start_timestamp"]; - if (localMetricsAggregator != nil) { - mutableDictionary[@"_metrics_summary"] = [localMetricsAggregator serialize]; - } - @synchronized(_data) { NSMutableDictionary *data = _data.mutableCopy; diff --git a/Pods/Sentry/Sources/Sentry/SentrySpanContext.m b/Pods/Sentry/Sources/Sentry/SentrySpanContext.m index 22add1462..689ae6bb3 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySpanContext.m +++ b/Pods/Sentry/Sources/Sentry/SentrySpanContext.m @@ -3,7 +3,7 @@ #import "SentrySampleDecision+Private.h" #import "SentrySpanId.h" #import "SentrySwift.h" -#import "SentryTraceOrigins.h" +#import "SentryTraceOrigin.h" NS_ASSUME_NONNULL_BEGIN @@ -87,10 +87,16 @@ - (instancetype)initWithTraceId:(SentryId *)traceId _spanDescription = description; _origin = origin; - SENTRY_LOG_DEBUG( - @"Created span context with trace ID %@; span ID %@; parent span ID %@; operation %@", - traceId.sentryIdString, spanId.sentrySpanIdString, parentId.sentrySpanIdString, - operation); + if (parentId == nil) { + SENTRY_LOG_DEBUG( + @"Created root span context with trace ID %@; span ID %@; operation %@", + traceId.sentryIdString, spanId.sentrySpanIdString, operation); + } else { + SENTRY_LOG_DEBUG(@"Created span context with trace ID %@; span ID %@; parent span ID " + @"%@; operation %@", + traceId.sentryIdString, spanId.sentrySpanIdString, parentId.sentrySpanIdString, + operation); + } } return self; } diff --git a/Pods/Sentry/Sources/Sentry/SentrySpanDataKey.m b/Pods/Sentry/Sources/Sentry/SentrySpanDataKey.m new file mode 100644 index 000000000..925268970 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentrySpanDataKey.m @@ -0,0 +1,4 @@ +#import + +NSString *const SentrySpanDataKeyFileSize = @"file.size"; +NSString *const SentrySpanDataKeyFilePath = @"file.path"; diff --git a/Pods/Sentry/Sources/Sentry/SentrySpanId.m b/Pods/Sentry/Sources/Sentry/SentrySpanId.m index a31d83400..d40b8e334 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySpanId.m +++ b/Pods/Sentry/Sources/Sentry/SentrySpanId.m @@ -4,8 +4,7 @@ static NSString *const emptyUUIDString = @"0000000000000000"; -@interface -SentrySpanId () +@interface SentrySpanId () @property (nonatomic, strong) NSString *value; diff --git a/Pods/Sentry/Sources/Sentry/SentrySpanOperation.m b/Pods/Sentry/Sources/Sentry/SentrySpanOperation.m new file mode 100644 index 000000000..f05fe1685 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentrySpanOperation.m @@ -0,0 +1,20 @@ +#import + +NSString *const SentrySpanOperationAppLifecycle = @"app.lifecycle"; + +NSString *const SentrySpanOperationCoredataFetchOperation = @"db.sql.query"; +NSString *const SentrySpanOperationCoredataSaveOperation = @"db.sql.transaction"; + +NSString *const SentrySpanOperationFileRead = @"file.read"; +NSString *const SentrySpanOperationFileWrite = @"file.write"; +NSString *const SentrySpanOperationFileCopy = @"file.copy"; +NSString *const SentrySpanOperationFileRename = @"file.rename"; +NSString *const SentrySpanOperationFileDelete = @"file.delete"; + +NSString *const SentrySpanOperationNetworkRequestOperation = @"http.client"; + +NSString *const SentrySpanOperationUiAction = @"ui.action"; +NSString *const SentrySpanOperationUiActionClick = @"ui.action.click"; +NSString *const SentrySpanOperationUiLoad = @"ui.load"; +NSString *const SentrySpanOperationUiLoadInitialDisplay = @"ui.load.initial_display"; +NSString *const SentrySpanOperationUiLoadFullDisplay = @"ui.load.full_display"; diff --git a/Pods/Sentry/Sources/Sentry/SentrySpotlightTransport.m b/Pods/Sentry/Sources/Sentry/SentrySpotlightTransport.m index 303ef5a83..fc2aacc6f 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySpotlightTransport.m +++ b/Pods/Sentry/Sources/Sentry/SentrySpotlightTransport.m @@ -12,8 +12,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentrySpotlightTransport () +@interface SentrySpotlightTransport () @property (nonatomic, strong) id requestManager; @property (nonatomic, strong) SentryNSURLRequestBuilder *requestBuilder; @@ -71,8 +70,10 @@ - (void)sendEnvelope:(SentryEnvelope *)envelope url:self.apiURL didFailWithError:&requestError]; - if (requestError) { - SENTRY_LOG_ERROR(@"Unable to build envelope request with error %@", requestError); + if (nil == request || nil != requestError) { + if (nil != requestError) { + SENTRY_LOG_ERROR(@"Unable to build envelope request with error %@", requestError); + } return; } @@ -85,6 +86,11 @@ - (void)sendEnvelope:(SentryEnvelope *)envelope }]; } +- (void)storeEnvelope:(SentryEnvelope *)envelope +{ + [self sendEnvelope:envelope]; +} + - (SentryFlushResult)flush:(NSTimeInterval)timeout { // Empty on purpose @@ -103,13 +109,13 @@ - (void)recordLostEvent:(SentryDataCategory)category // Empty on purpose } -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) - (void)setStartFlushCallback:(nonnull void (^)(void))callback { // Empty on purpose } -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) @end diff --git a/Pods/Sentry/Sources/Sentry/SentryStacktraceBuilder.m b/Pods/Sentry/Sources/Sentry/SentryStacktraceBuilder.m index 1ff894038..ae4ef91a8 100644 --- a/Pods/Sentry/Sources/Sentry/SentryStacktraceBuilder.m +++ b/Pods/Sentry/Sources/Sentry/SentryStacktraceBuilder.m @@ -12,8 +12,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryStacktraceBuilder () +@interface SentryStacktraceBuilder () @property (nonatomic, strong) SentryCrashStackEntryMapper *crashStackEntryMapper; diff --git a/Pods/Sentry/Sources/Sentry/SentryStatsdClient.m b/Pods/Sentry/Sources/Sentry/SentryStatsdClient.m deleted file mode 100644 index c6b9832b6..000000000 --- a/Pods/Sentry/Sources/Sentry/SentryStatsdClient.m +++ /dev/null @@ -1,52 +0,0 @@ -#import "SentryStatsdClient.h" -#import "SentryClient+Private.h" -#import "SentryEnvelope.h" -#import "SentryEnvelopeItemHeader.h" -#import "SentryEnvelopeItemType.h" -#import "SentrySwift.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface -SentryStatsdClient () - -@property (nonatomic, strong) SentryClient *client; - -@end - -@implementation SentryStatsdClient - -- (instancetype)initWithClient:(SentryClient *)client -{ - if (self = [super init]) { - self.client = client; - } - - return self; -} - -- (void)captureStatsdEncodedData:(NSData *)statsdEncodedData -{ - if (statsdEncodedData.length == 0) { - return; - } - - SentryEnvelopeItemHeader *header = - [[SentryEnvelopeItemHeader alloc] initWithType:SentryEnvelopeItemTypeStatsd - length:statsdEncodedData.length - contentType:@"application/octet-stream"]; - - SentryEnvelopeItem *item = [[SentryEnvelopeItem alloc] initWithHeader:header - data:statsdEncodedData]; - - SentryEnvelopeHeader *envelopeHeader = - [[SentryEnvelopeHeader alloc] initWithId:[[SentryId alloc] init]]; - NSArray *items = @[ item ]; - SentryEnvelope *envelope = [[SentryEnvelope alloc] initWithHeader:envelopeHeader items:items]; - - [self.client captureEnvelope:envelope]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/SentrySubClassFinder.m b/Pods/Sentry/Sources/Sentry/SentrySubClassFinder.m index 6dbb5a15f..261d7596b 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySubClassFinder.m +++ b/Pods/Sentry/Sources/Sentry/SentrySubClassFinder.m @@ -2,6 +2,7 @@ #import "SentryDispatchQueueWrapper.h" #import "SentryLog.h" #import "SentryObjCRuntimeWrapper.h" +#import "SentrySwift.h" #import #import @@ -9,8 +10,7 @@ # import #endif // SENTRY_HAS_UIKIT -@interface -SentrySubClassFinder () +@interface SentrySubClassFinder () @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueue; @property (nonatomic, strong) id objcRuntimeWrapper; @@ -36,6 +36,8 @@ - (instancetype)initWithDispatchQueue:(SentryDispatchQueueWrapper *)dispatchQueu - (void)actOnSubclassesOfViewControllerInImage:(NSString *)imageName block:(void (^)(Class))block; { [self.dispatchQueue dispatchAsyncWithBlock:^{ + SENTRY_LOG_DEBUG(@"ActOnSubclassesOfViewControllerInImage: %@", imageName); + Class viewControllerClass = [UIViewController class]; if (viewControllerClass == nil) { SENTRY_LOG_DEBUG(@"UIViewController class not found."); @@ -47,6 +49,8 @@ - (void)actOnSubclassesOfViewControllerInImage:(NSString *)imageName block:(void copyClassNamesForImage:[imageName cStringUsingEncoding:NSUTF8StringEncoding] amount:&count]; + SENTRY_LOG_DEBUG(@"Found %u number of classes in image: %@.", count, imageName); + // Storing the actual classes in an NSArray would call initializer of the class, which we // must avoid as we are on a background thread here and dealing with UIViewControllers, // which assume they are running on the main thread. Therefore, we store the class name @@ -62,13 +66,9 @@ - (void)actOnSubclassesOfViewControllerInImage:(NSString *)imageName block:(void for (int i = 0; i < count; i++) { NSString *className = [NSString stringWithUTF8String:classes[i]]; - BOOL shouldExcludeClassFromSwizzling = NO; - for (NSString *swizzleClassNameExclude in self.swizzleClassNameExcludes) { - if ([className containsString:swizzleClassNameExclude]) { - shouldExcludeClassFromSwizzling = YES; - break; - } - } + BOOL shouldExcludeClassFromSwizzling = [SentrySwizzleClassNameExclude + shouldExcludeClassWithClassName:className + swizzleClassNameExcludes:self.swizzleClassNameExcludes]; // It is vital to avoid calling NSClassFromString for the excluded classes because we // had crashes for specific classes when calling NSClassFromString, such as @@ -89,11 +89,9 @@ - (void)actOnSubclassesOfViewControllerInImage:(NSString *)imageName block:(void block(NSClassFromString(className)); } - [SentryLog - logWithMessage:[NSString stringWithFormat:@"The following UIViewControllers will " - @"generate automatic transactions: %@", - [classesToSwizzle componentsJoinedByString:@", "]] - andLevel:kSentryLevelDebug]; + SENTRY_LOG_DEBUG(@"The following UIViewControllers for image: %@ will generate " + @"automatic transactions: %@", + imageName, [classesToSwizzle componentsJoinedByString:@", "]); }]; }]; } diff --git a/Pods/Sentry/Sources/Sentry/SentrySwizzle.m b/Pods/Sentry/Sources/Sentry/SentrySwizzle.m index 516492a34..78f971b2d 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySwizzle.m +++ b/Pods/Sentry/Sources/Sentry/SentrySwizzle.m @@ -1,4 +1,5 @@ #import "SentrySwizzle.h" +#import "SentryLog.h" #import #include @@ -9,8 +10,7 @@ typedef IMP (^SentrySwizzleImpProvider)(void); -@interface -SentrySwizzleInfo () +@interface SentrySwizzleInfo () @property (nonatomic, copy) SentrySwizzleImpProvider impProviderBlock; @property (nonatomic, readwrite) SEL selector; @end @@ -21,15 +21,15 @@ - (SentrySwizzleOriginalIMP)getOriginalImplementation { NSAssert(_impProviderBlock, @"_impProviderBlock can't be missing"); if (!_impProviderBlock) { - NSLog(@"_impProviderBlock can't be missing"); + SENTRY_LOG_ERROR(@"_impProviderBlock can't be missing"); return NULL; } -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) @synchronized(self) { self.originalCalled = YES; } -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) // Casting IMP to SentrySwizzleOriginalIMP to force user casting. return (SentrySwizzleOriginalIMP)_impProviderBlock(); @@ -41,8 +41,97 @@ - (SentrySwizzleOriginalIMP)getOriginalImplementation @implementation SentrySwizzle +// This lock is shared by all swizzling and unswizzling calls to ensure that +// only one thread is modifying the class at a time. +static pthread_mutex_t gLock = PTHREAD_MUTEX_INITIALIZER; + +#if SENTRY_TEST || SENTRY_TEST_CI +/** + * - Returns: a dictionary that maps keys to the references to the original implementations. + */ +static NSMutableDictionary * +refsToOriginalImplementationsDictionary(void) +{ + static NSMutableDictionary *refsToOriginalImplementations; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ refsToOriginalImplementations = [NSMutableDictionary new]; }); + return refsToOriginalImplementations; +} + +/** + * Adds a reference to the original implementation to the dictionary. + * + * If the key is NULL, it will log an error and NOT store the reference. + * + * - Parameter key: The key for which to store the reference to the original implementation. + * - Parameter implementation: Reference to the original implementation to store. + */ +static void +storeRefToOriginalImplementation(const void *key, IMP implementation) +{ + NSCAssert(key != NULL, @"Key may not be NULL."); + if (key == NULL) { + SENTRY_LOG_ERROR(@"Key may not be NULL."); + return; + } + NSMutableDictionary *refsToOriginalImplementations + = refsToOriginalImplementationsDictionary(); + NSValue *keyValue = [NSValue valueWithPointer:key]; + refsToOriginalImplementations[keyValue] = [NSValue valueWithPointer:implementation]; +} + +/** + * Removes a reference to the original implementation from the dictionary. + * + * If the key is NULL, it will log an error and do nothing. + * + * - Parameter key: The key for which to remove the reference to the original implementation. + */ +static void +removeRefToOriginalImplementation(const void *key) +{ + NSCAssert(key != NULL, @"Key may not be NULL."); + if (key == NULL) { + SENTRY_LOG_ERROR(@"Key may not be NULL."); + return; + } + NSMutableDictionary *refsToOriginalImplementations + = refsToOriginalImplementationsDictionary(); + NSValue *keyValue = [NSValue valueWithPointer:key]; + [refsToOriginalImplementations removeObjectForKey:keyValue]; +} + +/** + * Returns the original implementation for the given key. + * + * If the key is NULL, it will log an error and return NULL. + * If no original implementation is found, it will return NULL. + * + * - Parameter key: The key for which to get the original implementation. + * - Returns: The original implementation for the given key. + */ +static IMP +getRefToOriginalImplementation(const void *key) +{ + NSCAssert(key != NULL, @"Key may not be NULL."); + if (key == NULL) { + SENTRY_LOG_ERROR(@"Key may not be NULL."); + return NULL; + } + NSMutableDictionary *refsToOriginalImplementations + = refsToOriginalImplementationsDictionary(); + NSValue *keyValue = [NSValue valueWithPointer:key]; + NSValue *originalImplementationValue = [refsToOriginalImplementations objectForKey:keyValue]; + if (originalImplementationValue == nil) { + return NULL; + } + return (IMP)[originalImplementationValue pointerValue]; +} +#endif // SENTRY_TEST || SENTRY_TEST_CI + static void -swizzle(Class classToSwizzle, SEL selector, SentrySwizzleImpFactoryBlock factoryBlock) +swizzle( + Class classToSwizzle, SEL selector, SentrySwizzleImpFactoryBlock factoryBlock, const void *key) { Method method = class_getInstanceMethod(classToSwizzle, selector); @@ -50,8 +139,6 @@ @implementation SentrySwizzle NSStringFromSelector(selector), class_isMetaClass(classToSwizzle) ? @"class" : @"instance", classToSwizzle); - static pthread_mutex_t gLock = PTHREAD_MUTEX_INITIALIZER; - // To keep things thread-safe, we fill in the originalIMP later, // with the result of the class_replaceMethod call below. __block IMP originalIMP = NULL; @@ -107,10 +194,50 @@ @implementation SentrySwizzle pthread_mutex_lock(&gLock); originalIMP = class_replaceMethod(classToSwizzle, selector, newIMP, methodType); +#if SENTRY_TEST || SENTRY_TEST_CI + if (originalIMP) { + if (key != NULL) { + storeRefToOriginalImplementation(key, originalIMP); + } else { + SENTRY_LOG_WARN( + @"Swizzling without a key is not recommended, because they can not be unswizzled."); + } + } +#endif // SENTRY_TEST || SENTRY_TEST_CI pthread_mutex_unlock(&gLock); } +#if SENTRY_TEST || SENTRY_TEST_CI +static void +unswizzle(Class classToUnswizzle, SEL selector, const void *key) +{ + NSCAssert(key != NULL, @"Key may not be NULL."); + if (key == NULL) { + SENTRY_LOG_WARN(@"Key may not be NULL."); + return; + } + + Method method = class_getInstanceMethod(classToUnswizzle, selector); + + NSCAssert(NULL != method, @"Selector %@ not found in %@ methods of class %@.", + NSStringFromSelector(selector), + class_isMetaClass(classToUnswizzle) ? @"class" : @"instance", classToUnswizzle); + + pthread_mutex_lock(&gLock); + + IMP originalIMP = getRefToOriginalImplementation(key); + if (originalIMP) { + const char *methodType = method_getTypeEncoding(method); + class_replaceMethod(classToUnswizzle, selector, originalIMP, methodType); + + removeRefToOriginalImplementation(key); + } + + pthread_mutex_unlock(&gLock); +} +#endif // SENTRY_TEST || SENTRY_TEST_CI + static NSMutableDictionary *> * swizzledClassesDictionary(void) { @@ -144,7 +271,7 @@ + (BOOL)swizzleInstanceMethod:(SEL)selector @"Key may not be NULL if mode is not SentrySwizzleModeAlways."); if (key == NULL && mode != SentrySwizzleModeAlways) { - NSLog(@"Key may not be NULL if mode is not SentrySwizzleModeAlways."); + SENTRY_LOG_WARN(@"Key may not be NULL if mode is not SentrySwizzleModeAlways."); return NO; } @@ -157,7 +284,7 @@ + (BOOL)swizzleInstanceMethod:(SEL)selector } } else if (mode == SentrySwizzleModeOncePerClassAndSuperclasses) { for (Class currentClass = classToSwizzle; nil != currentClass; - currentClass = class_getSuperclass(currentClass)) { + currentClass = class_getSuperclass(currentClass)) { if ([swizzledClasses containsObject:currentClass]) { return NO; } @@ -165,7 +292,7 @@ + (BOOL)swizzleInstanceMethod:(SEL)selector } } - swizzle(classToSwizzle, selector, factoryBlock); + swizzle(classToSwizzle, selector, factoryBlock, key); if (key) { [swizzledClassesForKey(key) addObject:classToSwizzle]; @@ -175,6 +302,30 @@ + (BOOL)swizzleInstanceMethod:(SEL)selector return YES; } +#if SENTRY_TEST || SENTRY_TEST_CI ++ (BOOL)unswizzleInstanceMethod:(SEL)selector inClass:(Class)classToUnswizzle key:(const void *)key +{ + NSAssert(key != NULL, @"Key may not be NULL."); + if (key == NULL) { + SENTRY_LOG_WARN(@"Key may not be NULL."); + return NO; + } + + @synchronized(swizzledClassesDictionary()) { + NSSet *swizzledClasses = swizzledClassesForKey(key); + if (![swizzledClasses containsObject:classToUnswizzle]) { + return NO; + } + + unswizzle(classToUnswizzle, selector, key); + + [swizzledClassesForKey(key) removeObject:classToUnswizzle]; + } + + return YES; +} +#endif // SENTRY_TEST || SENTRY_TEST_CI + + (void)swizzleClassMethod:(SEL)selector inClass:(Class)classToSwizzle newImpFactory:(SentrySwizzleImpFactoryBlock)factoryBlock diff --git a/Pods/Sentry/Sources/Sentry/SentrySysctl.m b/Pods/Sentry/Sources/Sentry/SentrySysctl.m index 2c2e9d218..5a52e1119 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySysctl.m +++ b/Pods/Sentry/Sources/Sentry/SentrySysctl.m @@ -1,5 +1,6 @@ #import "SentrySysctl.h" #import "SentryCrashSysCtl.h" +#import "SentrySwift.h" #import "SentryTime.h" #include #include @@ -35,7 +36,7 @@ + (void)load // there's no guarantee on whether that or this load method will be called first, the difference // in time has been observed to only be on the order of single milliseconds, not significant // enough to make a difference in outcomes - runtimeInitSystemTimestamp = getAbsoluteTime(); + runtimeInitSystemTimestamp = [SentryDefaultCurrentDateProvider getAbsoluteTime]; } - (NSDate *)runtimeInitTimestamp diff --git a/Pods/Sentry/Sources/Sentry/SentrySystemEventBreadcrumbs.m b/Pods/Sentry/Sources/Sentry/SentrySystemEventBreadcrumbs.m index ad6f52e18..1e683ef29 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySystemEventBreadcrumbs.m +++ b/Pods/Sentry/Sources/Sentry/SentrySystemEventBreadcrumbs.m @@ -11,8 +11,7 @@ # import -@interface -SentrySystemEventBreadcrumbs () +@interface SentrySystemEventBreadcrumbs () @property (nonatomic, weak) id delegate; @property (nonatomic, strong) SentryFileManager *fileManager; @property (nonatomic, strong) SentryNSNotificationCenterWrapper *notificationCenterWrapper; diff --git a/Pods/Sentry/Sources/Sentry/SentrySystemWrapper.mm b/Pods/Sentry/Sources/Sentry/SentrySystemWrapper.mm index c8a611e2d..08b64c925 100644 --- a/Pods/Sentry/Sources/Sentry/SentrySystemWrapper.mm +++ b/Pods/Sentry/Sources/Sentry/SentrySystemWrapper.mm @@ -69,7 +69,7 @@ - (NSNumber *)cpuUsageWithError:(NSError **)error if (threadInfoStatus != KERN_SUCCESS) { if (error) { *error = NSErrorFromSentryErrorWithKernelError( - kSentryErrorKernel, @"task_threads reported an error.", taskThreadsStatus); + kSentryErrorKernel, @"task_threads reported an error.", threadInfoStatus); } vm_deallocate( mach_task_self(), reinterpret_cast(list), sizeof(*list) * count); diff --git a/Pods/Sentry/Sources/Sentry/SentryThreadInspector.m b/Pods/Sentry/Sources/Sentry/SentryThreadInspector.m index 6d303aca8..f92045f33 100644 --- a/Pods/Sentry/Sources/Sentry/SentryThreadInspector.m +++ b/Pods/Sentry/Sources/Sentry/SentryThreadInspector.m @@ -1,5 +1,4 @@ #import "SentryThreadInspector.h" -#import "SentryBinaryImageCache.h" #import "SentryCrashDefaultMachineContextWrapper.h" #import "SentryCrashStackCursor.h" #include "SentryCrashStackCursor_MachineContext.h" @@ -13,8 +12,7 @@ #import "SentryThread.h" #include -@interface -SentryThreadInspector () +@interface SentryThreadInspector () @property (nonatomic, strong) SentryStacktraceBuilder *stacktraceBuilder; @property (nonatomic, strong) id machineContextWrapper; diff --git a/Pods/Sentry/Sources/Sentry/SentryTime.mm b/Pods/Sentry/Sources/Sentry/SentryTime.mm index f299e5df6..9712852df 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTime.mm +++ b/Pods/Sentry/Sources/Sentry/SentryTime.mm @@ -22,15 +22,6 @@ return (double)nanoseconds / NSEC_PER_SEC; } -uint64_t -getAbsoluteTime(void) -{ - if (@available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)) { - return clock_gettime_nsec_np(CLOCK_UPTIME_RAW); - } - return mach_absolute_time(); -} - bool orderedChronologically(uint64_t a, uint64_t b) { diff --git a/Pods/Sentry/Sources/Sentry/SentryTimeToDisplayTracker.m b/Pods/Sentry/Sources/Sentry/SentryTimeToDisplayTracker.m index 236e5fc84..ee897a44e 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTimeToDisplayTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryTimeToDisplayTracker.m @@ -13,9 +13,9 @@ # import "SentrySpan.h" # import "SentrySpanContext.h" # import "SentrySpanId.h" -# import "SentrySpanOperations.h" +# import "SentrySpanOperation.h" # import "SentrySwift.h" -# import "SentryTraceOrigins.h" +# import "SentryTraceOrigin.h" # import "SentryTracer.h" # import @@ -24,8 +24,7 @@ # import "SentryLaunchProfiling.h" # endif // SENTRY_TARGET_PROFILING_SUPPORTED -@interface -SentryTimeToDisplayTracker () +@interface SentryTimeToDisplayTracker () @property (nonatomic, weak) SentrySpan *initialDisplaySpan; @property (nonatomic, weak) SentrySpan *fullDisplaySpan; @@ -37,15 +36,15 @@ @implementation SentryTimeToDisplayTracker { BOOL _waitForFullDisplay; BOOL _initialDisplayReported; BOOL _fullyDisplayedReported; - NSString *_controllerName; + NSString *_name; } -- (instancetype)initForController:(UIViewController *)controller - waitForFullDisplay:(BOOL)waitForFullDisplay - dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper +- (instancetype)initWithName:(NSString *)name + waitForFullDisplay:(BOOL)waitForFullDisplay + dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper { if (self = [super init]) { - _controllerName = [SwiftDescriptor getObjectClassName:controller]; + _name = name; _waitForFullDisplay = waitForFullDisplay; _dispatchQueueWrapper = dispatchQueueWrapper; _initialDisplayReported = NO; @@ -63,17 +62,16 @@ - (BOOL)startForTracer:(SentryTracer *)tracer } SENTRY_LOG_DEBUG(@"Starting initial display span"); - self.initialDisplaySpan = [tracer - startChildWithOperation:SentrySpanOperationUILoadInitialDisplay - description:[NSString stringWithFormat:@"%@ initial display", _controllerName]]; + self.initialDisplaySpan = + [tracer startChildWithOperation:SentrySpanOperationUiLoadInitialDisplay + description:[NSString stringWithFormat:@"%@ initial display", _name]]; self.initialDisplaySpan.origin = SentryTraceOriginAutoUITimeToDisplay; if (self.waitForFullDisplay) { SENTRY_LOG_DEBUG(@"Starting full display span"); self.fullDisplaySpan = - [tracer startChildWithOperation:SentrySpanOperationUILoadFullDisplay - description:[NSString stringWithFormat:@"%@ full display", - _controllerName]]; + [tracer startChildWithOperation:SentrySpanOperationUiLoadFullDisplay + description:[NSString stringWithFormat:@"%@ full display", _name]]; self.fullDisplaySpan.origin = SentryTraceOriginManualUITimeToDisplay; // By concept TTID and TTFD spans should have the same beginning, @@ -86,11 +84,11 @@ - (BOOL)startForTracer:(SentryTracer *)tracer [SentryDependencyContainer.sharedInstance.framesTracker addListener:self]; [tracer setShouldIgnoreWaitForChildrenCallback:^(id span) { - if (span.origin == SentryTraceOriginAutoUITimeToDisplay) { + if ([span.origin isEqualToString:SentryTraceOriginAutoUITimeToDisplay]) { return YES; - } else { - return NO; } + + return NO; }]; [tracer setFinishCallback:^(SentryTracer *_tracer) { [SentryDependencyContainer.sharedInstance.framesTracker removeListener:self]; @@ -128,16 +126,44 @@ - (BOOL)startForTracer:(SentryTracer *)tracer - (void)reportInitialDisplay { + SENTRY_LOG_DEBUG(@"Reporting initial display for %@", _name); _initialDisplayReported = YES; } - (void)reportFullyDisplayed { + SENTRY_LOG_DEBUG(@"Reporting full display for %@", _name); // All other accesses to _fullyDisplayedReported run on the main thread. // To avoid using locks, we execute this on the main queue instead. [_dispatchQueueWrapper dispatchAsyncOnMainQueue:^{ self->_fullyDisplayedReported = YES; }]; } +- (void)finishSpansIfNotFinished +{ + [SentryDependencyContainer.sharedInstance.framesTracker removeListener:self]; + + if (self.initialDisplaySpan.isFinished == NO) { + [self.initialDisplaySpan finish]; + } + + if (self.fullDisplaySpan.isFinished == NO) { + if (_fullyDisplayedReported) { + SENTRY_LOG_DEBUG( + @"SentrySDK.reportFullyDisplayed() was called but didn't receive a new frame to " + @"finish the TTFD span. Finishing the full display span so the SDK can start a new " + @"time to display tracker."); + [self.fullDisplaySpan finish]; + return; + } + + SENTRY_LOG_WARN(@"You didn't call SentrySDK.reportFullyDisplayed() for UIViewController: " + @"%@. Finishing full display span with status: %@.", + _name, nameForSentrySpanStatus(kSentrySpanStatusDeadlineExceeded)); + + [self.fullDisplaySpan finishWithStatus:kSentrySpanStatusDeadlineExceeded]; + } +} + - (void)framesTrackerHasNewFrame:(NSDate *)newFrameDate { // The purpose of TTID and TTFD is to measure how long @@ -150,7 +176,7 @@ - (void)framesTrackerHasNewFrame:(NSDate *)newFrameDate if (!_waitForFullDisplay) { [SentryDependencyContainer.sharedInstance.framesTracker removeListener:self]; # if SENTRY_TARGET_PROFILING_SUPPORTED - if (![SentrySDK.options isContinuousProfilingEnabled]) { + if ([SentrySDK.options isProfilingCorrelatedToTraces]) { sentry_stopAndDiscardLaunchProfileTracer(); } # endif // SENTRY_TARGET_PROFILING_SUPPORTED @@ -162,7 +188,7 @@ - (void)framesTrackerHasNewFrame:(NSDate *)newFrameDate self.fullDisplaySpan.timestamp = newFrameDate; [self.fullDisplaySpan finish]; # if SENTRY_TARGET_PROFILING_SUPPORTED - if (![SentrySDK.options isContinuousProfilingEnabled]) { + if ([SentrySDK.options isProfilingCorrelatedToTraces]) { sentry_stopAndDiscardLaunchProfileTracer(); } # endif // SENTRY_TARGET_PROFILING_SUPPORTED diff --git a/Pods/Sentry/Sources/Sentry/SentryTraceContext.m b/Pods/Sentry/Sources/Sentry/SentryTraceContext.m index c14486b23..ebb2f2029 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTraceContext.m +++ b/Pods/Sentry/Sources/Sentry/SentryTraceContext.m @@ -25,6 +25,29 @@ - (instancetype)initWithTraceId:(SentryId *)traceId sampleRate:(nullable NSString *)sampleRate sampled:(nullable NSString *)sampled replayId:(nullable NSString *)replayId +{ + return [self initWithTraceId:traceId + publicKey:publicKey + releaseName:releaseName + environment:environment + transaction:transaction + userSegment:userSegment + sampleRate:sampleRate + sampleRand:nil + sampled:sampled + replayId:replayId]; +} + +- (instancetype)initWithTraceId:(SentryId *)traceId + publicKey:(NSString *)publicKey + releaseName:(nullable NSString *)releaseName + environment:(nullable NSString *)environment + transaction:(nullable NSString *)transaction + userSegment:(nullable NSString *)userSegment + sampleRate:(nullable NSString *)sampleRate + sampleRand:(nullable NSString *)sampleRand + sampled:(nullable NSString *)sampled + replayId:(nullable NSString *)replayId { if (self = [super init]) { _traceId = traceId; @@ -33,6 +56,7 @@ - (instancetype)initWithTraceId:(SentryId *)traceId _releaseName = releaseName; _transaction = transaction; _userSegment = userSegment; + _sampleRand = sampleRand; _sampleRate = sampleRate; _sampled = sampled; _replayId = replayId; @@ -66,12 +90,17 @@ - (nullable instancetype)initWithTracer:(SentryTracer *)tracer } #pragma clang diagnostic pop - NSString *sampleRate = nil; - if ([tracer isKindOfClass:[SentryTransactionContext class]]) { - sampleRate = - [NSString stringWithFormat:@"%@", [(SentryTransactionContext *)tracer sampleRate]]; + NSString *serializedSampleRand = nil; + NSNumber *sampleRand = [tracer.transactionContext sampleRand]; + if (sampleRand != nil) { + serializedSampleRand = [NSString stringWithFormat:@"%f", sampleRand.doubleValue]; } + NSString *serializedSampleRate = nil; + NSNumber *sampleRate = [tracer.transactionContext sampleRate]; + if (sampleRate != nil) { + serializedSampleRate = [NSString stringWithFormat:@"%f", sampleRate.doubleValue]; + } NSString *sampled = nil; if (tracer.sampled != kSentrySampleDecisionUndecided) { sampled @@ -84,7 +113,8 @@ - (nullable instancetype)initWithTracer:(SentryTracer *)tracer environment:options.environment transaction:tracer.transactionContext.name userSegment:userSegment - sampleRate:sampleRate + sampleRate:serializedSampleRate + sampleRand:serializedSampleRand sampled:sampled replayId:scope.replayId]; } @@ -101,6 +131,7 @@ - (instancetype)initWithTraceId:(SentryId *)traceId transaction:nil userSegment:userSegment sampleRate:nil + sampleRand:nil sampled:nil replayId:replayId]; } @@ -128,6 +159,7 @@ - (nullable instancetype)initWithDict:(NSDictionary *)dictionary transaction:dictionary[@"transaction"] userSegment:userSegment sampleRate:dictionary[@"sample_rate"] + sampleRand:dictionary[@"sample_rand"] sampled:dictionary[@"sampled"] replayId:dictionary[@"replay_id"]]; } @@ -141,6 +173,7 @@ - (SentryBaggage *)toBaggage transaction:_transaction userSegment:_userSegment sampleRate:_sampleRate + sampleRand:_sampleRand sampled:_sampled replayId:_replayId]; return result; @@ -167,6 +200,10 @@ - (SentryBaggage *)toBaggage [result setValue:_userSegment forKey:@"user_segment"]; } + if (_sampleRand != nil) { + [result setValue:_sampleRand forKey:@"sample_rand"]; + } + if (_sampleRate != nil) { [result setValue:_sampleRate forKey:@"sample_rate"]; } diff --git a/Pods/Sentry/Sources/Sentry/SentryTraceHeader.m b/Pods/Sentry/Sources/Sentry/SentryTraceHeader.m index 7a4d710c1..57d48f4a8 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTraceHeader.m +++ b/Pods/Sentry/Sources/Sentry/SentryTraceHeader.m @@ -26,7 +26,7 @@ - (NSString *)value { return _sampled != kSentrySampleDecisionUndecided ? [NSString stringWithFormat:@"%@-%@-%i", _traceId.sentryIdString, - _spanId.sentrySpanIdString, _sampled == kSentrySampleDecisionYes ? 1 : 0] + _spanId.sentrySpanIdString, _sampled == kSentrySampleDecisionYes ? 1 : 0] : [NSString stringWithFormat:@"%@-%@", _traceId.sentryIdString, _spanId.sentrySpanIdString]; } diff --git a/Pods/Sentry/Sources/Sentry/SentryTraceOrigin.m b/Pods/Sentry/Sources/Sentry/SentryTraceOrigin.m new file mode 100644 index 000000000..1ffbea706 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryTraceOrigin.m @@ -0,0 +1,15 @@ +#import + +NSString *const SentryTraceOriginAutoAppStart = @"auto.app.start"; +NSString *const SentryTraceOriginAutoAppStartProfile = @"auto.app.start.profile"; + +NSString *const SentryTraceOriginAutoDBCoreData = @"auto.db.core_data"; +NSString *const SentryTraceOriginAutoHttpNSURLSession = @"auto.http.ns_url_session"; +NSString *const SentryTraceOriginAutoNSData = @"auto.file.ns_data"; +NSString *const SentryTraceOriginAutoUiEventTracker = @"auto.ui.event_tracker"; +NSString *const SentryTraceOriginAutoUITimeToDisplay = @"auto.ui.time_to_display"; +NSString *const SentryTraceOriginAutoUIViewController = @"auto.ui.view_controller"; + +NSString *const SentryTraceOriginManual = @"manual"; +NSString *const SentryTraceOriginManualFileData = @"manual.file.data"; +NSString *const SentryTraceOriginManualUITimeToDisplay = @"manual.ui.time_to_display"; diff --git a/Pods/Sentry/Sources/Sentry/SentryTracer.m b/Pods/Sentry/Sources/Sentry/SentryTracer.m index ab40cf526..179d8e3e3 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTracer.m +++ b/Pods/Sentry/Sources/Sentry/SentryTracer.m @@ -1,6 +1,6 @@ #import "PrivateSentrySDKOnly.h" #import "SentryClient.h" -#import "SentryDebugImageProvider.h" +#import "SentryDebugImageProvider+HybridSDKs.h" #import "SentryDependencyContainer.h" #import "SentryEvent+Private.h" #import "SentryFileManager.h" @@ -9,7 +9,6 @@ #import "SentryInternalDefines.h" #import "SentryLog.h" #import "SentryNSDictionarySanitize.h" -#import "SentryNSTimerFactory.h" #import "SentryNoOpSpan.h" #import "SentryOptions+Private.h" #import "SentryProfilingConditionals.h" @@ -21,11 +20,11 @@ #import "SentrySpanContext+Private.h" #import "SentrySpanContext.h" #import "SentrySpanId.h" +#import "SentrySpanOperation.h" #import "SentrySwift.h" #import "SentryThreadWrapper.h" #import "SentryTime.h" #import "SentryTraceContext.h" -#import "SentryTraceOrigins.h" #import "SentryTracer+Private.h" #import "SentryTransaction.h" #import "SentryTransactionContext.h" @@ -33,13 +32,9 @@ #import #import #import -#import #if SENTRY_TARGET_PROFILING_SUPPORTED -# import "SentryLaunchProfiling.h" # import "SentryProfiledTracerConcurrency.h" -# import "SentryProfilerSerialization.h" -# import "SentryTraceProfiler.h" #endif // SENTRY_TARGET_PROFILING_SUPPORTED #if SENTRY_HAS_UIKIT @@ -64,8 +59,7 @@ static const NSTimeInterval SENTRY_AUTO_TRANSACTION_DEADLINE = 30.0; -@interface -SentryTracer () +@interface SentryTracer () @property (nonatomic) uint64_t startSystemTime; @property (nonatomic) SentrySpanStatus finishStatus; @@ -74,7 +68,6 @@ * @c -[finish] doesn't necessarily lead to finishing the tracer, because it could still wait for * child spans to finish if @c waitForChildren is @c YES . */ @property (nonatomic) BOOL wasFinishCalled; -@property (nonatomic, nullable, strong) NSTimer *deadlineTimer; @property (nonnull, strong) SentryTracerConfiguration *configuration; @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueue; @property (nonatomic, strong) SentryDebugImageProvider *debugImageProvider; @@ -93,10 +86,11 @@ @implementation SentryTracer { SentryAppStartMeasurement *appStartMeasurement; #endif // SENTRY_HAS_UIKIT NSMutableDictionary *_measurements; + NSObject *_dispatchTimeoutLock; dispatch_block_t _idleTimeoutBlock; + dispatch_block_t _deadlineTimeoutBlock; NSMutableArray> *_children; BOOL _startTimeChanged; - NSObject *_idleTimeoutLock; #if SENTRY_HAS_UIKIT NSUInteger initTotalFrames; @@ -149,10 +143,6 @@ - (instancetype)initWithTransactionContext:(SentryTransactionContext *)transacti _measurements = [[NSMutableDictionary alloc] init]; self.finishStatus = kSentrySpanStatusUndefined; - if (_configuration.timerFactory == nil) { - _configuration.timerFactory = [[SentryNSTimerFactory alloc] init]; - } - #if SENTRY_HAS_UIKIT [hub configureScope:^(SentryScope *scope) { if (scope.currentScreen != nil) { @@ -167,13 +157,13 @@ - (instancetype)initWithTransactionContext:(SentryTransactionContext *)transacti #endif // SENTRY_HAS_UIKIT - _idleTimeoutLock = [[NSObject alloc] init]; + _dispatchTimeoutLock = [[NSObject alloc] init]; if ([self hasIdleTimeout]) { - [self dispatchIdleTimeout]; + [self startIdleTimeout]; } if ([self isAutoGeneratedTransaction]) { - [self startDeadlineTimer]; + [self startDeadlineTimeout]; } #if SENTRY_HAS_UIKIT @@ -189,21 +179,21 @@ - (instancetype)initWithTransactionContext:(SentryTransactionContext *)transacti #endif // SENTRY_HAS_UIKIT #if SENTRY_TARGET_PROFILING_SUPPORTED - BOOL profileShouldBeSampled - = _configuration.profilesSamplerDecision.decision == kSentrySampleDecisionYes; - BOOL isContinuousProfiling = [hub.client.options isContinuousProfilingEnabled]; - BOOL shouldStartNormalTraceProfile = !isContinuousProfiling && profileShouldBeSampled; - if (sentry_isTracingAppLaunch || shouldStartNormalTraceProfile) { - _internalID = [[SentryId alloc] init]; - if ((_isProfiling = [SentryTraceProfiler startWithTracer:_internalID])) { - SENTRY_LOG_DEBUG(@"Started profiler for trace %@ with internal id %@", - transactionContext.traceId.sentryIdString, _internalID.sentryIdString); - } - _startSystemTime = SentryDependencyContainer.sharedInstance.dateProvider.systemTime; - } + _profilerReferenceID = sentry_startProfilerForTrace(configuration, hub, transactionContext); + _isProfiling = _profilerReferenceID != nil; #endif // SENTRY_TARGET_PROFILING_SUPPORTED - SENTRY_LOG_DEBUG(@"Started tracer with id: %@", transactionContext.traceId.sentryIdString); + if (transactionContext.parentSpanId == nil) { + SENTRY_LOG_DEBUG( + @"Started root span tracer with id: %@; profilerReferenceId: %@; span id: %@", + transactionContext.traceId.sentryIdString, _profilerReferenceID.sentryIdString, + self.spanId.sentrySpanIdString); + } else { + SENTRY_LOG_DEBUG(@"Started child span tracer with id: %@; profilerReferenceId: %@; span " + @"id: %@; parent span id: %@", + transactionContext.traceId.sentryIdString, _profilerReferenceID.sentryIdString, + self.spanId.sentrySpanIdString, transactionContext.parentSpanId.sentrySpanIdString); + } return self; } @@ -212,9 +202,10 @@ - (void)dealloc { #if SENTRY_TARGET_PROFILING_SUPPORTED if (self.isProfiling) { - sentry_discardProfilerForTracer(self.internalID); + sentry_discardProfilerCorrelatedToTrace(_profilerReferenceID, self.hub); } #endif // SENTRY_TARGET_PROFILING_SUPPORTED + [self cancelDeadlineTimeout]; } - (nullable SentryTracer *)tracer @@ -222,73 +213,63 @@ - (nullable SentryTracer *)tracer return self; } -- (void)dispatchIdleTimeout -{ - @synchronized(_idleTimeoutLock) { - if (_idleTimeoutBlock != NULL) { - [_dispatchQueue dispatchCancel:_idleTimeoutBlock]; - } - __weak SentryTracer *weakSelf = self; - _idleTimeoutBlock = [_dispatchQueue createDispatchBlock:^{ - if (weakSelf == nil) { - SENTRY_LOG_DEBUG(@"WeakSelf is nil. Not doing anything."); - return; - } - [weakSelf finishInternal]; - }]; - - if (_idleTimeoutBlock == NULL) { - SENTRY_LOG_WARN(@"Couldn't create idle time out block. Can't schedule idle timeout. " - @"Finishing transaction"); - // If the transaction has no children, the SDK will discard it. - [self finishInternal]; - } else { - [_dispatchQueue dispatchAfter:_configuration.idleTimeout block:_idleTimeoutBlock]; - } - } -} +#pragma mark - Timeouts - (BOOL)hasIdleTimeout { return _configuration.idleTimeout > 0; } -- (BOOL)isAutoGeneratedTransaction +- (void)startIdleTimeout { - return _configuration.waitForChildren || [self hasIdleTimeout]; + __weak SentryTracer *weakSelf = self; + dispatch_block_t newBlock = [_dispatchQueue createDispatchBlock:^{ + if (weakSelf == nil) { + SENTRY_LOG_DEBUG(@"WeakSelf is nil. Not doing anything."); + return; + } + [weakSelf finishInternal]; + }]; + + @synchronized(_dispatchTimeoutLock) { + [self dispatchTimeout:_idleTimeoutBlock + newBlock:newBlock + interval:_configuration.idleTimeout]; + _idleTimeoutBlock = newBlock; + } } - (void)cancelIdleTimeout { - @synchronized(_idleTimeoutLock) { + @synchronized(_dispatchTimeoutLock) { if ([self hasIdleTimeout]) { - [SentryDependencyContainer.sharedInstance.dispatchQueueWrapper - dispatchCancel:_idleTimeoutBlock]; + [_dispatchQueue dispatchCancel:_idleTimeoutBlock]; } } } -- (void)startDeadlineTimer +- (void)startDeadlineTimeout { __weak SentryTracer *weakSelf = self; - [_dispatchQueue dispatchAsyncOnMainQueue:^{ - weakSelf.deadlineTimer = [weakSelf.configuration.timerFactory - scheduledTimerWithTimeInterval:SENTRY_AUTO_TRANSACTION_DEADLINE - repeats:NO - block:^(NSTimer *_Nonnull timer) { - if (weakSelf == nil) { - SENTRY_LOG_DEBUG(@"WeakSelf is nil. Not calling " - @"deadlineTimerFired."); - return; - } - [weakSelf deadlineTimerFired]; - }]; + dispatch_block_t newBlock = [_dispatchQueue createDispatchBlock:^{ + if (weakSelf == nil) { + SENTRY_LOG_DEBUG(@"WeakSelf is nil. Not doing anything."); + return; + } + [weakSelf deadlineTimeoutExceeded]; }]; + + @synchronized(_dispatchTimeoutLock) { + [self dispatchTimeout:_deadlineTimeoutBlock + newBlock:newBlock + interval:SENTRY_AUTO_TRANSACTION_DEADLINE]; + _deadlineTimeoutBlock = newBlock; + } } -- (void)deadlineTimerFired +- (void)deadlineTimeoutExceeded { - SENTRY_LOG_DEBUG(@"Sentry tracer deadline fired"); + SENTRY_LOG_DEBUG(@"Sentry tracer deadline exceeded"); @synchronized(self) { // This try to minimize a race condition with a proper call to `finishInternal`. if (self.isFinished) { @@ -303,24 +284,42 @@ - (void)deadlineTimerFired } } - [self finishWithStatus:kSentrySpanStatusDeadlineExceeded]; + _finishStatus = kSentrySpanStatusDeadlineExceeded; + [self finishInternal]; } -- (void)cancelDeadlineTimer +- (void)cancelDeadlineTimeout { - // If the main thread is busy the tracer could be deallocated in between. - __weak SentryTracer *weakSelf = self; - - // The timer must be invalidated from the thread on which the timer was installed, see - // https://developer.apple.com/documentation/foundation/nstimer/1415405-invalidate#1770468 - [_dispatchQueue dispatchAsyncOnMainQueue:^{ - if (weakSelf == nil) { - SENTRY_LOG_DEBUG(@"WeakSelf is nil. Not invalidating deadlineTimer."); - return; + @synchronized(_dispatchTimeoutLock) { + if (_deadlineTimeoutBlock != NULL) { + [_dispatchQueue dispatchCancel:_deadlineTimeoutBlock]; + _deadlineTimeoutBlock = NULL; } - [weakSelf.deadlineTimer invalidate]; - weakSelf.deadlineTimer = nil; - }]; + } +} + +- (void)dispatchTimeout:(dispatch_block_t)currentBlock + newBlock:(dispatch_block_t)newBlock + interval:(NSTimeInterval)timeInterval +{ + if (currentBlock != NULL) { + [_dispatchQueue dispatchCancel:currentBlock]; + } + + if (newBlock == NULL) { + SENTRY_LOG_WARN(@"Couldn't create dispatch after block. Finishing transaction."); + // If the transaction has no children, the SDK will discard it. + [self finishInternal]; + } else { + [_dispatchQueue dispatchAfter:timeInterval block:newBlock]; + } +} + +#pragma mark - Tracer + +- (BOOL)isAutoGeneratedTransaction +{ + return _configuration.waitForChildren || [self hasIdleTimeout]; } - (id)getActiveSpan @@ -329,7 +328,7 @@ - (void)cancelDeadlineTimer if (self.delegate) { @synchronized(_children) { - span = [self.delegate activeSpanForTracer:self]; + span = [self.delegate getActiveSpan]; if (span == nil || ![_children containsObject:span]) { span = self; } @@ -369,8 +368,9 @@ - (void)cancelDeadlineTimer [self cancelIdleTimeout]; if (self.isFinished) { - SENTRY_LOG_WARN( - @"Starting a child on a finished span is not supported; it won't be sent to Sentry."); + SENTRY_LOG_WARN(@"Starting a child with operation %@ and description %@ on a finished span " + @"is not supported; it won't be sent to Sentry.", + operation, description); return [SentryNoOpSpan shared]; } @@ -409,6 +409,9 @@ - (void)spanFinished:(id)finishedSpan @"Cannot call finish on span with id %@", finishedSpan.spanId.sentrySpanIdString); return; } + + SENTRY_LOG_DEBUG(@"Checking if tracer %@ (profileReferenceId %@) can be finished", + self.traceId.sentryIdString, _profilerReferenceID.sentryIdString); [self canBeFinished]; } @@ -417,12 +420,11 @@ - (nullable SentryTraceContext *)traceContext if (_traceContext == nil) { @synchronized(self) { if (_traceContext == nil) { - _traceContext = [[SentryTraceContext alloc] - initWithTracer:self - scope:_hub.scope - options:_hub.client.options - ?: SentrySDK.options]; // We should remove static classes and always - // inject dependencies. + _traceContext = [[SentryTraceContext alloc] initWithTracer:self + scope:_hub.scope + options:_hub.client.options + ?: SentrySDK.options]; // We should remove static classes and always + // inject dependencies. } } } @@ -437,14 +439,37 @@ - (nullable SentryTraceContext *)traceContext - (void)setMeasurement:(NSString *)name value:(NSNumber *)value { SentryMeasurementValue *measurement = [[SentryMeasurementValue alloc] initWithValue:value]; - _measurements[name] = measurement; + + [self setMeasurement:name measurement:measurement]; } - (void)setMeasurement:(NSString *)name value:(NSNumber *)value unit:(SentryMeasurementUnit *)unit { + SentryMeasurementValue *measurement = [[SentryMeasurementValue alloc] initWithValue:value unit:unit]; - _measurements[name] = measurement; + [self setMeasurement:name measurement:measurement]; +} + +- (void)setMeasurement:(NSString *)name measurement:(SentryMeasurementValue *)measurement +{ + // Although name is nonnull we saw edge cases where it was nil and then leading to crashes. If + // the name is nil we can discard the measurement + if (name == nil) { + SENTRY_LOG_ERROR(@"The name of the measurement is nil. Discarding the measurement."); + return; + } + + @synchronized(_measurements) { + _measurements[name] = measurement; + } +} + +- (NSDictionary *)measurements +{ + @synchronized(_measurements) { + return _measurements.copy; + } } - (void)finish @@ -454,8 +479,8 @@ - (void)finish - (void)finishWithStatus:(SentrySpanStatus)status { - SENTRY_LOG_DEBUG(@"Finished trace with traceID: %@ and status: %@", - self.internalID.sentryIdString, nameForSentrySpanStatus(status)); + SENTRY_LOG_DEBUG(@"Finished trace with tracer profilerReferenceId: %@ and status: %@", + self.profilerReferenceID.sentryIdString, nameForSentrySpanStatus(status)); @synchronized(self) { self.wasFinishCalled = YES; } @@ -463,6 +488,23 @@ - (void)finishWithStatus:(SentrySpanStatus)status [self canBeFinished]; } +- (void)finishForCrash +{ + self.wasFinishCalled = YES; + _finishStatus = kSentrySpanStatusInternalError; + + // We don't need to clean up during finish cause we're crashing, and the cleanup can execute + // code that leads to the app hanging and not terminating. + BOOL discardTransaction = [self finishTracer:kSentrySpanStatusInternalError shouldCleanUp:NO]; + if (discardTransaction) { + return; + } + + SentryTransaction *transaction = [self toTransaction]; + + [_hub saveCrashTransaction:transaction]; +} + - (void)canBeFinished { // Transaction already finished and captured. @@ -480,7 +522,7 @@ - (void)canBeFinished SENTRY_LOG_DEBUG( @"Span with id %@ isn't waiting on children and needs idle timeout dispatched.", self.spanId.sentrySpanIdString); - [self dispatchIdleTimeout]; + [self startIdleTimeout]; return; } @@ -493,6 +535,9 @@ - (void)canBeFinished } } + SENTRY_LOG_DEBUG(@"Can finish tracer %@ (profileReferenceId %@)", self.traceId.sentryIdString, + _profilerReferenceID.sentryIdString); + [self finishInternal]; } @@ -517,16 +562,45 @@ - (BOOL)hasUnfinishedChildSpansToWaitFor - (void)finishInternal { - [self cancelDeadlineTimer]; + BOOL discardTransaction = [self finishTracer:kSentrySpanStatusDeadlineExceeded + shouldCleanUp:YES]; + if (discardTransaction) { + SENTRY_LOG_DEBUG(@"Discarding transaction for trace %@ (profileReferenceId %@)", + self.traceId.sentryIdString, _profilerReferenceID.sentryIdString); + return; + } + + SentryTransaction *transaction = [self toTransaction]; + +#if SENTRY_TARGET_PROFILING_SUPPORTED + sentry_stopProfilerDueToFinishedTransaction( + _hub, _dispatchQueue, transaction, _isProfiling, self.startTimestamp, _startSystemTime +# if SENTRY_HAS_UIKIT + , + appStartMeasurement +# endif // SENTRY_HAS_UIKIT + ); + _isProfiling = NO; +#else + [_hub captureTransaction:transaction withScope:_hub.scope]; +#endif // SENTRY_TARGET_PROFILING_SUPPORTED +} + +- (BOOL)finishTracer:(SentrySpanStatus)unfinishedSpansFinishStatus shouldCleanUp:(BOOL)shouldCleanUp +{ + if (shouldCleanUp) { + [self cancelDeadlineTimeout]; + } + if (self.isFinished) { SENTRY_LOG_DEBUG(@"Tracer %@ was already finished.", _traceContext.traceId.sentryIdString); - return; + return YES; } @synchronized(self) { if (self.isFinished) { SENTRY_LOG_DEBUG(@"Tracer %@ was already finished after synchronizing.", _traceContext.traceId.sentryIdString); - return; + return YES; } // Keep existing status of auto generated transactions if set by the user. @@ -544,14 +618,16 @@ - (void)finishInternal } #endif // SENTRY_HAS_UIKIT - [self.delegate tracerDidFinish:self]; + if (shouldCleanUp) { + [self.delegate tracerDidFinish:self]; - if (self.finishCallback) { - self.finishCallback(self); + if (self.finishCallback) { + self.finishCallback(self); - // The callback will only be executed once. No need to keep the reference and we avoid - // potential retain cycles. - self.finishCallback = nil; + // The callback will only be executed once. No need to keep the reference and we avoid + // potential retain cycles. + self.finishCallback = nil; + } } // Prewarming can execute code up to viewDidLoad of a UIViewController, and keep the app in the @@ -563,31 +639,38 @@ - (void)finishInternal SENTRY_LOG_INFO(@"Auto generated transaction exceeded the max duration of %f seconds. Not " @"capturing transaction.", SENTRY_AUTO_TRANSACTION_MAX_DURATION); - return; + return YES; } if (_hub == nil) { SENTRY_LOG_DEBUG( @"Hub was nil for tracer %@, nothing to do.", _traceContext.traceId.sentryIdString); - return; + return YES; } - [_hub.scope useSpan:^(id _Nullable span) { - if (span == self) { - [self->_hub.scope setSpan:nil]; + if (shouldCleanUp) { + id _Nullable currentSpan = [_hub.scope span]; + if (currentSpan == self) { + [_hub.scope setSpan:nil]; } - }]; + } + + if (self.configuration.finishMustBeCalled && !self.wasFinishCalled) { + SENTRY_LOG_DEBUG( + @"Not capturing transaction because finish was not called before timing out."); + return YES; + } @synchronized(_children) { if (_configuration.idleTimeout > 0.0 && _children.count == 0) { SENTRY_LOG_DEBUG(@"Was waiting for timeout for UI event trace but it had no children, " @"will not keep transaction."); - return; + return YES; } for (id span in _children) { if (!span.isFinished) { - [span finishWithStatus:kSentrySpanStatusDeadlineExceeded]; + [span finishWithStatus:unfinishedSpansFinishStatus]; // Unfinished children should have the same // end timestamp as their parent transaction @@ -600,54 +683,8 @@ - (void)finishInternal } } - SentryTransaction *transaction = [self toTransaction]; - -#if SENTRY_TARGET_PROFILING_SUPPORTED - if (self.isProfiling) { - NSDate *startTimestamp; - -# if SENTRY_HAS_UIKIT - if (appStartMeasurement != nil) { - startTimestamp = appStartMeasurement.runtimeInitTimestamp; - } -# endif // SENTRY_HAS_UIKIT - - if (startTimestamp == nil) { - startTimestamp = self.startTimestamp; - } - if (!SENTRY_ASSERT_RETURN(startTimestamp != nil, - @"A transaction with a profile should have a start timestamp already. We will " - @"assign the current time but this will be incorrect.")) { - startTimestamp = [SentryDependencyContainer.sharedInstance.dateProvider date]; - } - - [self captureTransactionWithProfile:transaction startTimestamp:startTimestamp]; - return; - } -#endif // SENTRY_TARGET_PROFILING_SUPPORTED - - [_hub captureTransaction:transaction withScope:_hub.scope]; -} - -#if SENTRY_TARGET_PROFILING_SUPPORTED -- (void)captureTransactionWithProfile:(SentryTransaction *)transaction - startTimestamp:(NSDate *)startTimestamp -{ - SentryEnvelopeItem *profileEnvelopeItem - = sentry_traceProfileEnvelopeItem(transaction, startTimestamp); - - if (!profileEnvelopeItem) { - [_hub captureTransaction:transaction withScope:_hub.scope]; - return; - } - - SENTRY_LOG_DEBUG(@"Capturing transaction id %@ with profiling data attached for tracer id %@.", - transaction.eventId.sentryIdString, self.internalID.sentryIdString); - [_hub captureTransaction:transaction - withScope:_hub.scope - additionalEnvelopeItems:@[ profileEnvelopeItem ]]; + return NO; } -#endif // SENTRY_TARGET_PROFILING_SUPPORTED - (void)trimEndTimestamp { @@ -698,27 +735,6 @@ - (SentryTransaction *)toTransaction SentryTransaction *transaction = [[SentryTransaction alloc] initWithTrace:self children:spans]; transaction.transaction = self.transactionContext.name; -#if SENTRY_TARGET_PROFILING_SUPPORTED - if (self.isProfiling) { - // if we have an app start span, use its app start timestamp. otherwise use the tracer's - // start system time as we currently do - SENTRY_LOG_DEBUG(@"Tracer start time: %llu", self.startSystemTime); - - transaction.startSystemTime = self.startSystemTime; -# if SENTRY_HAS_UIKIT - if (appStartMeasurement != nil) { - SENTRY_LOG_DEBUG(@"Assigning transaction start time as app start system time (%llu)", - appStartMeasurement.runtimeInitSystemTimestamp); - transaction.startSystemTime = appStartMeasurement.runtimeInitSystemTimestamp; - } -# endif // SENTRY_HAS_UIKIT - - [SentryTraceProfiler recordMetrics]; - transaction.endSystemTime - = SentryDependencyContainer.sharedInstance.dateProvider.systemTime; - } -#endif // SENTRY_TARGET_PROFILING_SUPPORTED - NSMutableArray *framesOfAllSpans = [NSMutableArray array]; if ([(SentrySpan *)self frames]) { [framesOfAllSpans addObjectsFromArray:[(SentrySpan *)self frames]]; @@ -733,8 +749,8 @@ - (SentryTransaction *)toTransaction if (framesOfAllSpans.count > 0) { SentryDebugImageProvider *debugImageProvider = SentryDependencyContainer.sharedInstance.debugImageProvider; - transaction.debugMeta = [debugImageProvider getDebugImagesForFrames:framesOfAllSpans - isCrash:NO]; + transaction.debugMeta = + [debugImageProvider getDebugImagesFromCacheForFrames:framesOfAllSpans]; } #if SENTRY_HAS_UIKIT @@ -755,7 +771,7 @@ - (nullable SentryAppStartMeasurement *)getAppStartMeasurement SENTRY_DISABLE_TH { // Only send app start measurement for transactions generated by auto performance // instrumentation. - if (![self.operation isEqualToString:SentrySpanOperationUILoad]) { + if (![self.operation isEqualToString:SentrySpanOperationUiLoad]) { SENTRY_LOG_DEBUG( @"Not returning app start measurements because it's not a ui.load operation."); return nil; @@ -805,8 +821,8 @@ - (nullable SentryAppStartMeasurement *)getAppStartMeasurement SENTRY_DISABLE_TH return nil; } - SENTRY_LOG_DEBUG( - @"Returning app start measurements for trace id %@", self.internalID.sentryIdString); + SENTRY_LOG_DEBUG(@"Returning app start measurements for tracer with profilerReferenceId %@", + self.profilerReferenceID.sentryIdString); return measurement; } @@ -837,7 +853,7 @@ - (void)addAppStartMeasurements:(SentryTransaction *)transaction // The backend calculates statistics on the number and size of debug images for app // start transactions. Therefore, we add all debug images here. - transaction.debugMeta = [self.debugImageProvider getDebugImagesCrashed:NO]; + transaction.debugMeta = [self.debugImageProvider getDebugImagesFromCache]; } } } diff --git a/Pods/Sentry/Sources/Sentry/SentryTracerConfiguration.m b/Pods/Sentry/Sources/Sentry/SentryTracerConfiguration.m index c14ec504f..5fbb920fb 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTracerConfiguration.m +++ b/Pods/Sentry/Sources/Sentry/SentryTracerConfiguration.m @@ -21,6 +21,7 @@ - (instancetype)init if (self = [super init]) { self.idleTimeout = 0; self.waitForChildren = NO; + self.finishMustBeCalled = NO; } return self; } diff --git a/Pods/Sentry/Sources/Sentry/SentryTransaction.m b/Pods/Sentry/Sources/Sentry/SentryTransaction.m index 57778f614..9c55a92bc 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTransaction.m +++ b/Pods/Sentry/Sources/Sentry/SentryTransaction.m @@ -45,17 +45,7 @@ - (instancetype)initWithTrace:(SentryTracer *)trace children:(NSArray *serializedTrace = [self.trace serialize].mutableCopy; - NSDictionary *metricsSummary = serializedTrace[@"_metrics_summary"]; - if (metricsSummary != nil) { - serializedData[@"_metrics_summary"] = metricsSummary; - [serializedTrace removeObjectForKey:@"_metrics_summary"]; - } - mutableContext[@"trace"] = serializedTrace; + mutableContext[@"trace"] = [self.trace serialize]; [serializedData setValue:mutableContext forKey:@"contexts"]; diff --git a/Pods/Sentry/Sources/Sentry/SentryTransactionContext.mm b/Pods/Sentry/Sources/Sentry/SentryTransactionContext.mm index d0b94b9fe..32a51e878 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTransactionContext.mm +++ b/Pods/Sentry/Sources/Sentry/SentryTransactionContext.mm @@ -2,9 +2,10 @@ #import "SentryLog.h" #include "SentryProfilingConditionals.h" #import "SentrySpanContext+Private.h" +#import "SentrySwift.h" #import "SentryThread.h" #include "SentryThreadHandle.hpp" -#import "SentryTraceOrigins.h" +#import "SentryTraceOrigin.h" #import "SentryTransactionContext+Private.h" NS_ASSUME_NONNULL_BEGIN @@ -17,18 +18,37 @@ @implementation SentryTransactionContext - (instancetype)initWithName:(NSString *)name operation:(NSString *)operation { - return [self initWithName:name operation:operation sampled:kSentrySampleDecisionUndecided]; + return [self initWithName:name + operation:operation + sampled:kSentrySampleDecisionUndecided + sampleRate:nil + sampleRand:nil]; +} + +- (instancetype)initWithName:(NSString *)name + operation:(NSString *)operation + sampled:(SentrySampleDecision)sampled +{ + return [self initWithName:name + operation:operation + sampled:sampled + sampleRate:nil + sampleRand:nil]; } - (instancetype)initWithName:(NSString *)name operation:(NSString *)operation sampled:(SentrySampleDecision)sampled + sampleRate:(nullable NSNumber *)sampleRate + sampleRand:(nullable NSNumber *)sampleRand { return [self initWithName:name nameSource:kSentryTransactionNameSourceCustom operation:operation origin:SentryTraceOriginManual - sampled:sampled]; + sampled:sampled + sampleRate:sampleRate + sampleRand:sampleRand]; } - (instancetype)initWithName:(NSString *)name @@ -45,7 +65,36 @@ - (instancetype)initWithName:(NSString *)name traceId:traceId spanId:spanId parentSpanId:parentSpanId - parentSampled:parentSampled]; + sampled:kSentrySampleDecisionUndecided + parentSampled:parentSampled + sampleRate:nil + parentSampleRate:nil + sampleRand:nil + parentSampleRand:nil]; +} + +- (instancetype)initWithName:(NSString *)name + operation:(NSString *)operation + traceId:(SentryId *)traceId + spanId:(SentrySpanId *)spanId + parentSpanId:(nullable SentrySpanId *)parentSpanId + parentSampled:(SentrySampleDecision)parentSampled + parentSampleRate:(nullable NSNumber *)parentSampleRate + parentSampleRand:(nullable NSNumber *)parentSampleRand +{ + return [self initWithName:name + nameSource:kSentryTransactionNameSourceCustom + operation:operation + origin:SentryTraceOriginManual + traceId:traceId + spanId:spanId + parentSpanId:parentSpanId + sampled:kSentrySampleDecisionUndecided + parentSampled:parentSampled + sampleRate:nil + parentSampleRate:parentSampleRate + sampleRand:nil + parentSampleRand:parentSampleRand]; } #pragma mark - Private @@ -55,12 +104,13 @@ - (instancetype)initWithName:(NSString *)name operation:(NSString *)operation origin:(NSString *)origin { - if (self = [super initWithOperation:operation - origin:origin - sampled:kSentryDefaultSamplingDecision]) { - [self commonInitWithName:name source:source parentSampled:kSentryDefaultSamplingDecision]; - } - return self; + return [self initWithName:name + nameSource:source + operation:operation + origin:origin + sampled:kSentryDefaultSamplingDecision + sampleRate:nil + sampleRand:nil]; } - (instancetype)initWithName:(NSString *)name @@ -68,21 +118,31 @@ - (instancetype)initWithName:(NSString *)name operation:(NSString *)operation origin:(NSString *)origin sampled:(SentrySampleDecision)sampled + sampleRate:(nullable NSNumber *)sampleRate + sampleRand:(nullable NSNumber *)sampleRand { if (self = [super initWithOperation:operation origin:origin sampled:sampled]) { - [self commonInitWithName:name source:source parentSampled:kSentryDefaultSamplingDecision]; + [self commonInitWithName:name + source:source + sampleRate:sampleRate + sampleRand:sampleRand + parentSampled:kSentryDefaultSamplingDecision + parentSampleRate:NULL + parentSampleRand:NULL]; } return self; } - (instancetype)initWithName:(NSString *)name nameSource:(SentryTransactionNameSource)source - operation:(nonnull NSString *)operation + operation:(NSString *)operation origin:(NSString *)origin traceId:(SentryId *)traceId spanId:(SentrySpanId *)spanId parentSpanId:(nullable SentrySpanId *)parentSpanId parentSampled:(SentrySampleDecision)parentSampled + parentSampleRate:(nullable NSNumber *)parentSampleRate + parentSampleRand:(nullable NSNumber *)parentSampleRand; { if (self = [super initWithTraceId:traceId spanId:spanId @@ -90,8 +150,14 @@ - (instancetype)initWithName:(NSString *)name operation:operation spanDescription:nil origin:origin - sampled:kSentryDefaultSamplingDecision]) { - [self commonInitWithName:name source:source parentSampled:parentSampled]; + sampled:kSentrySampleDecisionUndecided]) { + [self commonInitWithName:name + source:source + sampleRate:nil + sampleRand:nil + parentSampled:parentSampled + parentSampleRate:parentSampleRate + parentSampleRand:parentSampleRand]; } return self; } @@ -105,6 +171,10 @@ - (instancetype)initWithName:(NSString *)name parentSpanId:(nullable SentrySpanId *)parentSpanId sampled:(SentrySampleDecision)sampled parentSampled:(SentrySampleDecision)parentSampled + sampleRate:(nullable NSNumber *)sampleRate + parentSampleRate:(nullable NSNumber *)parentSampleRate + sampleRand:(nullable NSNumber *)sampleRand + parentSampleRand:(nullable NSNumber *)parentSampleRand { if (self = [super initWithTraceId:traceId spanId:spanId @@ -113,10 +183,13 @@ - (instancetype)initWithName:(NSString *)name spanDescription:nil origin:origin sampled:sampled]) { - _name = [NSString stringWithString:name]; - _nameSource = source; - self.parentSampled = parentSampled; - [self getThreadInfo]; + [self commonInitWithName:name + source:source + sampleRate:sampleRate + sampleRand:sampleRand + parentSampled:parentSampled + parentSampleRate:parentSampleRate + parentSampleRand:parentSampleRand]; } return self; } @@ -138,11 +211,19 @@ - (SentryThread *)sentry_threadInfo - (void)commonInitWithName:(NSString *)name source:(SentryTransactionNameSource)source + sampleRate:(nullable NSNumber *)sampleRate + sampleRand:(nullable NSNumber *)sampleRand parentSampled:(SentrySampleDecision)parentSampled + parentSampleRate:(nullable NSNumber *)parentSampleRate + parentSampleRand:(nullable NSNumber *)parentSampleRand { _name = [NSString stringWithString:name]; _nameSource = source; + self.sampleRate = sampleRate; + self.sampleRand = sampleRand; self.parentSampled = parentSampled; + self.parentSampleRate = parentSampleRate; + self.parentSampleRand = parentSampleRand; [self getThreadInfo]; SENTRY_LOG_DEBUG(@"Created transaction context with name %@", name); } diff --git a/Pods/Sentry/Sources/Sentry/SentryTransportAdapter.m b/Pods/Sentry/Sources/Sentry/SentryTransportAdapter.m index 1e65b46ab..1c6eac965 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTransportAdapter.m +++ b/Pods/Sentry/Sources/Sentry/SentryTransportAdapter.m @@ -3,12 +3,10 @@ #import "SentryEvent.h" #import "SentryOptions.h" #import "SentryUserFeedback.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryTransportAdapter () +@interface SentryTransportAdapter () @property (nonatomic, strong) NSArray> *transports; @property (nonatomic, strong) SentryOptions *options; @@ -78,6 +76,23 @@ - (void)sendEvent:(SentryEvent *)event [self sendEnvelope:envelope]; } +- (void)storeEvent:(SentryEvent *)event traceContext:(nullable SentryTraceContext *)traceContext +{ + SentryEnvelopeItem *item = [[SentryEnvelopeItem alloc] initWithEvent:event]; + + SentryEnvelopeHeader *envelopeHeader = [[SentryEnvelopeHeader alloc] initWithId:event.eventId + traceContext:traceContext]; + + SentryEnvelope *envelope = [[SentryEnvelope alloc] initWithHeader:envelopeHeader + items:@[ item ]]; + + for (id transport in self.transports) { + [transport storeEnvelope:envelope]; + } +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" - (void)sendUserFeedback:(SentryUserFeedback *)userFeedback { SentryEnvelopeItem *item = [[SentryEnvelopeItem alloc] initWithUserFeedback:userFeedback]; @@ -87,6 +102,7 @@ - (void)sendUserFeedback:(SentryUserFeedback *)userFeedback singleItem:item]; [self sendEnvelope:envelope]; } +#pragma clang diagnostic pop - (void)sendEnvelope:(SentryEnvelope *)envelope { diff --git a/Pods/Sentry/Sources/Sentry/SentryTransportFactory.m b/Pods/Sentry/Sources/Sentry/SentryTransportFactory.m index 6958e3c78..983d76a27 100644 --- a/Pods/Sentry/Sources/Sentry/SentryTransportFactory.m +++ b/Pods/Sentry/Sources/Sentry/SentryTransportFactory.m @@ -13,12 +13,10 @@ #import "SentryRetryAfterHeaderParser.h" #import "SentrySpotlightTransport.h" #import "SentryTransport.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface -SentryTransportFactory () +@interface SentryTransportFactory () @end @@ -26,7 +24,7 @@ @implementation SentryTransportFactory + (NSArray> *)initTransports:(SentryOptions *)options sentryFileManager:(SentryFileManager *)sentryFileManager - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider + rateLimits:(id)rateLimits { NSURLSession *session; @@ -43,24 +41,13 @@ @implementation SentryTransportFactory id requestManager = [[SentryQueueableRequestManager alloc] initWithSession:session]; - SentryHttpDateParser *httpDateParser = [[SentryHttpDateParser alloc] init]; - SentryRetryAfterHeaderParser *retryAfterHeaderParser = - [[SentryRetryAfterHeaderParser alloc] initWithHttpDateParser:httpDateParser - currentDateProvider:currentDateProvider]; - SentryRateLimitParser *rateLimitParser = - [[SentryRateLimitParser alloc] initWithCurrentDateProvider:currentDateProvider]; - id rateLimits = - [[SentryDefaultRateLimits alloc] initWithRetryAfterHeaderParser:retryAfterHeaderParser - andRateLimitParser:rateLimitParser - currentDateProvider:currentDateProvider]; - SentryEnvelopeRateLimit *envelopeRateLimit = [[SentryEnvelopeRateLimit alloc] initWithRateLimits:rateLimits]; dispatch_queue_attr_t attributes = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, DISPATCH_QUEUE_PRIORITY_LOW, 0); SentryDispatchQueueWrapper *dispatchQueueWrapper = - [[SentryDispatchQueueWrapper alloc] initWithName:"sentry-http-transport" + [[SentryDispatchQueueWrapper alloc] initWithName:"io.sentry.http-transport" attributes:attributes]; SentryNSURLRequestBuilder *requestBuilder = [[SentryNSURLRequestBuilder alloc] init]; diff --git a/Pods/Sentry/Sources/Sentry/SentryUIApplication.m b/Pods/Sentry/Sources/Sentry/SentryUIApplication.m index cfc1c9516..6e465ac70 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUIApplication.m +++ b/Pods/Sentry/Sources/Sentry/SentryUIApplication.m @@ -122,12 +122,12 @@ - (UIApplication *)sharedApplication [SentryDependencyContainer.sharedInstance.dispatchQueueWrapper dispatchSyncOnMainQueue:^{ - NSArray *viewControllers + NSArray *viewControllers = SentryDependencyContainer.sharedInstance.application.relevantViewControllers; NSMutableArray *vcsNames = [[NSMutableArray alloc] initWithCapacity:viewControllers.count]; - for (id vc in viewControllers) { - [vcsNames addObject:[SwiftDescriptor getObjectClassName:vc]]; + for (UIViewController *vc in viewControllers) { + [vcsNames addObject:[SwiftDescriptor getViewControllerClassName:vc]]; } result = [NSArray arrayWithArray:vcsNames]; } diff --git a/Pods/Sentry/Sources/Sentry/SentryUIDeviceWrapper.m b/Pods/Sentry/Sources/Sentry/SentryUIDeviceWrapper.m index 22854e6ce..44c0d3184 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUIDeviceWrapper.m +++ b/Pods/Sentry/Sources/Sentry/SentryUIDeviceWrapper.m @@ -6,8 +6,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryUIDeviceWrapper () +@interface SentryUIDeviceWrapper () @property (nonatomic) BOOL cleanupDeviceOrientationNotifications; @property (nonatomic) BOOL cleanupBatteryMonitoring; @property (nonatomic, copy) NSString *systemVersion; diff --git a/Pods/Sentry/Sources/Sentry/SentryUIEventTracker.m b/Pods/Sentry/Sources/Sentry/SentryUIEventTracker.m index d11c36b20..b4420b1b1 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUIEventTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryUIEventTracker.m @@ -2,10 +2,10 @@ #if SENTRY_HAS_UIKIT +# import "SentrySpanOperation.h" # import "SentrySwizzleWrapper.h" # import # import -# import # import NS_ASSUME_NONNULL_BEGIN @@ -13,19 +13,22 @@ static NSString *const SentryUIEventTrackerSwizzleSendAction = @"SentryUIEventTrackerSwizzleSendAction"; -@interface -SentryUIEventTracker () +@interface SentryUIEventTracker () @property (nonatomic, strong) id uiEventTrackerMode; @end -@implementation SentryUIEventTracker +@implementation SentryUIEventTracker { + BOOL _reportAccessibilityIdentifier; +} - (instancetype)initWithMode:(id)mode + reportAccessibilityIdentifier:(BOOL)report { if (self = [super init]) { self.uiEventTrackerMode = mode; + _reportAccessibilityIdentifier = report; } return self; } @@ -74,7 +77,7 @@ - (void)sendActionCallback:(NSString *)action NSString *operation = [self getOperation:sender]; NSString *accessibilityIdentifier = nil; - if ([[sender class] isSubclassOfClass:[UIView class]]) { + if (_reportAccessibilityIdentifier && [[sender class] isSubclassOfClass:[UIView class]]) { UIView *view = sender; accessibilityIdentifier = view.accessibilityIdentifier; } @@ -97,10 +100,10 @@ - (NSString *)getOperation:(id)sender [senderClass isSubclassOfClass:[UIBarButtonItem class]] || [senderClass isSubclassOfClass:[UISegmentedControl class]] || [senderClass isSubclassOfClass:[UIPageControl class]]) { - return SentrySpanOperationUIActionClick; + return SentrySpanOperationUiActionClick; } - return SentrySpanOperationUIAction; + return SentrySpanOperationUiAction; } /** @@ -129,10 +132,10 @@ - (NSString *)getTransactionName:(NSString *)action target:(NSString *)target + (BOOL)isUIEventOperation:(NSString *)operation { - if ([operation isEqualToString:SentrySpanOperationUIAction]) { + if ([operation isEqualToString:SentrySpanOperationUiAction]) { return YES; } - if ([operation isEqualToString:SentrySpanOperationUIActionClick]) { + if ([operation isEqualToString:SentrySpanOperationUiActionClick]) { return YES; } return NO; diff --git a/Pods/Sentry/Sources/Sentry/SentryUIEventTrackerTransactionMode.m b/Pods/Sentry/Sources/Sentry/SentryUIEventTrackerTransactionMode.m index 095040c1a..cb5350033 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUIEventTrackerTransactionMode.m +++ b/Pods/Sentry/Sources/Sentry/SentryUIEventTrackerTransactionMode.m @@ -2,6 +2,7 @@ #if SENTRY_HAS_UIKIT +# import "SentrySwift.h" # import # import # import @@ -9,15 +10,14 @@ # import # import # import -# import -# import +# import +# import # import # import NS_ASSUME_NONNULL_BEGIN -@interface -SentryUIEventTrackerTransactionMode () +@interface SentryUIEventTrackerTransactionMode () @property (nonatomic, assign) NSTimeInterval idleTimeout; @property (nullable, nonatomic, strong) NSMutableArray *activeTransactions; @@ -37,7 +37,7 @@ - (instancetype)initWithIdleTimeout:(NSTimeInterval)idleTimeout - (void)handleUIEvent:(NSString *)action operation:(NSString *)operation - accessibilityIdentifier:(NSString *)accessibilityIdentifier + accessibilityIdentifier:(nullable NSString *)accessibilityIdentifier { // There might be more active transactions stored, but only the last one might still be @@ -52,7 +52,7 @@ - (void)handleUIEvent:(NSString *)action if (sameAction) { SENTRY_LOG_DEBUG(@"Dispatching idle timeout for transaction with span id %@", currentActiveTransaction.spanId.sentrySpanIdString); - [currentActiveTransaction dispatchIdleTimeout]; + [currentActiveTransaction startIdleTimeout]; return; } @@ -68,32 +68,41 @@ - (void)handleUIEvent:(NSString *)action [[SentryTransactionContext alloc] initWithName:action nameSource:kSentryTransactionNameSourceComponent operation:operation - origin:SentryTraceOriginUIEventTracker]; - - __block SentryTracer *transaction; - [SentrySDK.currentHub.scope useSpan:^(id _Nullable span) { - BOOL ongoingScreenLoadTransaction - = span != nil && [span.operation isEqualToString:SentrySpanOperationUILoad]; - BOOL ongoingManualTransaction = span != nil - && ![span.operation isEqualToString:SentrySpanOperationUILoad] - && ![span.operation containsString:SentrySpanOperationUIAction]; - - BOOL bindToScope = !ongoingScreenLoadTransaction && !ongoingManualTransaction; - - transaction = [SentrySDK.currentHub - startTransactionWithContext:context - bindToScope:bindToScope - customSamplingContext:@{} - configuration:[SentryTracerConfiguration configurationWithBlock:^( - SentryTracerConfiguration *config) { - config.idleTimeout = self.idleTimeout; - config.waitForChildren = YES; - }]]; - - SENTRY_LOG_DEBUG(@"Automatically started a new transaction with name: " - @"%@, bindToScope: %@", - action, bindToScope ? @"YES" : @"NO"); - }]; + origin:SentryTraceOriginAutoUiEventTracker]; + + id _Nullable currentSpan = [SentrySDK.currentHub.scope span]; + BOOL ongoingScreenLoadTransaction = false; + BOOL ongoingManualTransaction = false; + if (currentSpan != nil) { + ongoingScreenLoadTransaction = + [currentSpan.operation isEqualToString:SentrySpanOperationUiLoad]; + ongoingManualTransaction + = ![currentSpan.operation isEqualToString:SentrySpanOperationUiLoad] + && ![currentSpan.operation containsString:SentrySpanOperationUiAction]; + } + + // If there is an ongoing transaction on the scope, we don’t need to start a UI event + // transaction because it won’t have any child spans. Only transactions bound to the scope + // automatically receive child spans. As a result, the UI event transaction would time out and + // be discarded by the tracer due to the lack of children. + BOOL ongoingTransaction = ongoingScreenLoadTransaction || ongoingManualTransaction; + if (ongoingTransaction) { + SENTRY_LOG_DEBUG(@"Not starting a new UI event transaction because there is already an " + @"ongoing transaction bound to the scope."); + return; + } + + __block SentryTracer *transaction = [SentrySDK.currentHub + startTransactionWithContext:context + bindToScope:YES + customSamplingContext:@{} + configuration:[SentryTracerConfiguration configurationWithBlock:^( + SentryTracerConfiguration *config) { + config.idleTimeout = self.idleTimeout; + config.waitForChildren = YES; + }]]; + + SENTRY_LOG_DEBUG(@"Automatically started a new transaction with name: %@", action); if (accessibilityIdentifier) { [transaction setTagValue:accessibilityIdentifier forKey:@"accessibilityIdentifier"]; diff --git a/Pods/Sentry/Sources/Sentry/SentryUIEventTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryUIEventTrackingIntegration.m index e35db492b..0ce4a88b0 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUIEventTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryUIEventTrackingIntegration.m @@ -9,8 +9,7 @@ # import # import -@interface -SentryUIEventTrackingIntegration () +@interface SentryUIEventTrackingIntegration () @property (nonatomic, strong) SentryUIEventTracker *uiEventTracker; @@ -27,7 +26,9 @@ - (BOOL)installWithOptions:(SentryOptions *)options SentryUIEventTrackerTransactionMode *mode = [[SentryUIEventTrackerTransactionMode alloc] initWithIdleTimeout:options.idleTimeout]; - self.uiEventTracker = [[SentryUIEventTracker alloc] initWithMode:mode]; + self.uiEventTracker = + [[SentryUIEventTracker alloc] initWithMode:mode + reportAccessibilityIdentifier:options.reportAccessibilityIdentifier]; [self.uiEventTracker start]; diff --git a/Pods/Sentry/Sources/Sentry/SentryUIViewControllerPerformanceTracker.m b/Pods/Sentry/Sources/Sentry/SentryUIViewControllerPerformanceTracker.m index 636793b70..091ceb8ba 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUIViewControllerPerformanceTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryUIViewControllerPerformanceTracker.m @@ -9,56 +9,81 @@ # import "SentryPerformanceTracker.h" # import "SentrySDK+Private.h" # import "SentrySpanId.h" +# import "SentrySpanOperation.h" # import "SentrySwift.h" # import "SentryTimeToDisplayTracker.h" -# import "SentryTraceOrigins.h" +# import "SentryTraceOrigin.h" # import "SentryTracer.h" +# import "SentryWeakMap.h" # import -# import # import # import -@interface -SentryUIViewControllerPerformanceTracker () +// In a previous implementation, we used associated objects to store the time to display tracker, +// spanId, spans in execution, and layout subview spanId. However, this approach was prone to +// memory leaks and crashes due to accessing associated objects from different threads. +// +// See https://github.com/getsentry/sentry-cocoa/issues/5087 for reference. +// +// To address these issues, we switched to using a NSMapTable to store these values. +// This approach provides the following benefits: +// +// 1. Weak references to the keys: The NSMapTable allows us to store weak references to the keys, +// which means we don't need to remove the entries when the UIViewController is deallocated. +// +// 2. Thread safety: The NSMapTable is thread-safe, which means we can access it from different +// threads without the need for additional synchronization. +// +// Using a NSMapTable allows weak references to the keys, which means we don't need to remove the +// entries when the UIViewController is deallocated. +// +// DISCUSSION FROM NSMAPTABLE: +// Use of weak-to-strong map tables is not recommended. The strong values for weak keys which get +// zeroed out continue to be maintained until the map table resizes itself. +// +// To avoid this issue, we will prune the maps when we access them. This means that we will +// remove any entries with weak keys that have been deallocated. This will ensure that we don't +// keep any references to deallocated objects in the map tables and have a memory leak. + +@interface SentryUIViewControllerPerformanceTracker () @property (nonatomic, strong) SentryPerformanceTracker *tracker; @property (nullable, nonatomic, weak) SentryTimeToDisplayTracker *currentTTDTracker; @property (nonatomic, strong, readonly) SentryDispatchQueueWrapper *dispatchQueueWrapper; +@property (nonatomic, strong) + SentryWeakMap *ttdTrackers; +@property (nonatomic, strong) SentryWeakMap *spanIds; +@property (nonatomic, strong) + SentryWeakMap *> *spansInExecution; +@property (nonatomic, strong) + SentryWeakMap *layoutSubviewSpanIds; + @end @implementation SentryUIViewControllerPerformanceTracker -+ (instancetype)shared -{ - static SentryUIViewControllerPerformanceTracker *instance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); - return instance; -} - -- (instancetype)init +- (instancetype)initWithTracker:(SentryPerformanceTracker *)tracker + dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper { if (self = [super init]) { - self.tracker = SentryPerformanceTracker.shared; + self.tracker = tracker; SentryOptions *options = [SentrySDK options]; self.inAppLogic = [[SentryInAppLogic alloc] initWithInAppIncludes:options.inAppIncludes inAppExcludes:options.inAppExcludes]; - _enableWaitForFullDisplay = NO; - _dispatchQueueWrapper = SentryDependencyContainer.sharedInstance.dispatchQueueWrapper; + _alwaysWaitForFullDisplay = NO; + _dispatchQueueWrapper = dispatchQueueWrapper; + + _ttdTrackers = [[SentryWeakMap alloc] init]; + _spanIds = [[SentryWeakMap alloc] init]; + _spansInExecution = [[SentryWeakMap alloc] init]; + _layoutSubviewSpanIds = [[SentryWeakMap alloc] init]; } return self; } -- (SentrySpan *)viewControllerPerformanceSpan:(UIViewController *)controller -{ - SentrySpanId *spanId - = objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID); - return [self.tracker getSpan:spanId]; -} - - (void)viewControllerLoadView:(UIViewController *)controller callbackToOrigin:(void (^)(void))callbackToOrigin { @@ -69,13 +94,25 @@ - (void)viewControllerLoadView:(UIViewController *)controller return; } + SentryOptions *options = [SentrySDK options]; + + if ([SentrySwizzleClassNameExclude + shouldExcludeClassWithClassName:NSStringFromClass([controller class]) + swizzleClassNameExcludes:options.swizzleClassNameExcludes]) { + SENTRY_LOG_DEBUG(@"Won't track view controller because it's excluded with the option " + @"swizzleClassNameExcludes: %@", + controller); + callbackToOrigin(); + return; + } + + SENTRY_LOG_DEBUG(@"Tracking UIViewController.loadView for view controller: %@", controller); [self limitOverride:@"loadView" target:controller callbackToOrigin:callbackToOrigin block:^{ - SENTRY_LOG_DEBUG(@"Tracking loadView"); - [self createTransaction:controller]; - [self createTimeToDisplay:controller]; + SENTRY_LOG_DEBUG(@"Tracking loadView for view controller: %@", controller); + [self startRootSpanFor:controller]; [self measurePerformance:@"loadView" target:controller callbackToOrigin:callbackToOrigin]; @@ -85,50 +122,64 @@ - (void)viewControllerLoadView:(UIViewController *)controller - (void)viewControllerViewDidLoad:(UIViewController *)controller callbackToOrigin:(void (^)(void))callbackToOrigin { + SENTRY_LOG_DEBUG(@"Tracking UIViewController.viewDidLoad for view controller: %@", controller); [self limitOverride:@"viewDidLoad" target:controller callbackToOrigin:callbackToOrigin block:^{ - SENTRY_LOG_DEBUG(@"Tracking viewDidLoad"); - [self createTransaction:controller]; + SENTRY_LOG_DEBUG( + @"Tracking viewDidLoad for view controller: %@", controller); + [self startRootSpanFor:controller]; [self measurePerformance:@"viewDidLoad" target:controller callbackToOrigin:callbackToOrigin]; }]; } -- (void)createTransaction:(UIViewController *)controller +- (void)startRootSpanFor:(UIViewController *)controller { - SentrySpanId *spanId - = objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID); + SENTRY_LOG_DEBUG(@"Starting root span for view controller: %@", controller); + SentrySpanId *_Nullable spanId = [self getSpanIdForViewController:controller]; // If the user manually calls loadView outside the lifecycle we don't start a new transaction // and override the previous id stored. if (spanId == nil) { - NSString *name = [SwiftDescriptor getObjectClassName:controller]; + SENTRY_LOG_DEBUG(@"No active span found for view controller: %@", controller); + + // The tracker must create a new transaction and bind it to the scope when there is no + // active span. If the user didn't call reportFullyDisplayed, the previous UIViewController + // transaction is still bound to the scope because it waits for its children to finish, + // including the TTFD span. Therefore, we need to finish the TTFD span so the tracer can + // finish and remove itself from the scope. We don't need to finish the transaction because + // we already finished it in viewControllerViewDidAppear. + if (self.tracker.activeSpanId == nil) { + SENTRY_LOG_DEBUG(@"Tracker has no active span, finishing TTFD tracker"); + [self.currentTTDTracker finishSpansIfNotFinished]; + } + + NSString *name = [SwiftDescriptor getViewControllerClassName:controller]; spanId = [self.tracker startSpanWithName:name nameSource:kSentryTransactionNameSourceComponent - operation:SentrySpanOperationUILoad + operation:SentrySpanOperationUiLoad origin:SentryTraceOriginAutoUIViewController]; - SENTRY_LOG_DEBUG(@"Started span with id %@ to track view controller %@.", - spanId.sentrySpanIdString, name); - // Use the target itself to store the spanId to avoid using a global mapper. - objc_setAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID, spanId, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); + [self setSpanIdForViewController:controller spanId:spanId]; // If there is no active span in the queue push this transaction // to serve as an umbrella transaction that will capture every span // happening while the transaction is active. if (self.tracker.activeSpanId == nil) { + SENTRY_LOG_DEBUG(@"Started new transaction with id %@ to track view controller %@.", + spanId.sentrySpanIdString, name); [self.tracker pushActiveSpan:spanId]; + } else { + SENTRY_LOG_DEBUG(@"Started child span with id %@ to track view controller %@.", + spanId.sentrySpanIdString, name); } } -} -- (void)createTimeToDisplay:(UIViewController *)controller -{ - SentrySpan *vcSpan = [self viewControllerPerformanceSpan:controller]; + spanId = [self getSpanIdForViewController:controller]; + SentrySpan *_Nullable vcSpan = [self.tracker getSpan:spanId]; if (![vcSpan isKindOfClass:[SentryTracer self]]) { // Since TTID and TTFD are meant to the whole screen @@ -136,42 +187,85 @@ - (void)createTimeToDisplay:(UIViewController *)controller return; } - if (objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_TTD_TRACKER)) { + if ([self getTimeToDisplayTrackerForController:controller]) { // Already tracking time to display, not creating a new tracker. // This may happen if user manually call `loadView` from a view controller more than once. + SENTRY_LOG_DEBUG( + @"Already tracking time to display for view controller %@ using tracker %@", controller, + self.currentTTDTracker); return; } SentryTimeToDisplayTracker *ttdTracker = - [[SentryTimeToDisplayTracker alloc] initForController:controller - waitForFullDisplay:self.enableWaitForFullDisplay - dispatchQueueWrapper:_dispatchQueueWrapper]; + [self startTimeToDisplayTrackerForScreen:[SwiftDescriptor getObjectClassName:controller] + waitForFullDisplay:self.alwaysWaitForFullDisplay + tracer:(SentryTracer *)vcSpan]; - if ([ttdTracker startForTracer:(SentryTracer *)vcSpan]) { - objc_setAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_TTD_TRACKER, ttdTracker, - OBJC_ASSOCIATION_ASSIGN); - - self.currentTTDTracker = ttdTracker; - } else { - self.currentTTDTracker = nil; + if (ttdTracker) { + [self setTimeToDisplayTrackerForController:controller ttdTracker:ttdTracker]; } } - (void)reportFullyDisplayed { + SENTRY_LOG_DEBUG(@"Reporting fully displayed"); + SentryTimeToDisplayTracker *tracker = self.currentTTDTracker; + if (tracker == nil) { + SENTRY_LOG_DEBUG(@"No screen transaction being tracked right now.") + return; + } + if (!tracker.waitForFullDisplay) { + SENTRY_LOG_WARN(@"Transaction is not waiting for full display report. You can enable " + @"`enableTimeToFullDisplay` option, or use the waitForFullDisplay " + @"property in our `SentryTracedView` view for SwiftUI."); + return; + } + + // Report the fully displayed time, then discard the tracker, because it should not be used + // after TTFD is reported. + SENTRY_LOG_DEBUG(@"Reported fully displayed time, discarding TTFD tracker"); [self.currentTTDTracker reportFullyDisplayed]; } +- (nullable SentryTimeToDisplayTracker *)startTimeToDisplayTrackerForScreen:(NSString *)screenName + waitForFullDisplay:(BOOL)waitForFullDisplay + tracer:(SentryTracer *)tracer +{ + SENTRY_LOG_DEBUG(@"Starting TTFD tracker for screen: %@, waitForFullDisplay: %@, tracer: %@", + screenName, waitForFullDisplay ? @"YES" : @"NO", tracer); + [self.currentTTDTracker finishSpansIfNotFinished]; + + SentryTimeToDisplayTracker *ttdTracker = + [[SentryTimeToDisplayTracker alloc] initWithName:screenName + waitForFullDisplay:waitForFullDisplay + dispatchQueueWrapper:_dispatchQueueWrapper]; + + // If the tracker did not start, it means that the tracer can be discarded. + if ([ttdTracker startForTracer:tracer] == NO) { + SENTRY_LOG_DEBUG(@"TTFD tracker did not start, discarding current tracker"); + self.currentTTDTracker = nil; + return nil; + } + + self.currentTTDTracker = ttdTracker; + return ttdTracker; +} + - (void)viewControllerViewWillAppear:(UIViewController *)controller callbackToOrigin:(void (^)(void))callbackToOrigin { + SENTRY_LOG_DEBUG( + @"Tracking UIViewController.viewWillAppear for view controller: %@", controller); void (^limitOverrideBlock)(void) = ^{ - SentrySpanId *spanId - = objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID); + SENTRY_LOG_DEBUG( + @"Tracking UIViewController.viewWillAppear for controller: %@", controller); + SentrySpanId *_Nullable spanId = [self getSpanIdForViewController:controller]; if (spanId == nil || ![self.tracker isSpanAlive:spanId]) { // We are no longer tracking this UIViewController, just call the base // method. + SENTRY_LOG_DEBUG( + @"Not tracking UIViewController.viewWillAppear because there is no active span."); callbackToOrigin(); return; } @@ -180,16 +274,13 @@ - (void)viewControllerViewWillAppear:(UIViewController *)controller SENTRY_LOG_DEBUG(@"Tracking UIViewController.viewWillAppear"); [self.tracker measureSpanWithDescription:@"viewWillAppear" nameSource:kSentryTransactionNameSourceComponent - operation:SentrySpanOperationUILoad + operation:SentrySpanOperationUiLoad origin:SentryTraceOriginAutoUIViewController inBlock:callbackToOrigin]; }; [self.tracker activateSpan:spanId duringBlock:duringBlock]; - - SentryTimeToDisplayTracker *ttdTracker - = objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_TTD_TRACKER); - [ttdTracker reportInitialDisplay]; + [self reportInitialDisplayForController:controller]; }; [self limitOverride:@"viewWillAppear" @@ -201,7 +292,8 @@ - (void)viewControllerViewWillAppear:(UIViewController *)controller - (void)viewControllerViewDidAppear:(UIViewController *)controller callbackToOrigin:(void (^)(void))callbackToOrigin { - SENTRY_LOG_DEBUG(@"Tracking UIViewController.viewDidAppear"); + SENTRY_LOG_DEBUG( + @"Tracking UIViewController.viewDidAppear for view controller: %@", controller); [self finishTransaction:controller status:kSentrySpanStatusOk lifecycleMethod:@"viewDidAppear" @@ -210,10 +302,10 @@ - (void)viewControllerViewDidAppear:(UIViewController *)controller /** * According to the apple docs, see - * https://developer.apple.com/documentation/uikit/uiviewcontroller: Not all ‘will’ callback methods - * are paired with only a ‘did’ callback method. You need to ensure that if you start a process in a - * ‘will’ callback method, you end the process in both the corresponding ‘did’ and the opposite - * ‘will’ callback method. + * https://developer.apple.com/documentation/uikit/uiviewcontroller: Not all ‘will’ callback + * methods are paired with only a ‘did’ callback method. You need to ensure that if you start a + * process in a ‘will’ callback method, you end the process in both the corresponding ‘did’ and + * the opposite ‘will’ callback method. * * As stated above @c viewWillAppear doesn't need to be followed by a @c viewDidAppear. A * @c viewWillAppear can also be followed by a @c viewWillDisappear. Therefore, we finish the @@ -223,7 +315,8 @@ - (void)viewControllerViewDidAppear:(UIViewController *)controller - (void)viewControllerViewWillDisappear:(UIViewController *)controller callbackToOrigin:(void (^)(void))callbackToOrigin { - + SENTRY_LOG_DEBUG( + @"Tracking UIViewController.viewWillDisappear for view controller: %@", controller); [self finishTransaction:controller status:kSentrySpanStatusCancelled lifecycleMethod:@"viewWillDisappear" @@ -235,13 +328,15 @@ - (void)finishTransaction:(UIViewController *)controller lifecycleMethod:(NSString *)lifecycleMethod callbackToOrigin:(void (^)(void))callbackToOrigin { + SENTRY_LOG_DEBUG(@"Finishing transaction for view controller: %@", controller); void (^limitOverrideBlock)(void) = ^{ - SentrySpanId *spanId - = objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID); + SentrySpanId *_Nullable spanId = [self getSpanIdForViewController:controller]; if (spanId == nil || ![self.tracker isSpanAlive:spanId]) { // We are no longer tracking this UIViewController, just call the base // method. + SENTRY_LOG_DEBUG(@"Not tracking UIViewController.%@ because there is no active span.", + lifecycleMethod); callbackToOrigin(); return; } @@ -249,7 +344,7 @@ - (void)finishTransaction:(UIViewController *)controller void (^duringBlock)(void) = ^{ [self.tracker measureSpanWithDescription:lifecycleMethod nameSource:kSentryTransactionNameSourceComponent - operation:SentrySpanOperationUILoad + operation:SentrySpanOperationUiLoad origin:SentryTraceOriginAutoUIViewController inBlock:callbackToOrigin]; }; @@ -259,15 +354,15 @@ - (void)finishTransaction:(UIViewController *)controller // If the current controller span has no parent, // it means it is the root transaction and need to be pop from the queue. if (vcSpan.parentSpanId == nil) { + SENTRY_LOG_DEBUG(@"Popping active span for controller: %@", controller); [self.tracker popActiveSpan]; } // If we are still tracking this UIViewController finish the transaction // and remove associated span id. + SENTRY_LOG_DEBUG(@"Finishing span for view controller: %@", controller); [self.tracker finishSpan:spanId withStatus:status]; - - objc_setAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID, nil, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); + [self setSpanIdForViewController:controller spanId:nil]; }; [self limitOverride:lifecycleMethod @@ -279,13 +374,16 @@ - (void)finishTransaction:(UIViewController *)controller - (void)viewControllerViewWillLayoutSubViews:(UIViewController *)controller callbackToOrigin:(void (^)(void))callbackToOrigin { + SENTRY_LOG_DEBUG( + @"Tracking UIViewController.viewWillLayoutSubviews for view controller: %@", controller); void (^limitOverrideBlock)(void) = ^{ - SentrySpanId *spanId - = objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID); + SentrySpanId *_Nullable spanId = [self getSpanIdForViewController:controller]; if (spanId == nil || ![self.tracker isSpanAlive:spanId]) { // We are no longer tracking this UIViewController, just call the base // method. + SENTRY_LOG_DEBUG(@"Not tracking UIViewController.viewWillLayoutSubviews because there " + @"is no active span."); callbackToOrigin(); return; } @@ -293,21 +391,28 @@ - (void)viewControllerViewWillLayoutSubViews:(UIViewController *)controller void (^duringBlock)(void) = ^{ [self.tracker measureSpanWithDescription:@"viewWillLayoutSubviews" nameSource:kSentryTransactionNameSourceComponent - operation:SentrySpanOperationUILoad + operation:SentrySpanOperationUiLoad origin:SentryTraceOriginAutoUIViewController inBlock:callbackToOrigin]; SentrySpanId *layoutSubViewId = [self.tracker startSpanWithName:@"layoutSubViews" nameSource:kSentryTransactionNameSourceComponent - operation:SentrySpanOperationUILoad + operation:SentrySpanOperationUiLoad origin:SentryTraceOriginAutoUIViewController]; - objc_setAssociatedObject(controller, - &SENTRY_UI_PERFORMANCE_TRACKER_LAYOUTSUBVIEW_SPAN_ID, layoutSubViewId, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); + [self setLayoutSubviewSpanID:controller spanId:layoutSubViewId]; }; [self.tracker activateSpan:spanId duringBlock:duringBlock]; + + // According to the Apple docs + // (https://developer.apple.com/documentation/uikit/uiviewcontroller/1621510-viewwillappear), + // viewWillAppear should be called for before the UIViewController is added to the view + // hierarchy. There are some edge cases, though, when this doesn't happen, and we saw + // customers' transactions also proofing this. Therefore, we must also report the + // initial display here, as the customers' transactions had spans for + // `viewWillLayoutSubviews`. + [self reportInitialDisplayForController:controller]; }; [self limitOverride:@"viewWillLayoutSubviews" @@ -319,34 +424,38 @@ - (void)viewControllerViewWillLayoutSubViews:(UIViewController *)controller - (void)viewControllerViewDidLayoutSubViews:(UIViewController *)controller callbackToOrigin:(void (^)(void))callbackToOrigin { + SENTRY_LOG_DEBUG( + @"Tracking UIViewController.viewDidLayoutSubviews for view controller: %@", controller); void (^limitOverrideBlock)(void) = ^{ - SentrySpanId *spanId - = objc_getAssociatedObject(controller, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID); + SentrySpanId *_Nullable spanId = [self getSpanIdForViewController:controller]; if (spanId == nil || ![self.tracker isSpanAlive:spanId]) { // We are no longer tracking this UIViewController, just call the base // method. + SENTRY_LOG_DEBUG(@"Not tracking UIViewController.viewDidLayoutSubviews because there " + @"is no active span."); callbackToOrigin(); return; } void (^duringBlock)(void) = ^{ - SentrySpanId *layoutSubViewId = objc_getAssociatedObject( - controller, &SENTRY_UI_PERFORMANCE_TRACKER_LAYOUTSUBVIEW_SPAN_ID); + SentrySpanId *layoutSubViewId = + [self getLayoutSubviewSpanIdForViewController:controller]; if (layoutSubViewId != nil) { + SENTRY_LOG_DEBUG(@"Finishing layoutSubviews span id: %@, for view controller: %@", + layoutSubViewId.sentrySpanIdString, controller); [self.tracker finishSpan:layoutSubViewId]; } [self.tracker measureSpanWithDescription:@"viewDidLayoutSubviews" nameSource:kSentryTransactionNameSourceComponent - operation:SentrySpanOperationUILoad + operation:SentrySpanOperationUiLoad origin:SentryTraceOriginAutoUIViewController inBlock:callbackToOrigin]; - objc_setAssociatedObject(controller, - &SENTRY_UI_PERFORMANCE_TRACKER_LAYOUTSUBVIEW_SPAN_ID, nil, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); + // We need to remove the spanId for layoutSubviews, as it is not needed anymore. + [self setLayoutSubviewSpanID:controller spanId:nil]; }; [self.tracker activateSpan:spanId duringBlock:duringBlock]; @@ -359,9 +468,10 @@ - (void)viewControllerViewDidLayoutSubViews:(UIViewController *)controller } /** - * When a custom UIViewController is a subclass of another custom UIViewController, the SDK swizzles - * both functions, which would create one span for each UIViewController leading to duplicate spans - * in the transaction. To fix this, we only allow one span per lifecycle method at a time. + * When a custom UIViewController is a subclass of another custom UIViewController, the SDK + * swizzles both functions, which would create one span for each UIViewController leading to + * duplicate spans in the transaction. To fix this, we only allow one span per lifecycle method + * at a time. */ - (void)limitOverride:(NSString *)description target:(UIViewController *)viewController @@ -369,15 +479,11 @@ - (void)limitOverride:(NSString *)description block:(void (^)(void))block { - NSMutableSet *spansInExecution; - - spansInExecution = objc_getAssociatedObject( - viewController, &SENTRY_UI_PERFORMANCE_TRACKER_SPANS_IN_EXECUTION_SET); + NSMutableSet *spansInExecution = + [self getSpansInExecutionSetForViewController:viewController]; if (spansInExecution == nil) { spansInExecution = [[NSMutableSet alloc] init]; - objc_setAssociatedObject(viewController, - &SENTRY_UI_PERFORMANCE_TRACKER_SPANS_IN_EXECUTION_SET, spansInExecution, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); + [self setSpansInExecutionSetForViewController:viewController spansIds:spansInExecution]; } if (![spansInExecution containsObject:description]) { @@ -385,6 +491,9 @@ - (void)limitOverride:(NSString *)description block(); [spansInExecution removeObject:description]; } else { + SENTRY_LOG_DEBUG(@"Skipping tracking the method %@ for %@, cause we're already tracking it " + @"for a parent or child class.", + description, viewController); callbackToOrigin(); } } @@ -393,8 +502,9 @@ - (void)measurePerformance:(NSString *)description target:(UIViewController *)viewController callbackToOrigin:(void (^)(void))callbackToOrigin { - SentrySpanId *spanId - = objc_getAssociatedObject(viewController, &SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID); + SENTRY_LOG_DEBUG(@"Measuring performance for method: %@, for view controller: %@", description, + viewController); + SentrySpanId *spanId = [self getSpanIdForViewController:viewController]; if (spanId == nil) { SENTRY_LOG_DEBUG(@"No longer tracking UIViewController %@", viewController); @@ -402,13 +512,85 @@ - (void)measurePerformance:(NSString *)description } else { [self.tracker measureSpanWithDescription:description nameSource:kSentryTransactionNameSourceComponent - operation:SentrySpanOperationUILoad + operation:SentrySpanOperationUiLoad origin:SentryTraceOriginAutoUIViewController parentSpanId:spanId inBlock:callbackToOrigin]; } } +- (void)reportInitialDisplayForController:(NSObject *)controller +{ + SENTRY_LOG_DEBUG(@"Reporting initial display for controller: %@", controller); + if (self.currentTTDTracker == nil) { + SENTRY_LOG_DEBUG( + @"Can't report initial display, no screen transaction being tracked right now."); + return; + } + [self.currentTTDTracker reportInitialDisplay]; + SENTRY_LOG_DEBUG(@"Reported initial display for controller: %@", controller); +} + +// - MARK: - Getter and Setter Helpers + +- (SentryTimeToDisplayTracker *_Nullable)getTimeToDisplayTrackerForController: + (UIViewController *)controller +{ + SENTRY_LOG_DEBUG(@"Getting time to display tracker for controller: %@", controller); + return [self.ttdTrackers objectForKey:controller]; +} + +- (void)setTimeToDisplayTrackerForController:(UIViewController *)controller + ttdTracker:(SentryTimeToDisplayTracker *)ttdTracker +{ + SENTRY_LOG_DEBUG(@"Setting time to display tracker for controller: %@, ttdTracker: %@", + controller, ttdTracker); + [self.ttdTrackers setObject:ttdTracker forKey:controller]; +} + +- (SentrySpanId *_Nullable)getSpanIdForViewController:(UIViewController *)controller +{ + SENTRY_LOG_DEBUG(@"Getting span id for controller: %@", controller); + return [self.spanIds objectForKey:controller]; +} + +- (void)setSpanIdForViewController:(UIViewController *)controller + spanId:(SentrySpanId *_Nullable)spanId +{ + SENTRY_LOG_DEBUG( + @"Setting span id for controller: %@, spanId: %@", controller, spanId.sentrySpanIdString); + [self.spanIds setObject:spanId forKey:controller]; +} + +- (SentrySpanId *_Nullable)getLayoutSubviewSpanIdForViewController: + (UIViewController *_Nonnull)controller +{ + SENTRY_LOG_DEBUG(@"Getting layout subview span id for controller: %@", controller); + return [self.layoutSubviewSpanIds objectForKey:controller]; +} + +- (void)setLayoutSubviewSpanID:(UIViewController *_Nonnull)controller spanId:(SentrySpanId *)spanId +{ + SENTRY_LOG_DEBUG(@"Setting layout subview span id for controller: %@, spanId: %@", controller, + spanId.sentrySpanIdString); + [self.layoutSubviewSpanIds setObject:spanId forKey:controller]; +} + +- (NSMutableSet *_Nullable)getSpansInExecutionSetForViewController: + (UIViewController *)viewController +{ + SENTRY_LOG_DEBUG(@"Getting spans in execution set for controller: %@", viewController); + return [self.spansInExecution objectForKey:viewController]; +} + +- (void)setSpansInExecutionSetForViewController:(UIViewController *)viewController + spansIds:(NSMutableSet *)spanIds +{ + SENTRY_LOG_DEBUG( + @"Setting spans in execution set for controller: %@, spanIds: %@", viewController, spanIds); + [self.spansInExecution setObject:spanIds forKey:viewController]; +} + @end #endif // SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/SentryUIViewControllerSwizzling.m b/Pods/Sentry/Sources/Sentry/SentryUIViewControllerSwizzling.m index 45c25b75f..ba949d61b 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUIViewControllerSwizzling.m +++ b/Pods/Sentry/Sources/Sentry/SentryUIViewControllerSwizzling.m @@ -9,6 +9,7 @@ # import "SentryLog.h" # import "SentryNSProcessInfoWrapper.h" # import "SentrySubClassFinder.h" +# import "SentrySwift.h" # import "SentrySwizzle.h" # import "SentryUIViewControllerPerformanceTracker.h" # import @@ -31,13 +32,12 @@ * see https://github.com/getsentry/sentry-cocoa/issues/3763. This category doesn't contain any * functions and is safe to use. */ -@interface -UIApplication (SentryUIApplication) +@interface UIApplication (SentryUIApplication) @end -@interface -SentryUIViewControllerSwizzling () +@interface SentryUIViewControllerSwizzling () +@property (nonatomic, strong) SentryOptions *options; @property (nonatomic, strong) SentryInAppLogic *inAppLogic; @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueue; @property (nonatomic, strong) id objcRuntimeWrapper; @@ -58,6 +58,7 @@ - (instancetype)initWithOptions:(SentryOptions *)options binaryImageCache:(SentryBinaryImageCache *)binaryImageCache { if (self = [super init]) { + self.options = options; self.inAppLogic = [[SentryInAppLogic alloc] initWithInAppIncludes:options.inAppIncludes inAppExcludes:options.inAppExcludes]; self.dispatchQueue = dispatchQueue; @@ -79,12 +80,17 @@ - (instancetype)initWithOptions:(SentryOptions *)options - (void)start { for (NSString *inAppInclude in self.inAppLogic.inAppIncludes) { - NSString *pathToImage = [self.binaryImageCache pathForInAppInclude:inAppInclude]; - if (pathToImage != nil) { - [self swizzleUIViewControllersOfImage:pathToImage]; + NSSet *imagePathsToInAppInclude = + [self.binaryImageCache imagePathsForInAppInclude:inAppInclude]; + + if (imagePathsToInAppInclude.count > 0) { + for (NSString *imagePath in imagePathsToInAppInclude) { + [self swizzleUIViewControllersOfImage:imagePath]; + } } else { - SENTRY_LOG_WARN(@"Failed to find the binary image for inAppInclude <%@> and, therefore " - @"can't instrument UIViewControllers in that binary", + SENTRY_LOG_WARN( + @"Failed to find the binary image(s) for inAppInclude <%@> and, therefore " + @"can't instrument UIViewControllers in these binaries.", inAppInclude); } } @@ -99,9 +105,8 @@ - (void)start // twice. We could also use objc_getClassList to lookup sub classes of UIViewController, but // the lookup can take around 60ms, which is not acceptable. if (![self swizzleRootViewControllerFromUIApplication:app]) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: Failed to find root UIViewController " - @"from UIApplicationDelegate. Trying to use " - @"UISceneWillConnectNotification notification."); + SENTRY_LOG_DEBUG(@"Failed to find root UIViewController from UIApplicationDelegate. " + @"Trying to use UISceneWillConnectNotification notification."); if (@available(iOS 13.0, tvOS 13.0, *)) { [NSNotificationCenter.defaultCenter @@ -110,29 +115,30 @@ - (void)start name:UISceneWillConnectNotification object:nil]; } else { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: iOS version older then 13. There is " - @"no UISceneWillConnectNotification notification. Could not find " - @"a rootViewController"); + SENTRY_LOG_DEBUG( + @"iOS version older then 13. There is no UISceneWillConnectNotification " + @"notification. Could not find a rootViewController"); } } } [self swizzleUIViewController]; - SentryUIViewControllerPerformanceTracker.shared.inAppLogic = self.inAppLogic; + SentryUIViewControllerPerformanceTracker *performanceTracker = + [SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker]; + performanceTracker.inAppLogic = self.inAppLogic; } - (id)findApp { if (![UIApplication respondsToSelector:@selector(sharedApplication)]) { - SENTRY_LOG_DEBUG( - @"UIViewControllerSwizzling: UIApplication doesn't respond to sharedApplication."); + SENTRY_LOG_DEBUG(@"UIApplication doesn't respond to sharedApplication."); return nil; } UIApplication *app = [UIApplication performSelector:@selector(sharedApplication)]; if (app == nil) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: UIApplication.sharedApplication is nil."); + SENTRY_LOG_DEBUG(@"UIApplication.sharedApplication is nil."); return nil; } @@ -142,18 +148,17 @@ - (void)start - (void)swizzleUIViewControllersOfClassesInImageOf:(Class)class { if (class == NULL) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: class is NULL. Skipping swizzling of classes " - @"in same image."); + SENTRY_LOG_DEBUG(@"Class is NULL. Skipping swizzling of classes in same image."); return; } - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: Class to get the image name: %@", class); + SENTRY_LOG_DEBUG(@"Class to get the image name: %@", class); const char *imageNameAsCharArray = [self.objcRuntimeWrapper class_getImageName:class]; if (imageNameAsCharArray == NULL) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: Wasn't able to get image name of the class: " - @"%@. Skipping swizzling of classes in same image.", + SENTRY_LOG_DEBUG(@"Wasn't able to get image name of the class: %@. Skipping swizzling of " + @"classes in same image.", class); return; } @@ -162,9 +167,8 @@ - (void)swizzleUIViewControllersOfClassesInImageOf:(Class)class encoding:NSUTF8StringEncoding]; if (imageName == nil || imageName.length == 0) { - SENTRY_LOG_DEBUG( - @"UIViewControllerSwizzling: Wasn't able to get the app image name of the app " - @"delegate class: %@. Skipping swizzling of classes in same image.", + SENTRY_LOG_DEBUG(@"Wasn't able to get the app image name of the app delegate class: %@. " + @"Skipping swizzling of classes in same image.", class); return; } @@ -175,14 +179,12 @@ - (void)swizzleUIViewControllersOfClassesInImageOf:(Class)class - (void)swizzleUIViewControllersOfImage:(NSString *)imageName { if ([imageName containsString:@"UIKitCore"]) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: Skipping UIKitCore."); + SENTRY_LOG_DEBUG(@"Skipping UIKitCore."); return; } if ([self.imagesActedOnSubclassesOfUIViewControllers containsObject:imageName]) { - SENTRY_LOG_DEBUG( - @"UIViewControllerSwizzling: Already swizzled UIViewControllers in image: %@.", - imageName); + SENTRY_LOG_DEBUG(@"Already swizzled UIViewControllers in image: %@.", imageName); return; } @@ -225,15 +227,15 @@ - (void)swizzleRootViewControllerFromSceneDelegateNotification:(NSNotification * // The object of a UISceneWillConnectNotification should be a NSWindowScene if (![notification.object respondsToSelector:@selector(windows)]) { SENTRY_LOG_DEBUG( - @"UIViewControllerSwizzling: Failed to find root UIViewController from " - @"UISceneWillConnectNotification. Notification object has no windows property"); + @"Failed to find root UIViewController from UISceneWillConnectNotification. " + @"Notification object has no windows property"); return; } id windows = [notification.object performSelector:@selector(windows)]; if (![windows isKindOfClass:[NSArray class]]) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: Failed to find root UIViewController " - @"from UISceneWillConnectNotification. Windows is not an array"); + SENTRY_LOG_DEBUG(@"Failed to find root UIViewController from " + @"UISceneWillConnectNotification. Windows is not an array"); return; } @@ -244,9 +246,9 @@ - (void)swizzleRootViewControllerFromSceneDelegateNotification:(NSNotification * [self swizzleRootViewControllerAndDescendant:((UIWindow *)window).rootViewController]; } else { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: Failed to find root " - @"UIViewController from UISceneWillConnectNotification. Window is " - @"not a UIWindow class or the rootViewController is nil"); + SENTRY_LOG_DEBUG( + @"Failed to find root UIViewController from UISceneWillConnectNotification. " + @"Window is not a UIWindow class or the rootViewController is nil"); } } } @@ -255,29 +257,28 @@ - (void)swizzleRootViewControllerFromSceneDelegateNotification:(NSNotification * - (BOOL)swizzleRootViewControllerFromUIApplication:(id)app { if (app.delegate == nil) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: App delegate is nil. Skipping " - @"swizzleRootViewControllerFromAppDelegate."); + SENTRY_LOG_DEBUG( + @"App delegate is nil. Skipping swizzleRootViewControllerFromAppDelegate."); return NO; } // Check if delegate responds to window, which it doesn't have to. if (![app.delegate respondsToSelector:@selector(window)]) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: UIApplicationDelegate.window is nil. " - @"Skipping swizzleRootViewControllerFromAppDelegate."); + SENTRY_LOG_DEBUG(@"UIApplicationDelegate.window is nil. Skipping " + @"swizzleRootViewControllerFromAppDelegate."); return NO; } if (app.delegate.window == nil) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling: UIApplicationDelegate.window is nil. " - @"Skipping swizzleRootViewControllerFromAppDelegate."); + SENTRY_LOG_DEBUG(@"UIApplicationDelegate.window is nil. Skipping " + @"swizzleRootViewControllerFromAppDelegate."); return NO; } UIViewController *rootViewController = app.delegate.window.rootViewController; if (rootViewController == nil) { - SENTRY_LOG_DEBUG( - @"UIViewControllerSwizzling: UIApplicationDelegate.window.rootViewController is nil. " - @"Skipping swizzleRootViewControllerFromAppDelegate."); + SENTRY_LOG_DEBUG(@"UIApplicationDelegate.window.rootViewController is nil. Skipping " + @"swizzleRootViewControllerFromAppDelegate."); return NO; } @@ -291,16 +292,23 @@ - (void)swizzleRootViewControllerAndDescendant:(UIViewController *)rootViewContr NSArray *allViewControllers = [SentryViewController descendantsOfViewController:rootViewController]; + SENTRY_LOG_DEBUG(@"Found %lu descendants for RootViewController %@", allViewControllers.count, + rootViewController.description); + for (UIViewController *viewController in allViewControllers) { Class viewControllerClass = [viewController class]; if (viewControllerClass != nil) { - SENTRY_LOG_DEBUG(@"UIViewControllerSwizzling Calling swizzleRootViewController."); + SENTRY_LOG_DEBUG( + @"Calling swizzleRootViewController for %@", viewController.description); [self swizzleViewControllerSubClass:viewControllerClass]; // We can't get the image name with the app delegate class for some apps. Therefore, we // use the rootViewController and its subclasses as a fallback. The following method // ensures we don't swizzle ViewControllers of UIKit. [self swizzleUIViewControllersOfClassesInImageOf:viewControllerClass]; + } else { + SENTRY_LOG_WARN(@"ViewControllerClass was nil for UIViewController: %@", + viewController.description); } } } @@ -316,7 +324,7 @@ - (void)swizzleUIViewController SEL selector = NSSelectorFromString(@"loadView"); SentrySwizzleInstanceMethod(UIViewController.class, selector, SentrySWReturnType(void), SentrySWArguments(), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerLoadView:self callbackToOrigin:^{ SentrySWCallOriginal(); }]; }), @@ -325,8 +333,10 @@ - (void)swizzleUIViewController - (void)swizzleViewControllerSubClass:(Class)class { - if (![self shouldSwizzleViewController:class]) + if (![self shouldSwizzleViewController:class]) { + SENTRY_LOG_DEBUG(@"Skipping swizzling of class: %@", class); return; + } // This are the five main functions related to UI creation in a view controller. // We are swizzling it to track anything that happens inside one of this functions. @@ -343,6 +353,15 @@ - (void)swizzleViewControllerSubClass:(Class)class */ - (BOOL)shouldSwizzleViewController:(Class)class { + NSString *className = NSStringFromClass(class); + + BOOL shouldExcludeClassFromSwizzling = [SentrySwizzleClassNameExclude + shouldExcludeClassWithClassName:className + swizzleClassNameExcludes:self.options.swizzleClassNameExcludes]; + if (shouldExcludeClassFromSwizzling) { + return NO; + } + return [self.inAppLogic isClassInApp:class]; } @@ -364,7 +383,7 @@ - (void)swizzleLoadView:(Class)class SentrySwizzleInstanceMethod(class, selector, SentrySWReturnType(void), SentrySWArguments(), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerLoadView:self callbackToOrigin:^{ SentrySWCallOriginal(); }]; }), @@ -376,7 +395,7 @@ - (void)swizzleViewDidLoad:(Class)class SEL selector = NSSelectorFromString(@"viewDidLoad"); SentrySwizzleInstanceMethod(class, selector, SentrySWReturnType(void), SentrySWArguments(), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerViewDidLoad:self callbackToOrigin:^{ SentrySWCallOriginal(); }]; }), @@ -388,7 +407,7 @@ - (void)swizzleViewWillAppear:(Class)class SEL selector = NSSelectorFromString(@"viewWillAppear:"); SentrySwizzleInstanceMethod(class, selector, SentrySWReturnType(void), SentrySWArguments(BOOL animated), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerViewWillAppear:self callbackToOrigin:^{ SentrySWCallOriginal(animated); }]; }), @@ -400,7 +419,7 @@ - (void)swizzleViewDidAppear:(Class)class SEL selector = NSSelectorFromString(@"viewDidAppear:"); SentrySwizzleInstanceMethod(class, selector, SentrySWReturnType(void), SentrySWArguments(BOOL animated), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerViewDidAppear:self callbackToOrigin:^{ SentrySWCallOriginal(animated); }]; }), @@ -412,7 +431,7 @@ - (void)swizzleViewWillDisappear:(Class)class SEL selector = NSSelectorFromString(@"viewWillDisappear:"); SentrySwizzleInstanceMethod(class, selector, SentrySWReturnType(void), SentrySWArguments(BOOL animated), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerViewWillDisappear:self callbackToOrigin:^{ SentrySWCallOriginal(animated); }]; }), @@ -424,7 +443,7 @@ - (void)swizzleViewLayoutSubViews:(Class)class SEL willSelector = NSSelectorFromString(@"viewWillLayoutSubviews"); SentrySwizzleInstanceMethod(class, willSelector, SentrySWReturnType(void), SentrySWArguments(), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerViewWillLayoutSubViews:self callbackToOrigin:^{ SentrySWCallOriginal(); }]; }), @@ -433,7 +452,7 @@ - (void)swizzleViewLayoutSubViews:(Class)class SEL didSelector = NSSelectorFromString(@"viewDidLayoutSubviews"); SentrySwizzleInstanceMethod(class, didSelector, SentrySWReturnType(void), SentrySWArguments(), SentrySWReplacement({ - [SentryUIViewControllerPerformanceTracker.shared + [[SentryDependencyContainer.sharedInstance uiViewControllerPerformanceTracker] viewControllerViewDidLayoutSubViews:self callbackToOrigin:^{ SentrySWCallOriginal(); }]; }), diff --git a/Pods/Sentry/Sources/Sentry/SentryUncaughtNSExceptions.m b/Pods/Sentry/Sources/Sentry/SentryUncaughtNSExceptions.m new file mode 100644 index 000000000..5ea809f23 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryUncaughtNSExceptions.m @@ -0,0 +1,54 @@ +#import + +#if TARGET_OS_OSX + +# import "SentryCrash.h" +# import "SentryDependencyContainer.h" +# import "SentrySwizzle.h" +# import "SentryUncaughtNSExceptions.h" +# import + +NS_ASSUME_NONNULL_BEGIN + +@implementation SentryUncaughtNSExceptions + ++ (void)configureCrashOnExceptions +{ + [[NSUserDefaults standardUserDefaults] + registerDefaults:@{ @"NSApplicationCrashOnExceptions" : @YES }]; +} + ++ (void)swizzleNSApplicationReportException +{ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wshadow" + SEL selector = NSSelectorFromString(@"reportException:"); + SentrySwizzleInstanceMethod(NSApplication, selector, SentrySWReturnType(void), + SentrySWArguments(NSException * exception), SentrySWReplacement({ + [SentryUncaughtNSExceptions capture:exception]; + return SentrySWCallOriginal(exception); + }), + SentrySwizzleModeOncePerClassAndSuperclasses, (void *)selector); +# pragma clang diagnostic pop +} + ++ (void)capture:(nullable NSException *)exception +{ + SentryCrash *crash = SentryDependencyContainer.sharedInstance.crashReporter; + + if (crash.uncaughtExceptionHandler == nil) { + return; + } + + if (exception == nil) { + return; + } + + crash.uncaughtExceptionHandler(exception); +} + +@end + +NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_OSX diff --git a/Pods/Sentry/Sources/Sentry/SentryUser.m b/Pods/Sentry/Sources/Sentry/SentryUser.m index 6952055e9..f309d0b32 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUser.m +++ b/Pods/Sentry/Sources/Sentry/SentryUser.m @@ -4,8 +4,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryUser () +@interface SentryUser () @property (atomic, strong) NSDictionary *_Nullable unknown; @end diff --git a/Pods/Sentry/Sources/Sentry/SentryUserAccess.m b/Pods/Sentry/Sources/Sentry/SentryUserAccess.m new file mode 100644 index 000000000..5f6d1a9ec --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryUserAccess.m @@ -0,0 +1,6 @@ +#import "SentryUserAccess.h" +#import "SentryHub.h" +#import "SentrySDK+Private.h" +#import "SentryScope+Private.h" + +SentryUser *_Nullable sentry_getCurrentUser(void) { return SentrySDK.currentHub.scope.userObject; } diff --git a/Pods/Sentry/Sources/Sentry/SentryUserFeedback.m b/Pods/Sentry/Sources/Sentry/SentryUserFeedback.m index fc43f4bb2..e3e14a1af 100644 --- a/Pods/Sentry/Sources/Sentry/SentryUserFeedback.m +++ b/Pods/Sentry/Sources/Sentry/SentryUserFeedback.m @@ -1,7 +1,8 @@ #import "SentryUserFeedback.h" #import "SentrySwift.h" -#import +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" @implementation SentryUserFeedback - (instancetype)initWithEventId:(SentryId *)eventId @@ -26,3 +27,4 @@ - (instancetype)initWithEventId:(SentryId *)eventId } @end +#pragma clang diagnostic pop diff --git a/Pods/Sentry/Sources/Sentry/SentryUserFeedbackIntegration.m b/Pods/Sentry/Sources/Sentry/SentryUserFeedbackIntegration.m new file mode 100644 index 000000000..bc7ab703c --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryUserFeedbackIntegration.m @@ -0,0 +1,49 @@ +#import "SentryUserFeedbackIntegration.h" +#import "SentryDependencyContainer.h" +#import "SentryOptions+Private.h" +#import "SentrySDK+Private.h" +#import "SentryScreenshot.h" +#import "SentrySwift.h" + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + +@interface SentryUserFeedbackIntegration () +@end + +@implementation SentryUserFeedbackIntegration { + SentryUserFeedbackIntegrationDriver *_driver; +} + +- (BOOL)installWithOptions:(SentryOptions *)options +{ + if (options.userFeedbackConfiguration == nil) { + return NO; + } + + _driver = [[SentryUserFeedbackIntegrationDriver alloc] + initWithConfiguration:options.userFeedbackConfiguration + delegate:self + screenshotProvider:SentryDependencyContainer.sharedInstance.screenshot]; + return YES; +} + +- (void)showWidget +{ + [_driver showWidget]; +} + +- (void)hideWidget +{ + [_driver hideWidget]; +} + +// MARK: SentryUserFeedbackIntegrationDriverDelegate + +- (void)captureWithFeedback:(SentryFeedback *)feedback +{ + [SentrySDK captureFeedback:feedback]; +} + +@end + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/SentryViewHierarchy.m b/Pods/Sentry/Sources/Sentry/SentryViewHierarchy.m index c7cc073d5..33d3f9fc9 100644 --- a/Pods/Sentry/Sources/Sentry/SentryViewHierarchy.m +++ b/Pods/Sentry/Sources/Sentry/SentryViewHierarchy.m @@ -60,9 +60,13 @@ - (NSData *)appViewHierarchyFromMainThread void (^fetchViewHierarchy)(void) = ^{ result = [self appViewHierarchy]; }; + SENTRY_LOG_INFO(@"Starting to fetch the view hierarchy from the main thread."); + [[SentryDependencyContainer sharedInstance].dispatchQueueWrapper dispatchSyncOnMainQueue:fetchViewHierarchy]; + SENTRY_LOG_INFO(@"Finished fetching the view hierarchy from the main thread."); + return result; } @@ -93,6 +97,8 @@ - (BOOL)processViewHierarchy:(NSArray *)windows __block SentryCrashJSONEncodeContext JSONContext; sentrycrashjson_beginEncode(&JSONContext, NO, addJSONDataFunc, userData); + SENTRY_LOG_DEBUG(@"Processing view hierarchy."); + int (^serializeJson)(void) = ^int() { int result; tryJson(sentrycrashjson_beginObject(&JSONContext, NULL)); @@ -121,6 +127,8 @@ - (BOOL)processViewHierarchy:(NSArray *)windows - (int)viewHierarchyFromView:(UIView *)view intoContext:(SentryCrashJSONEncodeContext *)context { + SENTRY_LOG_DEBUG(@"Processing view hierarchy of view: %@", view); + int result = 0; tryJson(sentrycrashjson_beginObject(context, NULL)); const char *viewClassName = [[SwiftDescriptor getObjectClassName:view] UTF8String]; @@ -144,7 +152,7 @@ - (int)viewHierarchyFromView:(UIView *)view intoContext:(SentryCrashJSONEncodeCo UIViewController *vc = (UIViewController *)view.nextResponder; if (vc.view == view) { const char *viewControllerClassName = - [[SwiftDescriptor getObjectClassName:vc] UTF8String]; + [[SwiftDescriptor getViewControllerClassName:vc] UTF8String]; tryJson(sentrycrashjson_addStringElement(context, "view_controller", viewControllerClassName, SentryCrashJSON_SIZE_AUTOMATIC)); } diff --git a/Pods/Sentry/Sources/Sentry/SentryViewHierarchyIntegration.m b/Pods/Sentry/Sources/Sentry/SentryViewHierarchyIntegration.m index 08b757900..20cf35f82 100644 --- a/Pods/Sentry/Sources/Sentry/SentryViewHierarchyIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryViewHierarchyIntegration.m @@ -7,6 +7,7 @@ # import "SentryEvent+Private.h" # import "SentryException.h" # import "SentryHub+Private.h" +# import "SentryOptions.h" # import "SentrySDK+Private.h" # import "SentryViewHierarchy.h" # if SENTRY_HAS_METRIC_KIT @@ -27,8 +28,7 @@ [SentryDependencyContainer.sharedInstance.viewHierarchy saveViewHierarchy:reportPath]; } -@interface -SentryViewHierarchyIntegration () +@interface SentryViewHierarchyIntegration () @property (nonatomic, strong) SentryOptions *options; @@ -67,12 +67,13 @@ - (void)uninstall [client removeAttachmentProcessor:self]; } -- (NSArray *)processAttachments:(NSArray *)attachments - forEvent:(nonnull SentryEvent *)event +- (nonnull NSArray *)processAttachments: + (nonnull NSArray *)attachments + forEvent:(nonnull SentryEvent *)event { // We don't attach the view hierarchy if there is no exception/error. // We don't attach the view hierarchy if the event is a crash or metric kit event. - if ((event.exceptions == nil && event.error == nil) || event.isCrashEvent + if ((event.exceptions == nil && event.error == nil) || event.isFatalEvent # if SENTRY_HAS_METRIC_KIT || [event isMetricKitEvent] # endif // SENTRY_HAS_METRIC_KIT diff --git a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationLogic.m b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationLogic.m index 6e88ca37c..ba323e74a 100644 --- a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationLogic.m +++ b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationLogic.m @@ -2,15 +2,13 @@ #if SENTRY_HAS_UIKIT -# import # import # import # import # import # import -@interface -SentryWatchdogTerminationLogic () +@interface SentryWatchdogTerminationLogic () @property (nonatomic, strong) SentryOptions *options; @property (nonatomic, strong) SentryCrashWrapper *crashAdapter; @@ -73,7 +71,7 @@ - (BOOL)isWatchdogTermination } // Restarting the app in development is a termination we can't catch and would falsely - // report OOMs. + // report watchdog termiations. if (previousAppState.isDebugging) { return NO; } diff --git a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationScopeObserver.m b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationScopeObserver.m index 2007e87b5..aecb0db27 100644 --- a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationScopeObserver.m +++ b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationScopeObserver.m @@ -5,131 +5,51 @@ # import # import # import +# import +# import -@interface -SentryWatchdogTerminationScopeObserver () +@interface SentryWatchdogTerminationScopeObserver () -@property (strong, nonatomic) SentryFileManager *fileManager; -@property (strong, nonatomic) NSFileHandle *fileHandle; -@property (nonatomic) NSInteger maxBreadcrumbs; -@property (nonatomic) NSInteger breadcrumbCounter; -@property (strong, nonatomic) NSString *activeFilePath; +@property (nonatomic, strong) SentryWatchdogTerminationBreadcrumbProcessor *breadcrumbProcessor; +@property (nonatomic, strong) SentryWatchdogTerminationContextProcessor *contextProcessor; @end @implementation SentryWatchdogTerminationScopeObserver -- (instancetype)initWithMaxBreadcrumbs:(NSInteger)maxBreadcrumbs - fileManager:(SentryFileManager *)fileManager +- (instancetype) + initWithBreadcrumbProcessor:(SentryWatchdogTerminationBreadcrumbProcessor *)breadcrumbProcessor + contextProcessor:(SentryWatchdogTerminationContextProcessor *)contextProcessor; { if (self = [super init]) { - self.maxBreadcrumbs = maxBreadcrumbs; - self.fileManager = fileManager; - self.breadcrumbCounter = 0; - - [self switchFileHandle]; + self.breadcrumbProcessor = breadcrumbProcessor; + self.contextProcessor = contextProcessor; } return self; } -- (void)dealloc -{ - [self.fileHandle closeFile]; -} - -// PRAGMA MARK: - Helper methods - -- (void)deleteFiles -{ - [self.fileHandle closeFile]; - self.fileHandle = nil; - self.activeFilePath = nil; - self.breadcrumbCounter = 0; - - [self.fileManager removeFileAtPath:self.fileManager.breadcrumbsFilePathOne]; - [self.fileManager removeFileAtPath:self.fileManager.breadcrumbsFilePathTwo]; -} - -- (void)switchFileHandle -{ - if ([self.activeFilePath isEqualToString:self.fileManager.breadcrumbsFilePathOne]) { - self.activeFilePath = self.fileManager.breadcrumbsFilePathTwo; - } else { - self.activeFilePath = self.fileManager.breadcrumbsFilePathOne; - } - - // Close the current filehandle (if any) - [self.fileHandle closeFile]; - - // Create a fresh file for the new active path - [self.fileManager removeFileAtPath:self.activeFilePath]; - [[NSFileManager defaultManager] createFileAtPath:self.activeFilePath - contents:nil - attributes:nil]; - - // Open the file for writing - self.fileHandle = [NSFileHandle fileHandleForWritingAtPath:self.activeFilePath]; - - if (!self.fileHandle) { - SENTRY_LOG_ERROR(@"Couldn't open file handle for %@", self.activeFilePath); - } -} - -- (void)store:(NSData *)data -{ - unsigned long long fileSize; - @try { - fileSize = [self.fileHandle seekToEndOfFile]; - - [self.fileHandle writeData:data]; - [self.fileHandle writeData:[@"\n" dataUsingEncoding:NSASCIIStringEncoding]]; - - self.breadcrumbCounter += 1; - } @catch (NSException *exception) { - SENTRY_LOG_ERROR(@"Error while writing data to end file with size (%llu): %@ ", fileSize, - exception.description); - } @finally { - if (self.breadcrumbCounter >= self.maxBreadcrumbs) { - [self switchFileHandle]; - self.breadcrumbCounter = 0; - } - } -} - // PRAGMA MARK: - SentryScopeObserver -- (void)addSerializedBreadcrumb:(NSDictionary *)crumb +- (void)clear { - if (![NSJSONSerialization isValidJSONObject:crumb]) { - SENTRY_LOG_ERROR(@"Breadcrumb is not a valid JSON object: %@", crumb); - return; - } - - NSError *error; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:crumb options:0 error:&error]; - - if (error) { - SENTRY_LOG_ERROR(@"Error serializing breadcrumb: %@", error); - } else { - [self store:jsonData]; - } + [self.breadcrumbProcessor clear]; + [self.contextProcessor clear]; } -- (void)clear +- (void)addSerializedBreadcrumb:(NSDictionary *)crumb { - [self clearBreadcrumbs]; + [self.breadcrumbProcessor addSerializedBreadcrumb:crumb]; } - (void)clearBreadcrumbs { - [self deleteFiles]; - [self switchFileHandle]; + [self.breadcrumbProcessor clearBreadcrumbs]; } - (void)setContext:(nullable NSDictionary *)context { - // Left blank on purpose + [self.contextProcessor setContext:context]; } - (void)setDist:(nullable NSString *)dist @@ -167,6 +87,11 @@ - (void)setUser:(nullable SentryUser *)user // Left blank on purpose } +- (void)setTraceContext:(nullable NSDictionary *)traceContext +{ + // Left blank on purpose +} + @end #endif // SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTracker.m b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTracker.m index 2c5cdda80..c9df525f6 100644 --- a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTracker.m +++ b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTracker.m @@ -1,7 +1,7 @@ #import "SentryDateUtils.h" #import "SentryEvent+Private.h" #import "SentryFileManager.h" -#import +#import "SentrySwift.h" #import #import #import @@ -16,14 +16,14 @@ #import #import -@interface -SentryWatchdogTerminationTracker () +@interface SentryWatchdogTerminationTracker () @property (nonatomic, strong) SentryOptions *options; @property (nonatomic, strong) SentryWatchdogTerminationLogic *watchdogTerminationLogic; @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueue; @property (nonatomic, strong) SentryAppStateManager *appStateManager; @property (nonatomic, strong) SentryFileManager *fileManager; +@property (nonatomic, strong) SentryScopeContextPersistentStore *scopeContextStore; @end @@ -34,6 +34,7 @@ - (instancetype)initWithOptions:(SentryOptions *)options appStateManager:(SentryAppStateManager *)appStateManager dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper fileManager:(SentryFileManager *)fileManager + scopeContextStore:(SentryScopeContextPersistentStore *)scopeContextStore { if (self = [super init]) { self.options = options; @@ -41,6 +42,7 @@ - (instancetype)initWithOptions:(SentryOptions *)options self.appStateManager = appStateManager; self.dispatchQueue = dispatchQueueWrapper; self.fileManager = fileManager; + self.scopeContextStore = scopeContextStore; } return self; } @@ -53,23 +55,9 @@ - (void)start [self.dispatchQueue dispatchAsyncWithBlock:^{ if ([self.watchdogTerminationLogic isWatchdogTermination]) { SentryEvent *event = [[SentryEvent alloc] initWithLevel:kSentryLevelFatal]; - // Set to empty list so no breadcrumbs of the current scope are added - event.breadcrumbs = @[]; - - // Load the previous breadcrumbs from disk, which are already serialized - event.serializedBreadcrumbs = [self.fileManager readPreviousBreadcrumbs]; - if (event.serializedBreadcrumbs.count > self.options.maxBreadcrumbs) { - event.serializedBreadcrumbs = [event.serializedBreadcrumbs - subarrayWithRange:NSMakeRange(event.serializedBreadcrumbs.count - - self.options.maxBreadcrumbs, - self.options.maxBreadcrumbs)]; - } - - NSDictionary *lastBreadcrumb = event.serializedBreadcrumbs.lastObject; - if (lastBreadcrumb && [lastBreadcrumb objectForKey:@"timestamp"]) { - NSString *timestampIso8601String = [lastBreadcrumb objectForKey:@"timestamp"]; - event.timestamp = sentry_fromIso8601String(timestampIso8601String); - } + + [self addBreadcrumbsToEvent:event]; + [self addContextToEvent:event]; SentryException *exception = [[SentryException alloc] initWithValue:SentryWatchdogTerminationExceptionValue @@ -81,8 +69,9 @@ - (void)start event.exceptions = @[ exception ]; // We don't need to update the releaseName of the event to the previous app state as we - // assume it's not an OOM when the releaseName changed between app starts. - [SentrySDK captureCrashEvent:event]; + // assume it's not a watchdog termination when the releaseName changed between app + // starts. + [SentrySDK captureFatalEvent:event]; } }]; #else // !SENTRY_HAS_UIKIT @@ -92,6 +81,46 @@ - (void)start #endif // SENTRY_HAS_UIKIT } +- (void)addBreadcrumbsToEvent:(SentryEvent *)event +{ + // Set to empty list so no breadcrumbs of the current scope are added + event.breadcrumbs = @[]; + + // Load the previous breadcrumbs from disk, which are already serialized + event.serializedBreadcrumbs = [self.fileManager readPreviousBreadcrumbs]; + if (event.serializedBreadcrumbs.count > self.options.maxBreadcrumbs) { + event.serializedBreadcrumbs = [event.serializedBreadcrumbs + subarrayWithRange:NSMakeRange( + event.serializedBreadcrumbs.count - self.options.maxBreadcrumbs, + self.options.maxBreadcrumbs)]; + } + + NSDictionary *lastBreadcrumb = event.serializedBreadcrumbs.lastObject; + if (lastBreadcrumb && [lastBreadcrumb objectForKey:@"timestamp"]) { + NSString *timestampIso8601String = [lastBreadcrumb objectForKey:@"timestamp"]; + event.timestamp = sentry_fromIso8601String(timestampIso8601String); + } +} + +- (void)addContextToEvent:(SentryEvent *)event +{ + // Load the previous context from disk, or create an empty one if it doesn't exist + NSDictionary *> *previousContext = + [self.scopeContextStore readPreviousContextFromDisk]; + NSMutableDictionary *context = + [[NSMutableDictionary alloc] initWithDictionary:previousContext ?: @{}]; + + // We only report watchdog terminations if the app was in the foreground. So, we can + // already set it. We can't set it in the client because the client uses the current + // application state, and the app could be in the background when executing this code. + NSMutableDictionary *appContext = + [[NSMutableDictionary alloc] initWithDictionary:event.context[@"app"] ?: @{}]; + appContext[@"in_foreground"] = @(YES); + context[@"app"] = appContext; + + event.context = context; +} + - (void)stop { #if SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTrackingIntegration.m b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTrackingIntegration.m index 7756f9be4..d3e7fd069 100644 --- a/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTrackingIntegration.m +++ b/Pods/Sentry/Sources/Sentry/SentryWatchdogTerminationTrackingIntegration.m @@ -3,6 +3,7 @@ #if SENTRY_HAS_UIKIT # import "SentryScope+Private.h" +# import # import # import # import @@ -10,19 +11,20 @@ # import # import # import +# import # import # import +# import +# import # import # import # import - NS_ASSUME_NONNULL_BEGIN -@interface -SentryWatchdogTerminationTrackingIntegration () +@interface SentryWatchdogTerminationTrackingIntegration () @property (nonatomic, strong) SentryWatchdogTerminationTracker *tracker; -@property (nonatomic, strong) SentryANRTracker *anrTracker; +@property (nonatomic, strong) id anrTracker; @property (nullable, nonatomic, copy) NSString *testConfigurationFilePath; @property (nonatomic, strong) SentryAppStateManager *appStateManager; @@ -33,8 +35,10 @@ @implementation SentryWatchdogTerminationTrackingIntegration - (instancetype)init { if (self = [super init]) { + SentryNSProcessInfoWrapper *processInfoWrapper + = SentryDependencyContainer.sharedInstance.processInfoWrapper; self.testConfigurationFilePath - = NSProcessInfo.processInfo.environment[@"XCTestConfigurationFilePath"]; + = processInfoWrapper.environment[@"XCTestConfigurationFilePath"]; } return self; } @@ -52,7 +56,7 @@ - (BOOL)installWithOptions:(SentryOptions *)options dispatch_queue_attr_t attributes = dispatch_queue_attr_make_with_qos_class( DISPATCH_QUEUE_SERIAL, DISPATCH_QUEUE_PRIORITY_HIGH, 0); SentryDispatchQueueWrapper *dispatchQueueWrapper = - [[SentryDispatchQueueWrapper alloc] initWithName:"sentry-out-of-memory-tracker" + [[SentryDispatchQueueWrapper alloc] initWithName:"io.sentry.watchdog-termination-tracker" attributes:attributes]; SentryFileManager *fileManager = [[[SentrySDK currentHub] getClient] fileManager]; @@ -63,28 +67,37 @@ - (BOOL)installWithOptions:(SentryOptions *)options [[SentryWatchdogTerminationLogic alloc] initWithOptions:options crashAdapter:crashWrapper appStateManager:appStateManager]; + SentryScopeContextPersistentStore *scopeContextStore = + [SentryDependencyContainer.sharedInstance scopeContextPersistentStore]; self.tracker = [[SentryWatchdogTerminationTracker alloc] initWithOptions:options watchdogTerminationLogic:logic appStateManager:appStateManager dispatchQueueWrapper:dispatchQueueWrapper - fileManager:fileManager]; + fileManager:fileManager + scopeContextStore:scopeContextStore]; [self.tracker start]; self.anrTracker = - [SentryDependencyContainer.sharedInstance getANRTracker:options.appHangTimeoutInterval]; + [SentryDependencyContainer.sharedInstance getANRTracker:options.appHangTimeoutInterval + isV2Enabled:options.enableAppHangTrackingV2]; [self.anrTracker addListener:self]; self.appStateManager = appStateManager; SentryWatchdogTerminationScopeObserver *scopeObserver = - [[SentryWatchdogTerminationScopeObserver alloc] - initWithMaxBreadcrumbs:options.maxBreadcrumbs - fileManager:[[[SentrySDK currentHub] getClient] fileManager]]; + [SentryDependencyContainer.sharedInstance + getWatchdogTerminationScopeObserverWithOptions:options]; + + [SentrySDK.currentHub configureScope:^(SentryScope *_Nonnull outerScope) { + // Add the observer to the scope so that it can be notified when the scope changes. + [outerScope addObserver:scopeObserver]; - [SentrySDK.currentHub configureScope:^( - SentryScope *_Nonnull outerScope) { [outerScope addObserver:scopeObserver]; }]; + // Sync the current context to the observer to capture context modifications that happened + // before installation. + [scopeObserver setContext:outerScope.contextDictionary]; + }]; return YES; } @@ -103,13 +116,13 @@ - (void)uninstall [self.anrTracker removeListener:self]; } -- (void)anrDetected +- (void)anrDetectedWithType:(enum SentryANRType)type { [self.appStateManager updateAppState:^(SentryAppState *appState) { appState.isANROngoing = YES; }]; } -- (void)anrStopped +- (void)anrStoppedWithResult:(SentryANRStoppedResult *_Nullable)result { [self.appStateManager updateAppState:^(SentryAppState *appState) { appState.isANROngoing = NO; }]; diff --git a/Pods/Sentry/Sources/Sentry/SentryWeakMap.m b/Pods/Sentry/Sources/Sentry/SentryWeakMap.m new file mode 100644 index 000000000..36d6a0172 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/SentryWeakMap.m @@ -0,0 +1,124 @@ +#import "SentryWeakMap.h" + +@interface SentryWeakBox : NSObject + +@property (nonatomic, weak, readonly) id key; + +- (instancetype)initWithKey:(id)key; + +@end + +@implementation SentryWeakBox { + __weak id _key; + NSUInteger _hash; +} + +- (instancetype)initWithKey:(id)key +{ + if (self = [super init]) { + _key = key; + // We need to cache the hash value because weak keys can be deallocated. + // This hash is used to identify the weak box by the wrapped key in the storage. + _hash = [key hash]; + } + return self; +} + +- (id)key +{ + return _key; +} + +- (NSUInteger)hash +{ + return _hash; +} + +- (BOOL)isEqual:(id)object +{ + if (![object isKindOfClass:[SentryWeakBox class]]) { + return NO; + } + id selfKey = self.key; + id otherKey = ((SentryWeakBox *)object).key; + return selfKey && otherKey && [selfKey isEqual:otherKey]; +} + +- (nonnull id)copyWithZone:(nullable NSZone *)zone +{ + return [[[SentryWeakBox class] allocWithZone:zone] initWithKey:self.key]; +} + +@end + +@interface SentryWeakMap () +@property (nonatomic, strong) NSMutableDictionary *storage; +@end + +@implementation SentryWeakMap + +// This class was originally a wrapper around NSMapTable with weak keys. +// Due to undeterministic behavior of NSMapTable, we had to implement our own weak key storage. + +- (instancetype)init +{ + if (self = [super init]) { + _storage = [NSMutableDictionary dictionary]; + } + return self; +} + +- (void)setObject:(nullable id)anObject forKey:(nullable id)aKey +{ + if (!aKey || !anObject) { + return; + } + + [self prune]; + + SentryWeakBox *box = [[SentryWeakBox alloc] initWithKey:aKey]; + self.storage[box] = anObject; +} + +- (nullable id)objectForKey:(nullable id)aKey +{ + if (!aKey) { + return nil; + } + + [self prune]; + + SentryWeakBox *box = [[SentryWeakBox alloc] initWithKey:aKey]; + return self.storage[box]; +} + +- (void)removeObjectForKey:(nullable id)aKey +{ + if (!aKey) { + return; + } + + [self prune]; + + SentryWeakBox *box = [[SentryWeakBox alloc] initWithKey:aKey]; + [self.storage removeObjectForKey:box]; +} + +- (NSUInteger)count +{ + // Do not prune here, to make this method a direct proxy for the underlying dictionary. + return self.storage.count; +} + +- (void)prune +{ + NSMutableArray *keysToRemove = [NSMutableArray array]; + for (SentryWeakBox *box in self.storage.keyEnumerator) { + if (box.key == nil) { + [keysToRemove addObject:box]; + } + } + [self.storage removeObjectsForKeys:keysToRemove]; +} + +@end diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/PrivateSentrySDKOnly.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/PrivateSentrySDKOnly.h index 13173b418..9b501ec31 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/PrivateSentrySDKOnly.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/PrivateSentrySDKOnly.h @@ -1,5 +1,14 @@ -#import "PrivatesHeader.h" -#import "SentryScreenFrames.h" +#if __has_include() +# import +#else +# import "PrivatesHeader.h" +#endif + +#if __has_include() +# import +#else +# import "SentryScreenFrames.h" +#endif @class SentryDebugMeta; @class SentryScreenFrames; @@ -9,10 +18,13 @@ @class SentryUser; @class SentryEnvelope; @class SentryId; +@class SentrySpanId; @class SentrySessionReplayIntegration; +@class UIView; @protocol SentryReplayBreadcrumbConverter; @protocol SentryViewScreenshotProvider; +@protocol SentryRedactOptions; NS_ASSUME_NONNULL_BEGIN @@ -82,11 +94,21 @@ typedef void (^SentryOnAppStartMeasurementAvailable)( */ + (NSString *)getSdkVersionString; +/** + * Add a package to the SDK packages + */ ++ (void)addSdkPackage:(NSString *)name version:(NSString *)version; + /** * Retrieves extra context */ + (NSDictionary *)getExtraContext; +/** + * Allows Hybrids SDKs to thread-safe set the current trace. + */ ++ (void)setTrace:(SentryId *)traceId spanId:(SentrySpanId *)spanId; + #if SENTRY_TARGET_PROFILING_SUPPORTED /** * Start a profiler session associated with the given @c SentryId. @@ -170,6 +192,13 @@ typedef void (^SentryOnAppStartMeasurementAvailable)( #if SENTRY_TARGET_REPLAY_SUPPORTED +/** + * Return an instance of SentryRedactOptions with given option + * To be used from SentrySwiftUI, which cannot access the private + * `SentryRedactOptions` class. + */ ++ (UIView *)sessionReplayMaskingOverlay:(id)options; + /** * Configure session replay with different breadcrumb converter * and screeshot provider. Used by the Hybrid SDKs. @@ -182,6 +211,9 @@ typedef void (^SentryOnAppStartMeasurementAvailable)( + (NSString *__nullable)getReplayId; + (void)addReplayIgnoreClasses:(NSArray *_Nonnull)classes; + (void)addReplayRedactClasses:(NSArray *_Nonnull)classes; ++ (void)setIgnoreContainerClass:(Class _Nonnull)containerClass; ++ (void)setRedactContainerClass:(Class _Nonnull)containerClass; ++ (void)setReplayTags:(NSDictionary *)tags; #endif + (nullable NSDictionary *)appStartMeasurementWithSpans; diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryAppStartMeasurement.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryAppStartMeasurement.h index 5484f064f..70ae3aa45 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryAppStartMeasurement.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryAppStartMeasurement.h @@ -1,4 +1,8 @@ -#import "PrivatesHeader.h" +#if __has_include() +# import +#else +# import "PrivatesHeader.h" +#endif #if SENTRY_UIKIT_AVAILABLE diff --git a/Pods/Sentry/Sources/Sentry/include/SentryBaseIntegration.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBaseIntegration.h similarity index 84% rename from Pods/Sentry/Sources/Sentry/include/SentryBaseIntegration.h rename to Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBaseIntegration.h index fa803291f..87edbbf57 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryBaseIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBaseIntegration.h @@ -1,5 +1,11 @@ #import +#if __has_include() +# import +#else +# import "SentryIntegrationProtocol.h" +#endif + NS_ASSUME_NONNULL_BEGIN typedef NS_OPTIONS(NSUInteger, SentryIntegrationOption) { @@ -23,12 +29,12 @@ typedef NS_OPTIONS(NSUInteger, SentryIntegrationOption) { kIntegrationOptionEnableCrashHandler = 1 << 16, kIntegrationOptionEnableMetricKit = 1 << 17, kIntegrationOptionEnableReplay = 1 << 18, - kIntegrationOptionEnableAppHangTrackingV2 = 1 << 19, + kIntegrationOptionStartFramesTracker = 1 << 19, }; @class SentryOptions; -@interface SentryBaseIntegration : NSObject +@interface SentryBaseIntegration : NSObject - (NSString *)integrationName; - (BOOL)installWithOptions:(SentryOptions *)options; diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBinaryImageCache.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBinaryImageCache.h index 46125e218..d555c2ef1 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBinaryImageCache.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBinaryImageCache.h @@ -4,8 +4,11 @@ NS_ASSUME_NONNULL_BEGIN @interface SentryBinaryImageInfo : NSObject @property (nonatomic, strong) NSString *name; +@property (nonatomic, copy) NSString *UUID; +@property (nonatomic) uint64_t vmAddress; @property (nonatomic) uint64_t address; @property (nonatomic) uint64_t size; + @end /** @@ -19,9 +22,13 @@ NS_ASSUME_NONNULL_BEGIN - (void)stop; +- (NSArray *)getAllBinaryImages; + - (nullable SentryBinaryImageInfo *)imageByAddress:(const uint64_t)address; -- (nullable NSString *)pathForInAppInclude:(NSString *)inAppInclude; +- (NSSet *)imagePathsForInAppInclude:(NSString *)inAppInclude; + ++ (NSString *_Nullable)convertUUID:(const unsigned char *const)value; @end diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBreadcrumb+Private.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBreadcrumb+Private.h index aee13fb0c..c3a9e5605 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBreadcrumb+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryBreadcrumb+Private.h @@ -1,12 +1,19 @@ -#import "SentryBreadcrumb.h" +#if __has_include() +# import +#else +# import "SentryBreadcrumb.h" +#endif -@interface -SentryBreadcrumb () +NS_ASSUME_NONNULL_BEGIN + +@interface SentryBreadcrumb () /** * Initializes a SentryBreadcrumb from a JSON object. * @param dictionary The dictionary containing breadcrumb data. * @return The SentryBreadcrumb. */ -- (instancetype)initWithDictionary:(NSDictionary *)dictionary; +- (instancetype _Nonnull)initWithDictionary:(NSDictionary *_Nonnull)dictionary; @end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDebugImageProvider+HybridSDKs.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDebugImageProvider+HybridSDKs.h new file mode 100644 index 000000000..242e1987a --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDebugImageProvider+HybridSDKs.h @@ -0,0 +1,44 @@ +#if __has_include() +# import +#else +# import "SentryDebugImageProvider.h" +#endif + +@class SentryDebugMeta; +@class SentryThread; +@class SentryFrame; + +NS_ASSUME_NONNULL_BEGIN + +@interface SentryDebugImageProvider () + +/** + * 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 *)getDebugImagesFromCacheForFrames:(NSArray *)frames + NS_SWIFT_NAME(getDebugImagesFromCacheForFrames(frames:)); + +/** + * 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 *)getDebugImagesFromCacheForThreads:(NSArray *)threads + NS_SWIFT_NAME(getDebugImagesFromCacheForThreads(threads:)); + +/** + * 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 *)getDebugImagesForImageAddressesFromCache: + (NSSet *)imageAddresses + NS_SWIFT_NAME(getDebugImagesForImageAddressesFromCache(imageAddresses:)); + +- (NSArray *)getDebugImagesFromCache; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h index f36e8d2e9..75122cf65 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryDependencyContainer.h @@ -1,12 +1,13 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif -@class SentryANRTracker; -@class SentryANRTrackerV2; @class SentryAppStateManager; @class SentryBinaryImageCache; @class SentryCrash; @class SentryCrashWrapper; -@class SentryCurrentDateProvider; @class SentryDebugImageProvider; @class SentryDispatchFactory; @class SentryDispatchQueueWrapper; @@ -20,7 +21,15 @@ @class SentrySystemWrapper; @class SentryThreadWrapper; @class SentryThreadInspector; +@class SentryFileIOTracker; +@class SentryScopeContextPersistentStore; +@class SentryOptions; + +@protocol SentryANRTracker; @protocol SentryRandom; +@protocol SentryCurrentDateProvider; +@protocol SentryRateLimits; +@protocol SentryDispatchQueueProviderProtocol; #if SENTRY_HAS_METRIC_KIT @class SentryMXManager; @@ -31,6 +40,10 @@ @class SentryScreenshot; @class SentryUIApplication; @class SentryViewHierarchy; +@class SentryUIViewControllerPerformanceTracker; +@class SentryWatchdogTerminationScopeObserver; +@class SentryWatchdogTerminationContextProcessor; +@class SentryWatchdogTerminationBreadcrumbProcessor; #endif // SENTRY_UIKIT_AVAILABLE #if SENTRY_HAS_UIKIT @@ -43,61 +56,90 @@ NS_ASSUME_NONNULL_BEGIN +/** + * The dependency container is optimized to use as few locks as possible and to only keep the + * required dependencies in memory. It splits its dependencies into two groups. + * + * Init Dependencies: These are mandatory dependencies required to run the SDK, no matter the + * options. The dependency container initializes them in init and uses no locks for efficiency. + * + * Lazy Dependencies: These dependencies either have some state or aren't always required and, + * therefore, get initialized lazily to minimize the memory footprint. + */ @interface SentryDependencyContainer : NSObject SENTRY_NO_INIT + (instancetype)sharedInstance; /** - * Set all dependencies to nil for testing purposes. + * Resets all dependencies. */ + (void)reset; -@property (nonatomic, strong) SentryFileManager *fileManager; -@property (nonatomic, strong) SentryAppStateManager *appStateManager; -@property (nonatomic, strong) SentryCrashWrapper *crashWrapper; -@property (nonatomic, strong) SentryCrash *crashReporter; -@property (nonatomic, strong) SentryThreadWrapper *threadWrapper; -@property (nonatomic, strong) id random; -@property (nonatomic, strong) SentrySwizzleWrapper *swizzleWrapper; +#pragma mark - Init Dependencies + @property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueueWrapper; -@property (nonatomic, strong) SentryNSNotificationCenterWrapper *notificationCenterWrapper; -@property (nonatomic, strong) SentryDebugImageProvider *debugImageProvider; -@property (nonatomic, strong) SentryANRTracker *anrTracker; -@property (nonatomic, strong) SentryANRTrackerV2 *anrTrackerV2; -@property (nonatomic, strong) SentryNSProcessInfoWrapper *processInfoWrapper; -@property (nonatomic, strong) SentrySystemWrapper *systemWrapper; -@property (nonatomic, strong) SentryDispatchFactory *dispatchFactory; -@property (nonatomic, strong) SentryNSTimerFactory *timerFactory; -@property (nonatomic, strong) SentryCurrentDateProvider *dateProvider; +@property (nonatomic, strong) id random; +@property (nonatomic, strong) SentryThreadWrapper *threadWrapper; @property (nonatomic, strong) SentryBinaryImageCache *binaryImageCache; +@property (nonatomic, strong) id dateProvider; +@property (nonatomic, strong) SentryDebugImageProvider *debugImageProvider; @property (nonatomic, strong) SentryExtraContextProvider *extraContextProvider; +@property (nonatomic, strong) SentryNSNotificationCenterWrapper *notificationCenterWrapper; +@property (nonatomic, strong) SentryCrashWrapper *crashWrapper; +@property (nonatomic, strong) SentryNSProcessInfoWrapper *processInfoWrapper; @property (nonatomic, strong) SentrySysctl *sysctlWrapper; -@property (nonatomic, strong) SentryThreadInspector *threadInspector; +@property (nonatomic, strong) id rateLimits; -#if SENTRY_UIKIT_AVAILABLE -@property (nonatomic, strong) SentryFramesTracker *framesTracker; -@property (nonatomic, strong) SentryScreenshot *screenshot; -@property (nonatomic, strong) SentryViewHierarchy *viewHierarchy; -@property (nonatomic, strong) SentryUIApplication *application; -#endif // SENTRY_UIKIT_AVAILABLE +#if SENTRY_HAS_REACHABILITY +@property (nonatomic, strong) SentryReachability *reachability; +#endif // !TARGET_OS_WATCH #if SENTRY_HAS_UIKIT @property (nonatomic, strong) SentryUIDeviceWrapper *uiDeviceWrapper; +@property (nonatomic, strong) SentryUIApplication *application; #endif // TARGET_OS_IOS -#if !TARGET_OS_WATCH -@property (nonatomic, strong) SentryReachability *reachability; -#endif // !TARGET_OS_WATCH +#pragma mark - Lazy Dependencies + +@property (nonatomic, strong) SentryFileManager *fileManager; +@property (nonatomic, strong) SentryAppStateManager *appStateManager; +@property (nonatomic, strong) SentryThreadInspector *threadInspector; +@property (nonatomic, strong) SentryFileIOTracker *fileIOTracker; +@property (nonatomic, strong) SentryCrash *crashReporter; +@property (nonatomic, strong) SentryScopeContextPersistentStore *scopeContextPersistentStore; -- (SentryANRTracker *)getANRTracker:(NSTimeInterval)timeout; +- (id)getANRTracker:(NSTimeInterval)timeout; +#if SENTRY_HAS_UIKIT +- (id)getANRTracker:(NSTimeInterval)timeout isV2Enabled:(BOOL)isV2Enabled; +#endif // SENTRY_HAS_UIKIT + +@property (nonatomic, strong) SentrySystemWrapper *systemWrapper; +@property (nonatomic, strong) SentryDispatchFactory *dispatchFactory; +@property (nonatomic, strong) id dispatchQueueProvider; +@property (nonatomic, strong) SentryNSTimerFactory *timerFactory; + +@property (nonatomic, strong) SentrySwizzleWrapper *swizzleWrapper; #if SENTRY_UIKIT_AVAILABLE -- (SentryANRTrackerV2 *)getANRTrackerV2:(NSTimeInterval)timeout; +@property (nonatomic, strong) SentryFramesTracker *framesTracker; +@property (nonatomic, strong) SentryScreenshot *screenshot; +@property (nonatomic, strong) SentryViewHierarchy *viewHierarchy; +@property (nonatomic, strong) + SentryUIViewControllerPerformanceTracker *uiViewControllerPerformanceTracker; #endif // SENTRY_UIKIT_AVAILABLE #if SENTRY_HAS_METRIC_KIT @property (nonatomic, strong) SentryMXManager *metricKitManager API_AVAILABLE( ios(15.0), macos(12.0), macCatalyst(15.0)) API_UNAVAILABLE(tvos, watchos); +#endif // SENTRY_HAS_METRIC_KIT + +#if SENTRY_HAS_UIKIT +- (SentryWatchdogTerminationScopeObserver *)getWatchdogTerminationScopeObserverWithOptions: + (SentryOptions *)options; +- (SentryWatchdogTerminationBreadcrumbProcessor *) + getWatchdogTerminationBreadcrumbProcessorWithMaxBreadcrumbs:(NSInteger)maxBreadcrumbs; +@property (nonatomic, strong) + SentryWatchdogTerminationContextProcessor *watchdogTerminationContextProcessor; #endif @end diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelope.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelope.h index 76350d6b4..f864d556d 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelope.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelope.h @@ -1,19 +1,29 @@ -#import "PrivatesHeader.h" +#if __has_include() +# import +#else +# import "PrivatesHeader.h" +#endif #if COCOAPODS @class SentrySdkInfo; #else -# import "SentrySdkInfo.h" + +# if __has_include() +# import +# else +# import "SentrySdkInfo.h" +# endif #endif -@class SentryEvent; -@class SentrySession; -@class SentryId; -@class SentryUserFeedback; @class SentryAttachment; @class SentryEnvelopeItemHeader; +@class SentryEvent; +@class SentryFeedback; +@class SentryId; +@class SentrySession; @class SentryTraceContext; +@class SentryUserFeedback; NS_ASSUME_NONNULL_BEGIN @@ -81,7 +91,15 @@ SENTRY_NO_INIT - (instancetype)initWithEvent:(SentryEvent *)event; - (instancetype)initWithSession:(SentrySession *)session; -- (instancetype)initWithUserFeedback:(SentryUserFeedback *)userFeedback; +/** + * @deprecated Building the envelopes for the new @c SentryFeedback type is done directly in @c + * -[SentryClient @c captureFeedback:withScope:] + */ +- (instancetype)initWithUserFeedback:(SentryUserFeedback *)userFeedback + DEPRECATED_MSG_ATTRIBUTE( + "Building the envelopes for the new SentryFeedback type is done directly in -[SentryClient " + "captureFeedback:withScope:] so there will be no analog to this initializer for " + "SentryFeedback at this time.."); - (_Nullable instancetype)initWithAttachment:(SentryAttachment *)attachment maxAttachmentSize:(NSUInteger)maxAttachmentSize; - (instancetype)initWithHeader:(SentryEnvelopeItemHeader *)header @@ -131,7 +149,13 @@ SENTRY_NO_INIT */ - (instancetype)initWithEvent:(SentryEvent *)event; -- (instancetype)initWithUserFeedback:(SentryUserFeedback *)userFeedback; +/** + * @deprecated Building the envelopes for the new @c SentryFeedback type is done directly in @c + * -[SentryClient @c captureFeedback:withScope:] + */ +- (instancetype)initWithUserFeedback:(SentryUserFeedback *)userFeedback + DEPRECATED_MSG_ATTRIBUTE("Building the envelopes for the new SentryFeedback type is done " + "directly in -[SentryClient captureFeedback:withScope:]."); /** * The envelope header. diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelopeItemType.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelopeItemType.h index 811c441c8..3499a2061 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelopeItemType.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryEnvelopeItemType.h @@ -1,8 +1,12 @@ // 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. Just open them side by side and you'll see the +// differences. static NSString *const SentryEnvelopeItemTypeEvent = @"event"; static NSString *const SentryEnvelopeItemTypeSession = @"session"; static NSString *const SentryEnvelopeItemTypeUserFeedback = @"user_report"; +static NSString *const SentryEnvelopeItemTypeFeedback = @"feedback"; static NSString *const SentryEnvelopeItemTypeTransaction = @"transaction"; static NSString *const SentryEnvelopeItemTypeAttachment = @"attachment"; static NSString *const SentryEnvelopeItemTypeClientReport = @"client_report"; diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFormatter.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFormatter.h index 362a22ed4..d31f41b4a 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFormatter.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFormatter.h @@ -41,3 +41,16 @@ sentry_formatHexAddressUInt64(uint64_t value) { return sentry_snprintfHexAddress(value); } + +static inline uint64_t +sentry_UInt64ForHexAddress(NSString *hexString) +{ + uint64_t value = 0; + NSScanner *scanner = [NSScanner scannerWithString:hexString]; + + if ([scanner scanHexLongLong:&value]) { + return value; + } else { + return 0; + } +} diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h index 46c46e87d..54468a529 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryFramesTracker.h @@ -1,11 +1,19 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif #if SENTRY_HAS_UIKIT -# import "SentryProfilingConditionals.h" +# if __has_include() +# import +# else +# import "SentryProfilingConditionals.h" +# endif @class SentryDisplayLinkWrapper; -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; @class SentryDispatchQueueWrapper; @class SentryNSNotificationCenterWrapper; @class SentryScreenFrames; @@ -33,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN @interface SentryFramesTracker : NSObject - (instancetype)initWithDisplayLinkWrapper:(SentryDisplayLinkWrapper *)displayLinkWrapper - dateProvider:(SentryCurrentDateProvider *)dateProvider + dateProvider:(id)dateProvider dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper notificationCenter:(SentryNSNotificationCenterWrapper *)notificationCenter keepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration; diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryOptions+HybridSDKs.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryOptions+HybridSDKs.h index 9cfd3c79c..9709ca7c4 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryOptions+HybridSDKs.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryOptions+HybridSDKs.h @@ -6,8 +6,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryOptions () +@interface SentryOptions () - (_Nullable instancetype)initWithDict:(NSDictionary *)options didFailWithError:(NSError *_Nullable *_Nullable)error; diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryScreenFrames.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryScreenFrames.h index 9a4bc68d0..d7c0351a4 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryScreenFrames.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryScreenFrames.h @@ -1,4 +1,8 @@ -#import "PrivatesHeader.h" +#if __has_include() +# import +#else +# import "PrivatesHeader.h" +#endif #if SENTRY_UIKIT_AVAILABLE diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration-Hybrid.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration-Hybrid.h index 21c32a263..a858a7bf6 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration-Hybrid.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration-Hybrid.h @@ -1,25 +1,24 @@ -#import -#import +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif + +#if __has_include() +# import +#else +# import "SentrySessionReplayIntegration.h" +#endif NS_ASSUME_NONNULL_BEGIN -#if SENTRY_UIKIT_AVAILABLE +#if SENTRY_TARGET_REPLAY_SUPPORTED @class SentryReplayOptions; @protocol SentryViewScreenshotProvider; @protocol SentryReplayBreadcrumbConverter; @protocol SentryRRWebEvent; -@interface SentrySessionReplayIntegration : NSObject - -- (void)startWithOptions:(SentryReplayOptions *)replayOptions - screenshotProvider:(id)screenshotProvider - breadcrumbConverter:(id)breadcrumbConverter - fullSession:(BOOL)shouldReplayFullSession; - -@end - -@interface -SentrySessionReplayIntegration () +@interface SentrySessionReplayIntegration () + (id)createBreadcrumbwithTimestamp:(NSDate *)timestamp category:(NSString *)category diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySessionReplayIntegration.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration.h similarity index 60% rename from Pods/Sentry/Sources/Sentry/include/SentrySessionReplayIntegration.h rename to Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration.h index dcb2ffc12..02243685a 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySessionReplayIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySessionReplayIntegration.h @@ -1,6 +1,14 @@ -#import "SentryBaseIntegration.h" -#import "SentryDefines.h" -#import +#if __has_include() +# import +#else +# import "SentryBaseIntegration.h" +#endif + +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif NS_ASSUME_NONNULL_BEGIN #if SENTRY_TARGET_REPLAY_SUPPORTED @@ -10,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN @interface SentrySessionReplayIntegration : SentryBaseIntegration +- (instancetype)initForManualUse:(nonnull SentryOptions *)options; + /** * Captures Replay. Used by the Hybrid SDKs. */ @@ -23,6 +33,18 @@ NS_ASSUME_NONNULL_BEGIN - (void)configureReplayWith:(nullable id)breadcrumbConverter screenshotProvider:(nullable id)screenshotProvider; +- (void)pause; + +- (void)resume; + +- (void)stop; + +- (void)start; + +- (void)showMaskPreview:(CGFloat)opacity; + +- (void)hideMaskPreview; + @end #endif // SENTRY_TARGET_REPLAY_SUPPORTED NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySwizzle.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySwizzle.h index 6a8241674..a6d9a04b5 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySwizzle.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentrySwizzle.h @@ -83,6 +83,23 @@ _SentrySWWrapArg(SentrySWArguments), _SentrySWWrapArg(SentrySWReplacement), \ SentrySwizzleMode, key) +#if SENTRY_TEST || SENTRY_TEST_CI +/** + * Unswizzles the instance method of the class. + * + * @warning To reduce the risk of breaking functionality with unswizzling, this method is not + * considered safe-to-use in production and only available in test targets. + * + * @param classToUnswizzle The class with the method that should be unswizzled. + * @param selector Selector of the method that should be unswizzled. + * @param key The key to unswizzle the method with. + * + * @return @c YES if successfully unswizzled and @c NO if the method was not swizzled. + */ +# define SentryUnswizzleInstanceMethod(classToUnswizzle, selector, key) \ + _SentryUnswizzleInstanceMethod(classToUnswizzle, selector, key) +#endif // SENTRY_TEST || SENTRY_TEST_CI + #pragma mark └ Swizzle Class Method /** @@ -159,12 +176,12 @@ typedef void (*SentrySwizzleOriginalIMP)(void /* id, SEL, ... */); */ @property (nonatomic, readonly) SEL selector; -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) /** * A flag to check whether the original implementation was called. */ @property (nonatomic) BOOL originalCalled; -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) @end @@ -302,6 +319,23 @@ typedef NS_ENUM(NSUInteger, SentrySwizzleMode) { mode:(SentrySwizzleMode)mode key:(const void *)key; +#if SENTRY_TEST || SENTRY_TEST_CI +/** + * Unswizzles the instance method of the class. + * + * @warning To reduce the risk of breaking functionality with unswizzling, this method is not + * considered safe-to-use in production and only available in test targets. + * + * @param selector Selector of the method that should be unswizzled. + * @param classToUnswizzle The class with the method that should be unswizzled. + * @param key The key is used in combination with the mode to indicate whether the + * swizzling should be done for the given class. + * + * @return @c YES if successfully unswizzled and @c NO if the method was not swizzled. + */ ++ (BOOL)unswizzleInstanceMethod:(SEL)selector inClass:(Class)classToUnswizzle key:(const void *)key; +#endif // SENTRY_TEST || SENTRY_TEST_CI + #pragma mark └ Swizzle Class method /** @@ -367,7 +401,7 @@ typedef NS_ENUM(NSUInteger, SentrySwizzleMode) { // and remove it later. #define _SentrySWArguments(arguments...) DEL, ##arguments -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) # define _SentrySWReplacement(code...) \ @try { \ code \ @@ -379,7 +413,7 @@ typedef NS_ENUM(NSUInteger, SentrySwizzleMode) { } #else # define _SentrySWReplacement(code...) code -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) #define _SentrySwizzleInstanceMethod(classToSwizzle, selector, SentrySWReturnType, \ SentrySWArguments, SentrySWReplacement, SentrySwizzleMode, KEY) \ @@ -396,6 +430,22 @@ typedef NS_ENUM(NSUInteger, SentrySwizzleMode) { mode:SentrySwizzleMode \ key:KEY]; +#if SENTRY_TEST || SENTRY_TEST_CI +/** + * Macro to unswizzle an instance method. + * + * @warning To reduce the risk of breaking functionality with unswizzling, this macro is not + * considered safe-to-use in production and only available in test targets. + * + * @param classToUnswizzle The class to unswizzle the method from. + * @param selector The selector of the method to unswizzle. + * @param KEY The key to unswizzle the method with. + * @return @c YES if the method was successfully unswizzled, @c NO otherwise. + */ +# define _SentryUnswizzleInstanceMethod(classToUnswizzle, selector, KEY) \ + [SentrySwizzle unswizzleInstanceMethod:selector inClass:[classToUnswizzle class] key:KEY] +#endif // SENTRY_TEST || SENTRY_TEST_CI + #define _SentrySwizzleClassMethod( \ classToSwizzle, selector, SentrySWReturnType, SentrySWArguments, SentrySWReplacement) \ [SentrySwizzle \ diff --git a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryUser+Private.h b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryUser+Private.h index e20205040..e0eb2c43d 100644 --- a/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryUser+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/HybridPublic/SentryUser+Private.h @@ -1,7 +1,10 @@ -#import "SentryUser.h" +#if __has_include() +# import +#else +# import "SentryUser.h" +#endif -@interface -SentryUser () +@interface SentryUser () /** * Initializes a SentryUser from a dictionary. diff --git a/Pods/Sentry/Sources/Sentry/include/NSLocale+Sentry.h b/Pods/Sentry/Sources/Sentry/include/NSLocale+Sentry.h index 5c8278f83..7d2098ad7 100644 --- a/Pods/Sentry/Sources/Sentry/include/NSLocale+Sentry.h +++ b/Pods/Sentry/Sources/Sentry/include/NSLocale+Sentry.h @@ -3,5 +3,6 @@ @interface SentryLocale : NSObject + (BOOL)timeIs24HourFormat; ++ (BOOL)isRightToLeftLanguage; @end diff --git a/Pods/Sentry/Sources/Sentry/include/NSMutableDictionary+Sentry.h b/Pods/Sentry/Sources/Sentry/include/NSMutableDictionary+Sentry.h index 9c72afb49..e364a5115 100644 --- a/Pods/Sentry/Sources/Sentry/include/NSMutableDictionary+Sentry.h +++ b/Pods/Sentry/Sources/Sentry/include/NSMutableDictionary+Sentry.h @@ -1,4 +1,3 @@ - #import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryANRTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryANRTrackerV1.h similarity index 73% rename from Pods/Sentry/Sources/Sentry/include/SentryANRTracker.h rename to Pods/Sentry/Sources/Sentry/include/SentryANRTrackerV1.h index 4c1971732..2953c34ad 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryANRTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryANRTrackerV1.h @@ -1,11 +1,13 @@ #import "SentryDefines.h" -@class SentryOptions, SentryCrashWrapper, SentryDispatchQueueWrapper, SentryThreadWrapper; +@class SentryOptions; +@class SentryCrashWrapper; +@class SentryDispatchQueueWrapper; +@class SentryThreadWrapper; +@protocol SentryANRTracker; NS_ASSUME_NONNULL_BEGIN -@protocol SentryANRTrackerDelegate; - /** * This class detects ANRs with a dedicated watchdog thread. The thread schedules a simple block to * run on the main thread, sleeps for the configured timeout interval, and checks if the main thread @@ -19,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN * seconds, and it executes all events in time. Instead, what matters is how long the main thread * needs to execute a newly added event to the run loop. */ -@interface SentryANRTracker : NSObject +@interface SentryANRTrackerV1 : NSObject SENTRY_NO_INIT - (instancetype)initWithTimeoutInterval:(NSTimeInterval)timeoutInterval @@ -27,23 +29,7 @@ SENTRY_NO_INIT dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper threadWrapper:(SentryThreadWrapper *)threadWrapper; -- (void)addListener:(id)listener; - -- (void)removeListener:(id)listener; - -// Function used for tests -- (void)clear; - -@end - -/** - * The ``SentryANRTracker`` calls the methods from background threads. - */ -@protocol SentryANRTrackerDelegate - -- (void)anrDetected; - -- (void)anrStopped; +- (id)asProtocol; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryANRTrackerV2.h b/Pods/Sentry/Sources/Sentry/include/SentryANRTrackerV2.h index 08a60e9f9..145a717f2 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryANRTrackerV2.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryANRTrackerV2.h @@ -1,5 +1,4 @@ #import "SentryDefines.h" -#import "SentrySwift.h" #if SENTRY_HAS_UIKIT @@ -7,6 +6,7 @@ @class SentryDispatchQueueWrapper; @class SentryThreadWrapper; @class SentryFramesTracker; +@protocol SentryANRTracker; NS_ASSUME_NONNULL_BEGIN @@ -29,12 +29,7 @@ SENTRY_NO_INIT threadWrapper:(SentryThreadWrapper *)threadWrapper framesTracker:(SentryFramesTracker *)framesTracker; -- (void)addListener:(id)listener; - -- (void)removeListener:(id)listener; - -// Function used for tests -- (void)clear; +- (id)asProtocol; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegration.h index b71c18c5a..c9f457a13 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegration.h @@ -1,14 +1,11 @@ -#import "SentryANRTracker.h" +#import "SentryANRTrackerV1.h" #import "SentryBaseIntegration.h" -#import "SentrySwift.h" -#import NS_ASSUME_NONNULL_BEGIN static NSString *const SentryANRExceptionType = @"App Hanging"; -@interface SentryANRTrackingIntegration - : SentryBaseIntegration +@interface SentryANRTrackingIntegration : SentryBaseIntegration - (void)pauseAppHangTracking; - (void)resumeAppHangTracking; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegrationV2.h b/Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegrationV2.h deleted file mode 100644 index cb2afe605..000000000 --- a/Pods/Sentry/Sources/Sentry/include/SentryANRTrackingIntegrationV2.h +++ /dev/null @@ -1,23 +0,0 @@ -#import "SentryANRTrackerV2.h" - -#if SENTRY_HAS_UIKIT - -# import "SentryBaseIntegration.h" -# import "SentrySwift.h" -# import - -NS_ASSUME_NONNULL_BEGIN - -static NSString *const SentryANRExceptionTypeV2 = @"App Hanging"; - -@interface SentryANRTrackingIntegrationV2 - : SentryBaseIntegration - -- (void)pauseAppHangTracking; -- (void)resumeAppHangTracking; - -@end - -NS_ASSUME_NONNULL_END - -#endif // SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/include/SentryAppStartTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryAppStartTracker.h index 1dc139567..7e4beb599 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryAppStartTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryAppStartTracker.h @@ -2,8 +2,6 @@ #if SENTRY_HAS_UIKIT -# import "SentrySwift.h" - @class SentryDispatchQueueWrapper; @class SentryAppStateManager; @class SentryFramesTracker; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryAppStartTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryAppStartTrackingIntegration.h index d31aa4449..753700dc9 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryAppStartTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryAppStartTrackingIntegration.h @@ -3,15 +3,13 @@ #if SENTRY_HAS_UIKIT # import "SentryBaseIntegration.h" -# import "SentrySwift.h" -# import NS_ASSUME_NONNULL_BEGIN /** * Tracks cold and warm app start time for iOS, tvOS, and Mac Catalyst. */ -@interface SentryAppStartTrackingIntegration : SentryBaseIntegration +@interface SentryAppStartTrackingIntegration : SentryBaseIntegration - (void)stop; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryAppStateManager.h b/Pods/Sentry/Sources/Sentry/include/SentryAppStateManager.h index 219639050..dcb2e459e 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryAppStateManager.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryAppStateManager.h @@ -1,7 +1,11 @@ #import "SentryDefines.h" -@class SentryOptions, SentryCrashWrapper, SentryAppState, SentryFileManager, - SentryDispatchQueueWrapper, SentryNSNotificationCenterWrapper; +@class SentryAppState; +@class SentryCrashWrapper; +@class SentryDispatchQueueWrapper; +@class SentryFileManager; +@class SentryNSNotificationCenterWrapper; +@class SentryOptions; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryAttachment+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryAttachment+Private.h index 2a8b7924a..b1baa9f60 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryAttachment+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryAttachment+Private.h @@ -1,6 +1,5 @@ #import "SentryAttachment.h" #import "SentryDefines.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -19,8 +18,7 @@ NSString *nameForSentryAttachmentType(SentryAttachmentType attachmentType); SentryAttachmentType typeForSentryAttachmentName(NSString *name); -@interface -SentryAttachment () +@interface SentryAttachment () SENTRY_NO_INIT /** diff --git a/Pods/Sentry/Sources/Sentry/include/SentryAutoBreadcrumbTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryAutoBreadcrumbTrackingIntegration.h index e40934fc2..8834c765d 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryAutoBreadcrumbTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryAutoBreadcrumbTrackingIntegration.h @@ -1,6 +1,5 @@ #import "SentryBaseIntegration.h" #import "SentryBreadcrumbDelegate.h" -#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN @@ -8,7 +7,7 @@ NS_ASSUME_NONNULL_BEGIN * This automatically adds breadcrumbs for different user actions. */ @interface SentryAutoBreadcrumbTrackingIntegration - : SentryBaseIntegration + : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryAutoSessionTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryAutoSessionTrackingIntegration.h index 89fe7a404..07992edd1 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryAutoSessionTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryAutoSessionTrackingIntegration.h @@ -1,13 +1,11 @@ #import "SentryBaseIntegration.h" -#import "SentrySwift.h" -#import NS_ASSUME_NONNULL_BEGIN /** * Automatically tracks session start and end. */ -@interface SentryAutoSessionTrackingIntegration : SentryBaseIntegration +@interface SentryAutoSessionTrackingIntegration : SentryBaseIntegration - (void)stop; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryBacktrace.hpp b/Pods/Sentry/Sources/Sentry/include/SentryBacktrace.hpp index 211a213d1..11fc51129 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryBacktrace.hpp +++ b/Pods/Sentry/Sources/Sentry/include/SentryBacktrace.hpp @@ -57,8 +57,8 @@ namespace profiling { * @param f The function to call for each entry. * @param cache The cache used to look up thread metadata. */ - void enumerateBacktracesForAllThreads(const std::function &f, - const std::shared_ptr &cache); + void enumerateBacktracesForAllThreads( + const std::function &f, ThreadMetadataCache *cache); } // namespace profiling } // namespace sentry diff --git a/Pods/Sentry/Sources/Sentry/include/SentryBreadcrumbTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryBreadcrumbTracker.h index 907e57ca6..6b10dea36 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryBreadcrumbTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryBreadcrumbTracker.h @@ -6,6 +6,10 @@ NS_ASSUME_NONNULL_BEGIN @interface SentryBreadcrumbTracker : NSObject +SENTRY_NO_INIT + +- (instancetype)initReportAccessibilityIdentifier:(BOOL)report; + - (void)startWithDelegate:(id)delegate; #if SENTRY_HAS_UIKIT - (void)startSwizzle; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryBuildAppStartSpans.h b/Pods/Sentry/Sources/Sentry/include/SentryBuildAppStartSpans.h index 22014687c..23b19aabc 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryBuildAppStartSpans.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryBuildAppStartSpans.h @@ -9,7 +9,7 @@ NS_ASSUME_NONNULL_BEGIN #if SENTRY_HAS_UIKIT NSArray *sentryBuildAppStartSpans( - SentryTracer *tracer, SentryAppStartMeasurement *appStartMeasurement); + SentryTracer *tracer, SentryAppStartMeasurement *_Nullable appStartMeasurement); #endif // SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/include/SentryClient+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryClient+Private.h index 356eac4a2..30085282f 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryClient+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryClient+Private.h @@ -2,21 +2,25 @@ #import "SentryDataCategory.h" #import "SentryDiscardReason.h" -@class SentrySession, SentryEnvelopeItem, SentryId, SentryAttachment, SentryThreadInspector, - SentryReplayEvent, SentryReplayRecording, SentryEnvelope; +@class SentryAttachment; +@class SentryEnvelope; +@class SentryEnvelopeItem; +@class SentryId; +@class SentryReplayEvent; +@class SentryReplayRecording; +@class SentrySession; +@class SentryThreadInspector; NS_ASSUME_NONNULL_BEGIN @protocol SentryClientAttachmentProcessor -- (nullable NSArray *)processAttachments: - (nullable NSArray *)attachments - forEvent:(SentryEvent *)event; +- (NSArray *)processAttachments:(NSArray *)attachments + forEvent:(SentryEvent *)event; @end -@interface -SentryClient () +@interface SentryClient () @property (nonatomic, strong) NSMutableArray> *attachmentProcessors; @@ -31,12 +35,16 @@ SentryClient () withScope:(SentryScope *)scope incrementSessionErrors:(SentrySession * (^)(void))sessionBlock; -- (SentryId *)captureCrashEvent:(SentryEvent *)event withScope:(SentryScope *)scope; +- (SentryId *)captureFatalEvent:(SentryEvent *)event withScope:(SentryScope *)scope; -- (SentryId *)captureCrashEvent:(SentryEvent *)event +- (SentryId *)captureFatalEvent:(SentryEvent *)event withSession:(SentrySession *)session withScope:(SentryScope *)scope; +- (void)saveCrashTransaction:(SentryTransaction *)transaction + withScope:(SentryScope *)scope + NS_SWIFT_NAME(saveCrashTransaction(transaction:scope:)); + - (SentryId *)captureEvent:(SentryEvent *)event withScope:(SentryScope *)scope additionalEnvelopeItems:(NSArray *)additionalEnvelopeItems diff --git a/Pods/Sentry/Sources/Sentry/include/SentryConcurrentRateLimitsDictionary.h b/Pods/Sentry/Sources/Sentry/include/SentryConcurrentRateLimitsDictionary.h index e3cf6bdb8..b6ea08892 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryConcurrentRateLimitsDictionary.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryConcurrentRateLimitsDictionary.h @@ -1,5 +1,4 @@ #import "SentryDataCategory.h" -#import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCoreDataSwizzling.h b/Pods/Sentry/Sources/Sentry/include/SentryCoreDataSwizzling.h index be87863a7..526cc9c33 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCoreDataSwizzling.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCoreDataSwizzling.h @@ -1,7 +1,6 @@ #import "SentryDefines.h" #import -#import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTracker.h index 4f30a205c..5b4e415cc 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTracker.h @@ -3,10 +3,8 @@ NS_ASSUME_NONNULL_BEGIN -static NSString *const SENTRY_COREDATA_FETCH_OPERATION = @"db.sql.query"; -static NSString *const SENTRY_COREDATA_SAVE_OPERATION = @"db.sql.transaction"; - -@class SentryThreadInspector, SentryNSProcessInfoWrapper; +@class SentryNSProcessInfoWrapper; +@class SentryThreadInspector; @interface SentryCoreDataTracker : NSObject SENTRY_NO_INIT diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTrackingIntegration.h index d4cee8933..256c9a604 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCoreDataTrackingIntegration.h @@ -1,9 +1,8 @@ #import "SentryBaseIntegration.h" -#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN -@interface SentryCoreDataTrackingIntegration : SentryBaseIntegration +@interface SentryCoreDataTrackingIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCrashInstallationReporter.h b/Pods/Sentry/Sources/Sentry/include/SentryCrashInstallationReporter.h index fb36e9c7e..de8957ee2 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCrashInstallationReporter.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCrashInstallationReporter.h @@ -1,9 +1,10 @@ #import "SentryCrash.h" #import "SentryCrashInstallation.h" #import "SentryDefines.h" -#import -@class SentryInAppLogic, SentryCrashWrapper, SentryDispatchQueueWrapper; +@class SentryCrashWrapper; +@class SentryDispatchQueueWrapper; +@class SentryInAppLogic; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCrashIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryCrashIntegration.h index 5f593d0a4..0afbfa90c 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCrashIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCrashIntegration.h @@ -1,15 +1,14 @@ #import "SentryBaseIntegration.h" -#import "SentrySwift.h" -#import NS_ASSUME_NONNULL_BEGIN -@class SentryScope, SentryCrashWrapper; +@class SentryCrashWrapper; +@class SentryScope; static NSString *const SentryDeviceContextFreeMemoryKey = @"free_memory"; static NSString *const SentryDeviceContextAppMemoryKey = @"app_memory"; -@interface SentryCrashIntegration : SentryBaseIntegration +@interface SentryCrashIntegration : SentryBaseIntegration /** * Needed for testing. diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCrashIntegrationSessionHandler.h b/Pods/Sentry/Sources/Sentry/include/SentryCrashIntegrationSessionHandler.h new file mode 100644 index 000000000..4d2ee4ad0 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryCrashIntegrationSessionHandler.h @@ -0,0 +1,29 @@ +#import "SentryDefines.h" + +@class SentryCrashWrapper; + +#if SENTRY_HAS_UIKIT +@class SentryWatchdogTerminationLogic; +#endif // SENTRY_HAS_UIKIT + +@interface SentryCrashIntegrationSessionHandler : NSObject + +#if SENTRY_HAS_UIKIT +- (instancetype)initWithCrashWrapper:(SentryCrashWrapper *)crashWrapper + watchdogTerminationLogic:(SentryWatchdogTerminationLogic *)watchdogTerminationLogic; +#else +- (instancetype)initWithCrashWrapper:(SentryCrashWrapper *)crashWrapper; +#endif // SENTRY_HAS_UIKIT + +/** + * When a crash or a watchdog termination happens, we end the current session as crashed, store it + * in a dedicated location, and delete the current one. The same applies if a fatal app hang occurs. + * Then, we end the current session as abnormal and store it in a dedicated abnormal session + * location. + * + * Check out the SentryHub, which implements most of the session logic, for more details about + * sessions. + */ +- (void)endCurrentSessionIfRequired; + +@end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCrashReportConverter.h b/Pods/Sentry/Sources/Sentry/include/SentryCrashReportConverter.h index a68a339ab..3792120e7 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCrashReportConverter.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCrashReportConverter.h @@ -1,6 +1,7 @@ #import -@class SentryEvent, SentryInAppLogic; +@class SentryEvent; +@class SentryInAppLogic; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCrashReportSink.h b/Pods/Sentry/Sources/Sentry/include/SentryCrashReportSink.h index aba12fb9a..728bacf1a 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCrashReportSink.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCrashReportSink.h @@ -1,8 +1,9 @@ #import "SentryCrash.h" #import "SentryDefines.h" -#import -@class SentryInAppLogic, SentryCrashWrapper, SentryDispatchQueueWrapper; +@class SentryCrashWrapper; +@class SentryDispatchQueueWrapper; +@class SentryInAppLogic; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCrashStackEntryMapper.h b/Pods/Sentry/Sources/Sentry/include/SentryCrashStackEntryMapper.h index f7679c97b..3338fe66e 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCrashStackEntryMapper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCrashStackEntryMapper.h @@ -1,9 +1,9 @@ #import "SentryCrashDynamicLinker.h" #import "SentryCrashStackCursor.h" #import "SentryDefines.h" -#import -@class SentryFrame, SentryInAppLogic; +@class SentryFrame; +@class SentryInAppLogic; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryCrashWrapper.h b/Pods/Sentry/Sources/Sentry/include/SentryCrashWrapper.h index 8a7868c22..a1736bec0 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryCrashWrapper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryCrashWrapper.h @@ -1,6 +1,5 @@ #import "SentryDefines.h" #import "SentryInternalCDefines.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -9,7 +8,6 @@ NS_ASSUME_NONNULL_BEGIN /** A wrapper around SentryCrash for testability. */ @interface SentryCrashWrapper : NSObject -SENTRY_NO_INIT + (instancetype)sharedInstance; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDataCategory.h b/Pods/Sentry/Sources/Sentry/include/SentryDataCategory.h index 3a384add2..63b18153c 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDataCategory.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDataCategory.h @@ -18,5 +18,6 @@ typedef NS_ENUM(NSUInteger, SentryDataCategory) { kSentryDataCategoryReplay = 9, kSentryDataCategoryProfileChunk = 10, kSentryDataCategorySpan = 11, - kSentryDataCategoryUnknown = 12, + kSentryDataCategoryFeedback = 12, + kSentryDataCategoryUnknown = 13, }; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDataCategoryMapper.h b/Pods/Sentry/Sources/Sentry/include/SentryDataCategoryMapper.h index 677996907..0454463b3 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDataCategoryMapper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDataCategoryMapper.h @@ -1,5 +1,4 @@ #import "SentryDataCategory.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -13,6 +12,7 @@ FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameUserFeedback; FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameProfile; FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameProfileChunk; FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameReplay; +FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameFeedback; FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameMetricBucket; FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameSpan; FOUNDATION_EXPORT NSString *const kSentryDataCategoryNameUnknown; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDateUtil.h b/Pods/Sentry/Sources/Sentry/include/SentryDateUtil.h index 333e20eb2..75030b7bb 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDateUtil.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDateUtil.h @@ -2,12 +2,12 @@ NS_ASSUME_NONNULL_BEGIN -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; @interface SentryDateUtil : NSObject SENTRY_NO_INIT -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider; - (BOOL)isInFuture:(NSDate *_Nullable)date; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDateUtils.h b/Pods/Sentry/Sources/Sentry/include/SentryDateUtils.h index 1a2d16f19..54e28e218 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDateUtils.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDateUtils.h @@ -1,9 +1,10 @@ #import "SentryDefines.h" -#import NS_ASSUME_NONNULL_BEGIN -SENTRY_EXTERN NSDate *sentry_fromIso8601String(NSString *string); +SENTRY_EXTERN NSDateFormatter *sentryGetIso8601FormatterWithMillisecondPrecision(void); + +SENTRY_EXTERN NSDate *_Nullable sentry_fromIso8601String(NSString *string); SENTRY_EXTERN NSString *sentry_toIso8601String(NSDate *date); diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDefaultRateLimits.h b/Pods/Sentry/Sources/Sentry/include/SentryDefaultRateLimits.h index b7552a5f9..a9ad86d20 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDefaultRateLimits.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDefaultRateLimits.h @@ -1,9 +1,8 @@ #import "SentryRateLimits.h" -#import @class SentryRetryAfterHeaderParser; @class SentryRateLimitParser; -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; NS_ASSUME_NONNULL_BEGIN @@ -19,7 +18,7 @@ NS_SWIFT_NAME(DefaultRateLimits) - (instancetype)initWithRetryAfterHeaderParser: (SentryRetryAfterHeaderParser *)retryAfterHeaderParser andRateLimitParser:(SentryRateLimitParser *)rateLimitParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; + currentDateProvider:(id)currentDateProvider; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDelayedFramesTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryDelayedFramesTracker.h index d936a259e..efd9f7b5a 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDelayedFramesTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDelayedFramesTracker.h @@ -2,7 +2,7 @@ #if SENTRY_HAS_UIKIT -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; @class SentryFramesDelayResult; NS_ASSUME_NONNULL_BEGIN @@ -19,7 +19,7 @@ SENTRY_NO_INIT * @param dateProvider The instance of a date provider. */ - (instancetype)initWithKeepDelayedFramesDuration:(CFTimeInterval)keepDelayedFramesDuration - dateProvider:(SentryCurrentDateProvider *)dateProvider; + dateProvider:(id)dateProvider; - (void)resetDelayedFramesTimeStamps; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDiscardReasonMapper.h b/Pods/Sentry/Sources/Sentry/include/SentryDiscardReasonMapper.h index 8937e13b3..726c702c6 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDiscardReasonMapper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDiscardReasonMapper.h @@ -1,5 +1,4 @@ #import "SentryDiscardReason.h" -#import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDispatchFactory.h b/Pods/Sentry/Sources/Sentry/include/SentryDispatchFactory.h index 9dd2b815a..74d2afde6 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDispatchFactory.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDispatchFactory.h @@ -1,3 +1,5 @@ +#import "SentryDispatchQueueProviderProtocol.h" +#import "SentryDispatchSourceProviderProtocol.h" #import @class SentryDispatchQueueWrapper; @@ -9,22 +11,8 @@ NS_ASSUME_NONNULL_BEGIN * A type of object that vends wrappers for dispatch queues and sources, which can be subclassed to * vend their mocked test subclasses. */ -@interface SentryDispatchFactory : NSObject - -/** - * Generate a new @c SentryDispatchQueueWrapper . - */ -- (SentryDispatchQueueWrapper *)queueWithName:(const char *)name - attributes:(dispatch_queue_attr_t)attributes; - -/** - * Generate a @c dispatch_source_t by internally vending the required @c SentryDispatchQueueWrapper. - */ -- (SentryDispatchSourceWrapper *)sourceWithInterval:(uint64_t)interval - leeway:(uint64_t)leeway - queueName:(const char *)queueName - attributes:(dispatch_queue_attr_t)attributes - eventHandler:(void (^)(void))eventHandler; +@interface SentryDispatchFactory + : NSObject @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDispatchQueueProviderProtocol.h b/Pods/Sentry/Sources/Sentry/include/SentryDispatchQueueProviderProtocol.h new file mode 100644 index 000000000..dc6ddfd1e --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryDispatchQueueProviderProtocol.h @@ -0,0 +1,33 @@ +#import + +@class SentryDispatchQueueWrapper; + +NS_ASSUME_NONNULL_BEGIN + +@protocol SentryDispatchQueueProviderProtocol + +/** + * Generate a new @c SentryDispatchQueueWrapper . + */ +- (SentryDispatchQueueWrapper *)queueWithName:(const char *)name + attributes:(dispatch_queue_attr_t)attributes; + +/** + * Creates a low priority 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 *)createLowPriorityQueue:(const char *)name + relativePriority:(int)relativePriority; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceProviderProtocol.h b/Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceProviderProtocol.h new file mode 100644 index 000000000..d55924c34 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceProviderProtocol.h @@ -0,0 +1,19 @@ +#import + +@class SentryDispatchSourceWrapper; + +NS_ASSUME_NONNULL_BEGIN + +@protocol SentryDispatchSourceProviderProtocol + +/** + * Generate a @c dispatch_source_t by internally vending the required @c SentryDispatchQueueWrapper. + */ +- (SentryDispatchSourceWrapper *)sourceWithInterval:(uint64_t)interval + leeway:(uint64_t)leeway + queueName:(const char *)queueName + attributes:(dispatch_queue_attr_t)attributes + eventHandler:(void (^)(void))eventHandler; +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceWrapper.h b/Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceWrapper.h index 2f817d09d..ec70bd316 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceWrapper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryDispatchSourceWrapper.h @@ -16,6 +16,11 @@ NS_ASSUME_NONNULL_BEGIN - (void)cancel; +#if SENTRY_TEST || SENTRY_TEST_CI +- (dispatch_source_t)source; +- (SentryDispatchQueueWrapper *)queue; +#endif // SENTRY_TEST || SENTRY_TEST_CI + @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryEnvelope+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryEnvelope+Private.h index b2b29f67f..9d97fe9ac 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryEnvelope+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryEnvelope+Private.h @@ -6,8 +6,7 @@ NS_ASSUME_NONNULL_BEGIN @class SentryReplayRecording; @class SentryClientReport; -@interface -SentryEnvelopeItem () +@interface SentryEnvelopeItem () - (instancetype)initWithClientReport:(SentryClientReport *)clientReport; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeAttachmentHeader.h b/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeAttachmentHeader.h index 74faab4d3..5e102500b 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeAttachmentHeader.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeAttachmentHeader.h @@ -10,7 +10,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithType:(NSString *)type length:(NSUInteger)length filename:(NSString *)filename - contentType:(NSString *)contentType + contentType:(nullable NSString *)contentType attachmentType:(SentryAttachmentType)attachmentType; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeRateLimit.h b/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeRateLimit.h index 283892427..08b81264f 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeRateLimit.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryEnvelopeRateLimit.h @@ -1,9 +1,9 @@ #import "SentryRateLimits.h" -#import @protocol SentryEnvelopeRateLimitDelegate; -@class SentryEnvelope, SentryEnvelopeItem; +@class SentryEnvelope; +@class SentryEnvelopeItem; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryEvent+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryEvent+Private.h index b6057135e..93ccff9d4 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryEvent+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryEvent+Private.h @@ -3,13 +3,13 @@ #import "SentryProfilingConditionals.h" #import -@interface -SentryEvent () +@interface SentryEvent () /** - * This indicates whether this event is a result of a crash. + * This indicates whether this event is a result of a fatal app termination, such as a crash, + * watchdog termination or a fatal app hang. */ -@property (nonatomic) BOOL isCrashEvent; +@property (nonatomic) BOOL isFatalEvent; /** * This indicates whether this event represents an app hang. @@ -18,11 +18,11 @@ SentryEvent () /** * We're storing serialized breadcrumbs to disk in JSON, and when we're reading them back (in - * the case of OOM), we end up with the serialized breadcrumbs again. Instead of turning those - * dictionaries into proper SentryBreadcrumb instances which then need to be serialized again in - * SentryEvent, we use this serializedBreadcrumbs property to set the pre-serialized - * breadcrumbs. It saves a LOT of work - especially turning an NSDictionary into a SentryBreadcrumb - * is silly when we're just going to do the opposite right after. + * the case of watchdog termination), we end up with the serialized breadcrumbs again. Instead of + * turning those dictionaries into proper SentryBreadcrumb instances which then need to be + * serialized again in SentryEvent, we use this serializedBreadcrumbs property to set the + * pre-serialized breadcrumbs. It saves a LOT of work - especially turning an NSDictionary into a + * SentryBreadcrumb is silly when we're just going to do the opposite right after. */ @property (nonatomic, strong) NSArray *serializedBreadcrumbs; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryExtraPackages.h b/Pods/Sentry/Sources/Sentry/include/SentryExtraPackages.h new file mode 100644 index 000000000..e2385624a --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryExtraPackages.h @@ -0,0 +1,21 @@ +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif + +NS_ASSUME_NONNULL_BEGIN + +@interface SentryExtraPackages : NSObject +SENTRY_NO_INIT + ++ (void)addPackageName:(NSString *)name version:(NSString *)version; ++ (NSMutableSet *> *)getPackages; + +#if SENTRY_TEST || SENTRY_TEST_CI ++ (void)clear; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSDataTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryFileIOTracker.h similarity index 53% rename from Pods/Sentry/Sources/Sentry/include/SentryNSDataTracker.h rename to Pods/Sentry/Sources/Sentry/include/SentryFileIOTracker.h index 830b136c5..4c023f1a5 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNSDataTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryFileIOTracker.h @@ -1,16 +1,23 @@ #import "SentryDefines.h" -#import NS_ASSUME_NONNULL_BEGIN -static NSString *const SENTRY_FILE_WRITE_OPERATION = @"file.write"; -static NSString *const SENTRY_FILE_READ_OPERATION = @"file.read"; +@class SentryNSProcessInfoWrapper; +@class SentryThreadInspector; -@class SentryThreadInspector, SentryNSProcessInfoWrapper; - -@interface SentryNSDataTracker : NSObject +@interface SentryFileIOTracker : NSObject SENTRY_NO_INIT +/** + * Convenience accessor to the shared instance of the tracker in the dependency container. + * + * @note Can be used from Swift without import the entire dependency container. + * @note If the SentrySDK is not enabled this will return nil. + * + * @return The shared instance of the tracker. + */ ++ (instancetype _Nullable)sharedInstance; + - (instancetype)initWithThreadInspector:(SentryThreadInspector *)threadInspector processInfoWrapper:(SentryNSProcessInfoWrapper *)processInfoWrapper; @@ -24,6 +31,7 @@ SENTRY_NO_INIT - (BOOL)measureNSData:(NSData *)data writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile + origin:(NSString *)origin method:(BOOL (^)(NSString *, BOOL))method; /** @@ -32,6 +40,7 @@ SENTRY_NO_INIT - (BOOL)measureNSData:(NSData *)data writeToFile:(NSString *)path options:(NSDataWritingOptions)writeOptionsMask + origin:(NSString *)origin error:(NSError **)error method:(BOOL (^)(NSString *, NSDataWritingOptions, NSError **))method; @@ -39,6 +48,7 @@ SENTRY_NO_INIT * Measure NSData 'initWithContentsOfFile:' method. */ - (nullable NSData *)measureNSDataFromFile:(NSString *)path + origin:(NSString *)origin method:(NSData *_Nullable (^)(NSString *))method; /** @@ -46,6 +56,7 @@ SENTRY_NO_INIT */ - (nullable NSData *)measureNSDataFromFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask + origin:(NSString *)origin error:(NSError **)error method:(NSData *_Nullable (^)( NSString *, NSDataReadingOptions, NSError **))method; @@ -55,9 +66,32 @@ SENTRY_NO_INIT */ - (nullable NSData *)measureNSDataFromURL:(NSURL *)url options:(NSDataReadingOptions)readOptionsMask + origin:(NSString *)origin error:(NSError **)error method:(NSData *_Nullable (^)( NSURL *, NSDataReadingOptions, NSError **))method; + +/** + * Measure NSFileManager 'createFileAtPath:contents:attributes::' method. + */ +- (BOOL)measureNSFileManagerCreateFileAtPath:(NSString *)path + data:(NSData *)data + attributes:(NSDictionary *)attributes + origin:(NSString *)origin + method:(BOOL (^)(NSString *, NSData *, + NSDictionary *))method; + +// MARK: - Internal Methods available for Swift Extension + +- (nullable id)spanForPath:(NSString *)path + origin:(NSString *)origin + operation:(NSString *)operation; + +- (nullable id)spanForPath:(NSString *)path + origin:(NSString *)origin + operation:(NSString *)operation + size:(NSUInteger)size; + @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryFileIOTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryFileIOTrackingIntegration.h index 0b0d56aac..7868a4048 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryFileIOTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryFileIOTrackingIntegration.h @@ -1,9 +1,8 @@ #import "SentryBaseIntegration.h" -#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN -@interface SentryFileIOTrackingIntegration : SentryBaseIntegration +@interface SentryFileIOTrackingIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryFileManager.h b/Pods/Sentry/Sources/Sentry/include/SentryFileManager.h index 698d9e5d5..61c0482e2 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryFileManager.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryFileManager.h @@ -15,9 +15,12 @@ NS_ASSUME_NONNULL_BEGIN @class SentryOptions; @class SentrySession; -#if SENTRY_TARGET_PROFILING_SUPPORTED -SENTRY_EXTERN NSString *sentryApplicationSupportPath(void); -#endif // SENTRY_TARGET_PROFILING_SUPPORTED +@protocol SentryFileManagerDelegate + +- (void)envelopeItemDeleted:(SentryEnvelopeItem *)envelopeItem + withCategory:(SentryDataCategory)dataCategory; + +@end NS_SWIFT_NAME(SentryFileManager) @interface SentryFileManager : NSObject @@ -25,6 +28,7 @@ SENTRY_NO_INIT @property (nonatomic, readonly) NSString *basePath; @property (nonatomic, readonly) NSString *sentryPath; + @property (nonatomic, readonly) NSString *breadcrumbsFilePathOne; @property (nonatomic, readonly) NSString *breadcrumbsFilePathTwo; @property (nonatomic, readonly) NSString *previousBreadcrumbsFilePathOne; @@ -38,30 +42,9 @@ SENTRY_NO_INIT - (void)setDelegate:(id)delegate; -- (NSString *)storeEnvelope:(SentryEnvelope *)envelope; - -- (void)storeCurrentSession:(SentrySession *)session; -- (void)storeCrashedSession:(SentrySession *)session; -- (SentrySession *_Nullable)readCurrentSession; -- (SentrySession *_Nullable)readCrashedSession; -- (void)deleteCurrentSession; -- (void)deleteCrashedSession; - -- (void)storeTimestampLastInForeground:(NSDate *)timestamp; -- (NSDate *_Nullable)readTimestampLastInForeground; -- (void)deleteTimestampLastInForeground; - -+ (BOOL)createDirectoryAtPath:(NSString *)path withError:(NSError **)error; - -/** - * Only used for teting. - */ -- (void)deleteAllEnvelopes; - -- (void)deleteAllFolders; - -- (void)deleteOldEnvelopeItems; +#pragma mark - Envelope +- (nullable NSString *)storeEnvelope:(SentryEnvelope *)envelope; /** * Only used for testing. */ @@ -79,23 +62,83 @@ SENTRY_NO_INIT */ - (SentryFileContents *_Nullable)getOldestEnvelope; -- (void)removeFileAtPath:(NSString *)path; +- (void)deleteOldEnvelopeItems; +/** + * Only used for teting. + */ +- (void)deleteAllEnvelopes; + +#pragma mark - Convenience Accessors +- (NSURL *)getSentryPathAsURL; + +#pragma mark - State +- (void)moveState:(NSString *)stateFilePath toPreviousState:(NSString *)previousStateFilePath; + +#pragma mark - Session +- (void)storeCurrentSession:(SentrySession *)session; +- (SentrySession *_Nullable)readCurrentSession; +- (void)deleteCurrentSession; + +- (void)storeCrashedSession:(SentrySession *)session; +- (SentrySession *_Nullable)readCrashedSession; +- (void)deleteCrashedSession; + +- (void)storeAbnormalSession:(SentrySession *)session; +- (SentrySession *_Nullable)readAbnormalSession; +- (void)deleteAbnormalSession; + +#pragma mark - LastInForeground +- (void)storeTimestampLastInForeground:(NSDate *)timestamp; +- (NSDate *_Nullable)readTimestampLastInForeground; +- (void)deleteTimestampLastInForeground; + +#pragma mark - App State - (void)storeAppState:(SentryAppState *)appState; - (void)moveAppStateToPreviousAppState; - (SentryAppState *_Nullable)readAppState; - (SentryAppState *_Nullable)readPreviousAppState; - (void)deleteAppState; +#pragma mark - Breadcrumbs - (void)moveBreadcrumbsToPreviousBreadcrumbs; - (NSArray *)readPreviousBreadcrumbs; +#pragma mark - TimezoneOffset - (NSNumber *_Nullable)readTimezoneOffset; - (void)storeTimezoneOffset:(NSInteger)offset; - (void)deleteTimezoneOffset; +#pragma mark - AppHangs +- (void)storeAppHangEvent:(SentryEvent *)appHangEvent; +- (nullable SentryEvent *)readAppHangEvent; +- (BOOL)appHangEventExists; +- (void)deleteAppHangEvent; + +#pragma mark - File Operations ++ (BOOL)createDirectoryAtPath:(NSString *)path withError:(NSError **)error; +- (void)deleteAllFolders; +- (void)removeFileAtPath:(NSString *)path; +- (NSArray *)allFilesInFolder:(NSString *)path; +- (BOOL)isDirectory:(NSString *)path; +- (nullable NSData *)readDataFromPath:(NSString *)path + error:(NSError *__autoreleasing _Nullable *)error; +- (BOOL)writeData:(NSData *)data toPath:(NSString *)path; + BOOL createDirectoryIfNotExists(NSString *path, NSError **error); -SENTRY_EXTERN NSString *_Nullable sentryApplicationSupportPath(void); + +/** + * Path for a default directory Sentry can use in the app sandbox' caches directory. + * @note This method must be statically accessible because it will be called during app launch, + * before any instance of @c SentryFileManager exists, and so wouldn't be able to access this path. + * @note For unsandboxed macOS apps, the path has the form @c ~/Library/Caches/ . + * from an objc property on it like the other paths. It also cannot use + * @c SentryOptions.cacheDirectoryPath since this can be called before + * @c SentrySDK.startWithOptions . + */ +SENTRY_EXTERN NSString *_Nullable sentryStaticCachesPath(void); + +#pragma mark - Profiling #if SENTRY_TARGET_PROFILING_SUPPORTED /** @@ -111,7 +154,8 @@ SENTRY_EXTERN BOOL appLaunchProfileConfigFileExists(void); * Retrieve the contents of the launch profile config file, which stores the sample rates used to * decide whether or not to profile this launch. */ -SENTRY_EXTERN NSDictionary *_Nullable appLaunchProfileConfiguration(void); +SENTRY_EXTERN NSDictionary *_Nullable sentry_appLaunchProfileConfiguration( + void); /** * Write a config file that stores the sample rates used to determine whether this launch should @@ -128,14 +172,13 @@ SENTRY_EXTERN void writeAppLaunchProfilingConfigFile( */ SENTRY_EXTERN void removeAppLaunchProfilingConfigFile(void); -#endif // SENTRY_TARGET_PROFILING_SUPPORTED - -@end +SENTRY_EXTERN NSString *_Nullable sentryStaticBasePath(void); -@protocol SentryFileManagerDelegate +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) +SENTRY_EXTERN void removeSentryStaticBasePath(void); +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) -- (void)envelopeItemDeleted:(SentryEnvelopeItem *)envelopeItem - withCategory:(SentryDataCategory)dataCategory; +#endif // SENTRY_TARGET_PROFILING_SUPPORTED @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryFramesTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryFramesTrackingIntegration.h index 5adb7ee06..68f7fea6c 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryFramesTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryFramesTrackingIntegration.h @@ -3,12 +3,10 @@ #if SENTRY_HAS_UIKIT # import "SentryBaseIntegration.h" -# import "SentrySwift.h" -# import NS_ASSUME_NONNULL_BEGIN -@interface SentryFramesTrackingIntegration : SentryBaseIntegration +@interface SentryFramesTrackingIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryHttpStatusCodeRange+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryHttpStatusCodeRange+Private.h index 1b3813c7b..6df1a0ee0 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryHttpStatusCodeRange+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryHttpStatusCodeRange+Private.h @@ -2,8 +2,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryHttpStatusCodeRange () +@interface SentryHttpStatusCodeRange () - (BOOL)isInRange:(NSInteger)statusCode; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryHttpTransport.h b/Pods/Sentry/Sources/Sentry/include/SentryHttpTransport.h index 5636da85b..fbf0e1f06 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryHttpTransport.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryHttpTransport.h @@ -4,9 +4,10 @@ #import "SentryRateLimits.h" #import "SentryRequestManager.h" #import "SentryTransport.h" -#import -@class SentryOptions, SentryDispatchQueueWrapper, SentryNSURLRequestBuilder; +@class SentryDispatchQueueWrapper; +@class SentryNSURLRequestBuilder; +@class SentryOptions; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryHub+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryHub+Private.h index 56176814f..c5cc952ed 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryHub+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryHub+Private.h @@ -17,8 +17,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryHub () +@interface SentryHub () @property (nullable, nonatomic, strong) SentrySession *session; @@ -35,9 +34,13 @@ SentryHub () - (SentryClient *_Nullable)client; -- (void)captureCrashEvent:(SentryEvent *)event; +- (void)captureFatalEvent:(SentryEvent *)event; -- (void)captureCrashEvent:(SentryEvent *)event withScope:(SentryScope *)scope; +- (void)captureFatalEvent:(SentryEvent *)event withScope:(SentryScope *)scope; + +#if SENTRY_HAS_UIKIT +- (void)captureFatalAppHangEvent:(SentryEvent *)event; +#endif // SENTRY_HAS_UIKIT - (void)captureReplayEvent:(SentryReplayEvent *)replayEvent replayRecording:(SentryReplayRecording *)replayRecording @@ -60,6 +63,7 @@ SentryHub () - (void)captureTransaction:(SentryTransaction *)transaction withScope:(SentryScope *)scope additionalEnvelopeItems:(NSArray *)additionalEnvelopeItems; +- (void)saveCrashTransaction:(SentryTransaction *)transaction; - (void)storeEnvelope:(SentryEnvelope *)envelope; - (void)captureEnvelope:(SentryEnvelope *)envelope; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryInAppLogic.h b/Pods/Sentry/Sources/Sentry/include/SentryInAppLogic.h index b2031bb6d..683271c7b 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryInAppLogic.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryInAppLogic.h @@ -1,5 +1,4 @@ #import "SentryDefines.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -32,8 +31,6 @@ SENTRY_NO_INIT @property (nonnull, readonly) NSArray *inAppIncludes; -@property (nonnull, readonly) NSArray *inAppExcludes; - /** * Initializes @c SentryInAppLogic with @c inAppIncludes and @c inAppExcludes. * diff --git a/Pods/Sentry/Sources/Sentry/include/SentryInternalDefines.h b/Pods/Sentry/Sources/Sentry/include/SentryInternalDefines.h index 716da2642..ddc9e9f36 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryInternalDefines.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryInternalDefines.h @@ -20,12 +20,24 @@ static NSString *const SentryPlatformName = @"cocoa"; #define SENTRY_DEFAULT_PROFILES_SAMPLE_RATE @0 /** - * Abort in debug, and log a warning in production. + * Abort in debug, and log a warning in production. Meant to help customers while they work locally, + * but not crash their app in production if a condition inadvertently becomes true. */ #define SENTRY_GRACEFUL_FATAL(...) \ SENTRY_LOG_WARN(__VA_ARGS__); \ NSAssert(NO, __VA_ARGS__); +/** + * Abort in test, log a warning otherwise. Meant to help us fail faster in our own development, but + * never crash customers because since it's not something they can control with their own + * configuration. + */ +#if SENTRY_TEST || SENTRY_TEST_CI +# define SENTRY_TEST_FATAL(...) SENTRY_CASSERT(NO, __VA_ARGS__) +#else +# define SENTRY_TEST_FATAL(...) SENTRY_LOG_WARN(__VA_ARGS__) +#endif // SENTRY_TEST || SENTRY_TEST_CI + /** * Abort if assertion fails in debug, and log a warning if it fails in production. */ diff --git a/Pods/Sentry/Sources/Sentry/include/SentryInternalSerializable.h b/Pods/Sentry/Sources/Sentry/include/SentryInternalSerializable.h index bf35787d6..be78e12ae 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryInternalSerializable.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryInternalSerializable.h @@ -1,4 +1,9 @@ -#import "SentryDefines.h" +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif + #import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryLaunchProfiling.h b/Pods/Sentry/Sources/Sentry/include/SentryLaunchProfiling.h index 7deb692cc..c477e76ad 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryLaunchProfiling.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryLaunchProfiling.h @@ -13,6 +13,14 @@ NS_ASSUME_NONNULL_BEGIN +SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyTracesSampleRate; +SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyTracesSampleRand; +SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyProfilesSampleRate; +SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyProfilesSampleRand; +SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyContinuousProfiling; +SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyContinuousProfilingV2; +SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyContinuousProfilingV2Lifecycle; + /** * Whether or not the profiler started with the app launch. With trace profiling, this means there * is a tracer managing the profile that will eventually need to be stopped and either discarded (in diff --git a/Pods/Sentry/Sources/Sentry/include/SentryLevelHelper.h b/Pods/Sentry/Sources/Sentry/include/SentryLevelHelper.h index 1211dd648..23cf1695b 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryLevelHelper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryLevelHelper.h @@ -3,10 +3,15 @@ NS_ASSUME_NONNULL_BEGIN @class SentryBreadcrumb; +@class SentryEvent; /** * This is a workaround to access SentryLevel value from swift */ -NSUInteger sentry_breadcrumbLevel(SentryBreadcrumb *breadcrumb); +@interface SentryLevelBridge : NSObject ++ (NSUInteger)breadcrumbLevel:(SentryBreadcrumb *)breadcrumb; ++ (void)setBreadcrumbLevel:(SentryBreadcrumb *)breadcrumb level:(NSUInteger)level; ++ (void)setBreadcrumbLevelOnEvent:(SentryEvent *)event level:(NSUInteger)level; +@end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryLog.h b/Pods/Sentry/Sources/Sentry/include/SentryLog.h index 7ea936747..1460d7f48 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryLog.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryLog.h @@ -1,19 +1,37 @@ #import "SentryDefines.h" -#import "SentrySwift.h" -#define SENTRY_LOG(_SENTRY_LOG_LEVEL, ...) \ - if ([SentryLog willLogAtLevel:_SENTRY_LOG_LEVEL]) { \ - [SentryLog logWithMessage:[NSString stringWithFormat:@"[%@:%d] %@", \ - [[[NSString stringWithUTF8String:__FILE__] \ - lastPathComponent] stringByDeletingPathExtension], \ - __LINE__, [NSString stringWithFormat:__VA_ARGS__]] \ - andLevel:_SENTRY_LOG_LEVEL]; \ - } -#define SENTRY_LOG_DEBUG(...) SENTRY_LOG(kSentryLevelDebug, __VA_ARGS__) -#define SENTRY_LOG_INFO(...) SENTRY_LOG(kSentryLevelInfo, __VA_ARGS__) -#define SENTRY_LOG_WARN(...) SENTRY_LOG(kSentryLevelWarning, __VA_ARGS__) -#define SENTRY_LOG_ERROR(...) SENTRY_LOG(kSentryLevelError, __VA_ARGS__) -#define SENTRY_LOG_FATAL(...) SENTRY_LOG(kSentryLevelFatal, __VA_ARGS__) +#ifdef __cplusplus +extern "C" { +#endif +bool debugEnabled(void); +bool infoEnabled(void); +bool warnEnabled(void); +bool errorEnabled(void); +bool fatalEnabled(void); +void logDebug(const char file[], int line, NSString *format, ...); +void logInfo(const char file[], int line, NSString *format, ...); +void logWarn(const char file[], int line, NSString *format, ...); +void logError(const char file[], int line, NSString *format, ...); +void logFatal(const char file[], int line, NSString *format, ...); +#ifdef __cplusplus +} +#endif + +#define SENTRY_LOG_DEBUG(...) \ + if (debugEnabled()) \ + logDebug(__FILE__, __LINE__, __VA_ARGS__); +#define SENTRY_LOG_INFO(...) \ + if (infoEnabled()) \ + logInfo(__FILE__, __LINE__, __VA_ARGS__); +#define SENTRY_LOG_WARN(...) \ + if (warnEnabled()) \ + logWarn(__FILE__, __LINE__, __VA_ARGS__); +#define SENTRY_LOG_ERROR(...) \ + if (errorEnabled()) \ + logError(__FILE__, __LINE__, __VA_ARGS__); +#define SENTRY_LOG_FATAL(...) \ + if (fatalEnabled()) \ + logFatal(__FILE__, __LINE__, __VA_ARGS__); /** * If @c errno is set to a non-zero value after @c statement finishes executing, diff --git a/Pods/Sentry/Sources/Sentry/include/SentryLogC.h b/Pods/Sentry/Sources/Sentry/include/SentryLogC.h index a6d2057c1..a7e84525c 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryLogC.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryLogC.h @@ -1,4 +1,9 @@ #ifndef SentryLogC_h #define SentryLogC_h -void sentry_initializeAsyncLogFile(void); +#import + +@interface SentryAsyncLogWrapper : NSObject ++ (void)initializeAsyncLogFile; +@end + #endif diff --git a/Pods/Sentry/Sources/Sentry/include/SentryMetricKitIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryMetricKitIntegration.h index eb068c1b7..c2ec22050 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryMetricKitIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryMetricKitIntegration.h @@ -4,8 +4,8 @@ # import "SentryBaseIntegration.h" # import "SentryEvent.h" -# import "SentrySwift.h" -# import + +@protocol SentryMXManagerDelegate; NS_ASSUME_NONNULL_BEGIN @@ -20,8 +20,7 @@ static NSString *const SentryMetricKitHangDiagnosticMechanism = @"mx_hang_diagno API_AVAILABLE(ios(15.0), macos(12.0), macCatalyst(15.0)) API_UNAVAILABLE(tvos, watchos) -@interface SentryMetricKitIntegration - : SentryBaseIntegration +@interface SentryMetricKitIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryMetricProfiler.h b/Pods/Sentry/Sources/Sentry/include/SentryMetricProfiler.h index 4f81f0e7f..9b3409f6c 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryMetricProfiler.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryMetricProfiler.h @@ -4,7 +4,6 @@ # import "SentryDefines.h" # import "SentryProfilerDefines.h" -# import @class SentryTransaction; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryMsgPackSerializer.h b/Pods/Sentry/Sources/Sentry/include/SentryMsgPackSerializer.h index d6a1485e3..8206c8551 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryMsgPackSerializer.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryMsgPackSerializer.h @@ -22,12 +22,10 @@ NS_ASSUME_NONNULL_BEGIN @end -@interface -NSData (inputStreameble) +@interface NSData (inputStreameble) @end -@interface -NSURL (inputStreameble) +@interface NSURL (inputStreameble) @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSDataSwizzling.h b/Pods/Sentry/Sources/Sentry/include/SentryNSDataSwizzling.h index 4c041da81..c2572a50b 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNSDataSwizzling.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNSDataSwizzling.h @@ -1,5 +1,5 @@ #import "SentryDefines.h" -#import +#import "SentryFileIOTracker.h" NS_ASSUME_NONNULL_BEGIN @@ -10,7 +10,7 @@ SENTRY_NO_INIT @property (class, readonly) SentryNSDataSwizzling *shared; -- (void)startWithOptions:(SentryOptions *)options; +- (void)startWithOptions:(SentryOptions *)options tracker:(SentryFileIOTracker *)tracker; - (void)stop; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSDataUtils.h b/Pods/Sentry/Sources/Sentry/include/SentryNSDataUtils.h index aa2d5d5a6..19692a4b9 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNSDataUtils.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNSDataUtils.h @@ -11,10 +11,4 @@ NSData *_Nullable sentry_gzippedWithCompressionLevel( */ NSData *_Nullable sentry_nullTerminated(NSData *_Nullable data); -/** - * Calculates an CRC32 (Cyclic Redundancy Check 32) checksum for the string by first encoding it to - * UTF8Encoded data. - */ -NSUInteger sentry_crc32ofString(NSString *value); - NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSDictionarySanitize.h b/Pods/Sentry/Sources/Sentry/include/SentryNSDictionarySanitize.h index 4200e90ac..2a26866ff 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNSDictionarySanitize.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNSDictionarySanitize.h @@ -1,7 +1,8 @@ +#import "SentryDefines.h" #import NS_ASSUME_NONNULL_BEGIN -NSDictionary *_Nullable sentry_sanitize(NSDictionary *_Nullable dictionary); +SENTRY_EXTERN NSDictionary *_Nullable sentry_sanitize(NSDictionary *_Nullable dictionary); NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSFileManagerSwizzling.h b/Pods/Sentry/Sources/Sentry/include/SentryNSFileManagerSwizzling.h new file mode 100644 index 000000000..4ed7b8425 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryNSFileManagerSwizzling.h @@ -0,0 +1,19 @@ +#import "SentryDefines.h" +#import "SentryFileIOTracker.h" + +NS_ASSUME_NONNULL_BEGIN + +@class SentryOptions; + +@interface SentryNSFileManagerSwizzling : NSObject +SENTRY_NO_INIT + +@property (class, readonly) SentryNSFileManagerSwizzling *shared; + +- (void)startWithOptions:(SentryOptions *)options tracker:(SentryFileIOTracker *)tracker; + +- (void)stop; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSProcessInfoWrapper.h b/Pods/Sentry/Sources/Sentry/include/SentryNSProcessInfoWrapper.h index 5bd38f6fc..f7aff957a 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNSProcessInfoWrapper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNSProcessInfoWrapper.h @@ -7,10 +7,12 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSString *processDirectoryPath; @property (nullable, nonatomic, readonly) NSString *processPath; @property (readonly) NSUInteger processorCount; +@property (readonly) NSProcessInfoThermalState thermalState; +@property (readonly) NSDictionary *environment; -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) - (void)setProcessPath:(NSString *)path; -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequest.h b/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequest.h index 5b6db8f50..7d8816439 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequest.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequest.h @@ -2,7 +2,8 @@ NS_ASSUME_NONNULL_BEGIN -@class SentryDsn, SentryEvent; +@class SentryDsn; +@class SentryEvent; @interface SentryNSURLRequest : NSMutableURLRequest diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequestBuilder.h b/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequestBuilder.h index 26bc4d617..98de37ba2 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequestBuilder.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNSURLRequestBuilder.h @@ -1,6 +1,7 @@ #import -@class SentryEnvelope, SentryDsn; +@class SentryDsn; +@class SentryEnvelope; NS_ASSUME_NONNULL_BEGIN @@ -9,13 +10,13 @@ NS_ASSUME_NONNULL_BEGIN */ @interface SentryNSURLRequestBuilder : NSObject -- (NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope - dsn:(SentryDsn *)dsn - didFailWithError:(NSError *_Nullable *_Nullable)error; +- (nullable NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope + dsn:(SentryDsn *)dsn + didFailWithError:(NSError *_Nullable *_Nullable)error; -- (NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope - url:(NSURL *)url - didFailWithError:(NSError *_Nullable *_Nullable)error; +- (nullable NSURLRequest *)createEnvelopeRequest:(SentryEnvelope *)envelope + url:(NSURL *)url + didFailWithError:(NSError *_Nullable *_Nullable)error; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNetworkTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryNetworkTracker.h index e24ef161c..c5f12a8a1 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNetworkTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNetworkTracker.h @@ -4,7 +4,6 @@ NS_ASSUME_NONNULL_BEGIN @class SentryOptions; -static NSString *const SENTRY_NETWORK_REQUEST_OPERATION = @"http.client"; static NSString *const SENTRY_NETWORK_REQUEST_TRACKER_SPAN = @"SENTRY_NETWORK_REQUEST_TRACKER_SPAN"; static NSString *const SENTRY_NETWORK_REQUEST_START_DATE = @"SENTRY_NETWORK_REQUEST_START_DATE"; static NSString *const SENTRY_NETWORK_REQUEST_TRACKER_BREADCRUMB diff --git a/Pods/Sentry/Sources/Sentry/include/SentryNetworkTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryNetworkTrackingIntegration.h index 2b29bf589..838f1e5d9 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryNetworkTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryNetworkTrackingIntegration.h @@ -1,9 +1,8 @@ #import "SentryBaseIntegration.h" -#import "SentrySwift.h" NS_ASSUME_NONNULL_BEGIN -@interface SentryNetworkTrackingIntegration : SentryBaseIntegration +@interface SentryNetworkTrackingIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryOptions+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryOptions+Private.h index 839ca7e6c..58219cd48 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryOptions+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryOptions+Private.h @@ -8,17 +8,25 @@ NS_ASSUME_NONNULL_BEGIN FOUNDATION_EXPORT NSString *const kSentryDefaultEnvironment; -@interface -SentryOptions () +@interface SentryOptions () #if SENTRY_TARGET_PROFILING_SUPPORTED @property (nonatomic, assign) BOOL enableProfiling_DEPRECATED_TEST_ONLY; - (BOOL)isContinuousProfilingEnabled; +- (BOOL)isContinuousProfilingV2Enabled; +- (BOOL)isProfilingCorrelatedToTraces; +@property (nonatomic, nullable, strong) SentryProfileOptions *profiling; #endif // SENTRY_TARGET_PROFILING_SUPPORTED -SENTRY_EXTERN BOOL sentry_isValidSampleRate(NSNumber *sampleRate); +@property (nonatomic, readonly, class) NSArray *defaultIntegrationClasses; + +@property (nonatomic, strong, nullable) + SentryUserFeedbackConfiguration *userFeedbackConfiguration API_AVAILABLE(ios(13.0)); -@property (nonatomic, assign) BOOL enableAppHangTrackingV2; +SENTRY_EXTERN BOOL sentry_isValidSampleRate(NSNumber *sampleRate); +#if SENTRY_HAS_UIKIT +- (BOOL)isAppHangTrackingV2Disabled; +#endif // SENTRY_HAS_UIKIT @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTracker.h index 0f8ee69e7..a01f3d309 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTracker.h @@ -1,6 +1,5 @@ #import "SentryDefines.h" #import "SentrySpanStatus.h" -#import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTrackingIntegration.h index 1f1bbe93e..7d639b1c1 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryPerformanceTrackingIntegration.h @@ -3,8 +3,6 @@ #if SENTRY_HAS_UIKIT # import "SentryBaseIntegration.h" -# import "SentrySwift.h" -# import NS_ASSUME_NONNULL_BEGIN @@ -13,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN * Automatic UI performance setup can be avoided by setting @c enableAutoPerformanceTracing to @c NO * in @c SentryOptions during SentrySDK initialization. */ -@interface SentryPerformanceTrackingIntegration : SentryBaseIntegration +@interface SentryPerformanceTrackingIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryPrivate.h b/Pods/Sentry/Sources/Sentry/include/SentryPrivate.h index 5d9f0e219..f8b80d048 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryPrivate.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryPrivate.h @@ -1,16 +1,30 @@ -// Sentry internal headers that are needed for swift code +// Sentry internal headers that are needed for swift code; you cannot import headers that depend on +// public interfaces here +#import "NSLocale+Sentry.h" #import "SentryDispatchQueueWrapper.h" #import "SentryNSDataUtils.h" #import "SentryRandom.h" -#import "SentryStatsdClient.h" #import "SentryTime.h" +#import "SentryUserAccess.h" // Headers that also import SentryDefines should be at the end of this list // otherwise it wont compile #import "SentryDateUtil.h" +#import "SentryDateUtils.h" #import "SentryDisplayLinkWrapper.h" +#import "SentryFileIOTracker.h" +#import "SentryFileManager.h" #import "SentryLevelHelper.h" #import "SentryLogC.h" +#import "SentryMeta.h" +#import "SentryNSDictionarySanitize.h" +#import "SentryProfiler+Private.h" #import "SentryRandom.h" +#import "SentryScreenshot.h" #import "SentrySdkInfo.h" +#import "SentrySerialization.h" #import "SentrySession.h" +#import "SentrySpanDataKey.h" +#import "SentrySpanOperation.h" +#import "SentryTraceHeader.h" +#import "SentryTraceOrigin.h" diff --git a/Pods/Sentry/Sources/Sentry/include/SentryProfiledTracerConcurrency.h b/Pods/Sentry/Sources/Sentry/include/SentryProfiledTracerConcurrency.h index 6af9cedb3..15e8030e3 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryProfiledTracerConcurrency.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryProfiledTracerConcurrency.h @@ -1,8 +1,23 @@ #import "SentryCompiler.h" +#import "SentryDefines.h" #import "SentryProfilingConditionals.h" +#import "SentrySampleDecision.h" #import -@class SentryProfiler, SentryId; +@class SentryProfiler; + +@class SentryEnvelope; +@class SentryEnvelopeItem; +@class SentryHub; +@class SentryTransaction; +@class SentryDispatchQueueWrapper; +@class SentryTracerConfiguration; +@class SentryProfileOptions; +@class SentryId; +#if SENTRY_HAS_UIKIT +@class SentryAppStartMeasurement; +#endif // SENTRY_HAS_UIKIT +@class SentryTransactionContext; #if SENTRY_TARGET_PROFILING_SUPPORTED @@ -10,17 +25,40 @@ NS_ASSUME_NONNULL_BEGIN SENTRY_EXTERN_C_BEGIN +void sentry_captureTransactionWithProfile(SentryHub *hub, SentryDispatchQueueWrapper *dispatchQueue, + SentryTransaction *transaction, NSDate *startTimestamp); + +/** + * @Returns An ID to use as a unique, unchanging ID for the tracer that started the profiler. It's + * different from the profiler's internal ID. + */ +SentryId *_Nullable sentry_startProfilerForTrace(SentryTracerConfiguration *configuration, + SentryHub *hub, SentryTransactionContext *transactionContext); + +/** + * @note Only called for transaction-based profiling or continuous profiling V2 with trace lifecycle + * option configured. + */ +SENTRY_EXTERN void sentry_stopProfilerDueToFinishedTransaction( + SentryHub *hub, SentryDispatchQueueWrapper *dispatchQueue, SentryTransaction *transaction, + BOOL isProfiling, NSDate *traceStartTimestamp, uint64_t startSystemTime +# if SENTRY_HAS_UIKIT + , + SentryAppStartMeasurement *appStartMeasurement +# endif // SENTRY_HAS_UIKIT +); + /** * Associate the provided profiler and tracer so that profiling data may be retrieved by the tracer * when it is ready to transmit its envelope. */ -void sentry_trackProfilerForTracer(SentryProfiler *profiler, SentryId *internalTraceId); +void sentry_trackTransactionProfilerForTrace(SentryProfiler *profiler, SentryId *internalTraceId); /** * For transactions that will be discarded, clean up the bookkeeping state associated with them to * reclaim the memory they're using. */ -void sentry_discardProfilerForTracer(SentryId *internalTraceId); +void sentry_discardProfilerCorrelatedToTrace(SentryId *internalTraceId, SentryHub *hub); /** * Return the profiler instance associated with the tracer. If it was the last tracer for the @@ -30,10 +68,10 @@ void sentry_discardProfilerForTracer(SentryId *internalTraceId); */ SentryProfiler *_Nullable sentry_profilerForFinishedTracer(SentryId *internalTraceId); -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) void sentry_resetConcurrencyTracking(void); NSUInteger sentry_currentProfiledTracers(void); -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) SENTRY_EXTERN_C_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryProfiler+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryProfiler+Private.h index c340db092..0f5edd11b 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryProfiler+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryProfiler+Private.h @@ -4,7 +4,6 @@ # import "SentryDefines.h" # import "SentryProfilerDefines.h" -# import @class SentryEnvelopeItem; @class SentryHub; @@ -12,6 +11,7 @@ @class SentryMetricProfiler; @class SentryOptions; @class SentryProfilerState; +@class SentrySamplerDecision; @class SentryTransaction; # if SENTRY_HAS_UIKIT @@ -26,7 +26,17 @@ NS_ASSUME_NONNULL_BEGIN * launch's profiling, stop tracer profiling if no automatic performance transaction is running, * start the continuous profiler if enabled and not profiling from launch. */ -SENTRY_EXTERN void sentry_manageTraceProfilerOnStartSDK(SentryOptions *options, SentryHub *hub); +SENTRY_EXTERN void sentry_sdkInitProfilerTasks(SentryOptions *options, SentryHub *hub); + +/** + * Continuous profiling will respect its own sampling rate, which is computed once for each Sentry + * session. + */ +SENTRY_EXTERN SentrySamplerDecision *_Nullable sentry_profilerSessionSampleDecision; + +SENTRY_EXTERN void sentry_reevaluateSessionSampleRate(float sessionSampleRate); + +SENTRY_EXTERN void sentry_configureContinuousProfiling(SentryOptions *options); /** * A wrapper around the low-level components used to gather sampled backtrace profiles. diff --git a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerDefines.h b/Pods/Sentry/Sources/Sentry/include/SentryProfilerDefines.h similarity index 93% rename from Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerDefines.h rename to Pods/Sentry/Sources/Sentry/include/SentryProfilerDefines.h index f250e919f..54f318ab6 100644 --- a/Pods/Sentry/Sources/Sentry/Profiling/SentryProfilerDefines.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryProfilerDefines.h @@ -3,7 +3,6 @@ #if SENTRY_TARGET_PROFILING_SUPPORTED # import "SentryDefines.h" -# import typedef NS_ENUM(NSUInteger, SentryProfilerMode) { SentryProfilerModeTrace, @@ -16,8 +15,8 @@ typedef NS_ENUM(NSUInteger, SentryProfilerTruncationReason) { SentryProfilerTruncationReasonAppMovedToBackground, }; -static NSTimeInterval kSentryProfilerChunkExpirationInterval = 10; -static NSTimeInterval kSentryProfilerTimeoutInterval = 30; +SENTRY_EXTERN NSTimeInterval kSentryProfilerChunkExpirationInterval; +SENTRY_EXTERN NSTimeInterval kSentryProfilerTimeoutInterval; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryProfilerSerialization.h b/Pods/Sentry/Sources/Sentry/include/SentryProfilerSerialization.h index b3efeb002..7799f8340 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryProfilerSerialization.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryProfilerSerialization.h @@ -3,7 +3,6 @@ #if SENTRY_TARGET_PROFILING_SUPPORTED # import "SentryDefines.h" -# import @class SentryEnvelope; @class SentryEnvelopeItem; @@ -11,10 +10,12 @@ @class SentryId; @class SentryScreenFrames; @class SentryTransaction; +@class SentryProfiler; NS_ASSUME_NONNULL_BEGIN -SENTRY_EXTERN SentryEnvelopeItem *_Nullable sentry_traceProfileEnvelopeItem( +SENTRY_EXTERN SentryEnvelopeItem *_Nullable sentry_traceProfileEnvelopeItem(SentryHub *hub, + SentryProfiler *profiler, NSDictionary *profilingData, SentryTransaction *transaction, NSDate *startTimestamp); SentryEnvelope *_Nullable sentry_continuousProfileChunkEnvelope( diff --git a/Pods/Sentry/Sources/Sentry/include/SentryProfilerState+ObjCpp.h b/Pods/Sentry/Sources/Sentry/include/SentryProfilerState+ObjCpp.h index 6fadeaee1..b749c9910 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryProfilerState+ObjCpp.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryProfilerState+ObjCpp.h @@ -10,8 +10,7 @@ * a bridging header via SentryProfilerState.h due to C++/Swift interop limitations. */ -@interface -SentryProfilerState () +@interface SentryProfilerState () - (void)appendBacktrace:(const sentry::profiling::Backtrace &)backtrace; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryProfilerTestHelpers.h b/Pods/Sentry/Sources/Sentry/include/SentryProfilerTestHelpers.h index bd781130f..b2c2d0ab5 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryProfilerTestHelpers.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryProfilerTestHelpers.h @@ -17,15 +17,15 @@ NS_ASSUME_NONNULL_BEGIN */ SENTRY_EXTERN BOOL sentry_threadSanitizerIsPresent(void); -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) /** - * Write a file to application support containing the profile data. This is an affordance for UI + * Write a file to the disk cache containing the profile data. This is an affordance for UI * tests to be able to validate the contents of a profile. */ -SENTRY_EXTERN void sentry_writeProfileFile(NSData *JSONData); +SENTRY_EXTERN void sentry_writeProfileFile(NSData *JSONData, BOOL continuous); -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryQueueableRequestManager.h b/Pods/Sentry/Sources/Sentry/include/SentryQueueableRequestManager.h index 0363391e6..6bcf06648 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryQueueableRequestManager.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryQueueableRequestManager.h @@ -1,5 +1,3 @@ -#import - #import "SentryDefines.h" #import "SentryRequestManager.h" diff --git a/Pods/Sentry/Sources/Sentry/include/SentryRateLimitParser.h b/Pods/Sentry/Sources/Sentry/include/SentryRateLimitParser.h index ca6befa21..214ff155c 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryRateLimitParser.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryRateLimitParser.h @@ -1,6 +1,6 @@ #import "SentryDefines.h" -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; NS_ASSUME_NONNULL_BEGIN @@ -16,7 +16,7 @@ NS_SWIFT_NAME(RateLimitParser) @interface SentryRateLimitParser : NSObject SENTRY_NO_INIT -- (instancetype)initWithCurrentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; +- (instancetype)initWithCurrentDateProvider:(id)currentDateProvider; - (NSDictionary *)parse:(NSString *)header; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryRateLimits.h b/Pods/Sentry/Sources/Sentry/include/SentryRateLimits.h index bf3952875..d2d3e6130 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryRateLimits.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryRateLimits.h @@ -1,5 +1,4 @@ #import "SentryDataCategory.h" -#import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryReachability.h b/Pods/Sentry/Sources/Sentry/include/SentryReachability.h index 585d511d7..d80b84c6a 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryReachability.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryReachability.h @@ -25,7 +25,6 @@ // #import "SentryDefines.h" -#import #if SENTRY_HAS_REACHABILITY # import @@ -34,13 +33,13 @@ NS_ASSUME_NONNULL_BEGIN void SentryConnectivityCallback(SCNetworkReachabilityFlags flags); -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) /** * Needed for testing. */ void SentrySetReachabilityIgnoreActualCallback(BOOL value); -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) NSString *SentryConnectivityFlagRepresentation(SCNetworkReachabilityFlags flags); @@ -68,7 +67,7 @@ SENTRY_EXTERN NSString *const SentryConnectivityNone; */ @interface SentryReachability : NSObject -# if defined(TEST) || defined(TESTCI) || defined(DEBUG) +# if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) /** * Only needed for testing. Use this flag to skip registering and unregistering the actual callbacks @@ -76,7 +75,7 @@ SENTRY_EXTERN NSString *const SentryConnectivityNone; */ @property (nonatomic, assign) BOOL skipRegisteringActualCallbacks; -# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +# endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) /** * Add an observer which is called each time network connectivity changes. diff --git a/Pods/Sentry/Sources/Sentry/include/SentryRequestOperation.h b/Pods/Sentry/Sources/Sentry/include/SentryRequestOperation.h index 33920c664..461072c65 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryRequestOperation.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryRequestOperation.h @@ -1,5 +1,3 @@ -#import - #import "SentryAsynchronousOperation.h" #import "SentryQueueableRequestManager.h" diff --git a/Pods/Sentry/Sources/Sentry/include/SentryRetryAfterHeaderParser.h b/Pods/Sentry/Sources/Sentry/include/SentryRetryAfterHeaderParser.h index 9d21aa4f5..ca04fc12f 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryRetryAfterHeaderParser.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryRetryAfterHeaderParser.h @@ -1,7 +1,7 @@ #import @class SentryHttpDateParser; -@class SentryCurrentDateProvider; +@protocol SentryCurrentDateProvider; NS_ASSUME_NONNULL_BEGIN @@ -13,7 +13,7 @@ NS_SWIFT_NAME(RetryAfterHeaderParser) @interface SentryRetryAfterHeaderParser : NSObject - (instancetype)initWithHttpDateParser:(SentryHttpDateParser *)httpDateParser - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; + currentDateProvider:(id)currentDateProvider; /** Parses the HTTP header into a NSDate. diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySDK+Private.h b/Pods/Sentry/Sources/Sentry/include/SentrySDK+Private.h index 9e502178c..bcf94f5f1 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySDK+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySDK+Private.h @@ -10,16 +10,23 @@ # import "SentrySDK.h" #endif -@class SentryHub, SentryId, SentryAppStartMeasurement, SentryEnvelope; +@class SentryAppStartMeasurement; +@class SentryEnvelope; +@class SentryFeedback; +@class SentryHub; +@class SentryId; NS_ASSUME_NONNULL_BEGIN -@interface -SentrySDK () +@interface SentrySDK () -+ (void)captureCrashEvent:(SentryEvent *)event; ++ (void)captureFatalEvent:(SentryEvent *)event; -+ (void)captureCrashEvent:(SentryEvent *)event withScope:(SentryScope *)scope; ++ (void)captureFatalEvent:(SentryEvent *)event withScope:(SentryScope *)scope; + +#if SENTRY_HAS_UIKIT ++ (void)captureFatalAppHangEvent:(SentryEvent *)event; +#endif // SENTRY_HAS_UIKIT /** * SDK private field to store the state if onCrashedLastRun was called. diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySampleDecision+Private.h b/Pods/Sentry/Sources/Sentry/include/SentrySampleDecision+Private.h index fe904ff95..d76afab02 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySampleDecision+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySampleDecision+Private.h @@ -1,5 +1,3 @@ -#import - #import "SentrySampleDecision.h" /** diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySamplerDecision.h b/Pods/Sentry/Sources/Sentry/include/SentrySamplerDecision.h index 8b1156535..aa48f7d46 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySamplerDecision.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySamplerDecision.h @@ -1,5 +1,4 @@ #import "SentrySampleDecision.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -7,10 +6,13 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) SentrySampleDecision decision; +@property (nonatomic, nullable, strong, readonly) NSNumber *sampleRand; + @property (nullable, nonatomic, strong, readonly) NSNumber *sampleRate; - (instancetype)initWithDecision:(SentrySampleDecision)decision - forSampleRate:(nullable NSNumber *)sampleRate; + forSampleRate:(nullable NSNumber *)sampleRate + withSampleRand:(nullable NSNumber *)sampleRand; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySampling.h b/Pods/Sentry/Sources/Sentry/include/SentrySampling.h index 052b0b693..469d2a339 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySampling.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySampling.h @@ -1,6 +1,5 @@ #import "SentryDefines.h" #import "SentryProfilingConditionals.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -22,6 +21,8 @@ SENTRY_EXTERN SentrySamplerDecision *sentry_sampleTrace( */ SENTRY_EXTERN SentrySamplerDecision *sentry_sampleTraceProfile(SentrySamplingContext *context, SentrySamplerDecision *tracesSamplerDecision, SentryOptions *options); + +SENTRY_EXTERN SentrySamplerDecision *sentry_sampleProfileSession(float sessionSampleRate); #endif // SENTRY_TARGET_PROFILING_SUPPORTED NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySamplingProfiler.hpp b/Pods/Sentry/Sources/Sentry/include/SentrySamplingProfiler.hpp index 4d56ded6b..62a1f2f25 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySamplingProfiler.hpp +++ b/Pods/Sentry/Sources/Sentry/include/SentrySamplingProfiler.hpp @@ -21,7 +21,7 @@ namespace profiling { * Samples the stacks on all threads at a specified interval, using the mach clock * alarm API for scheduling. */ - class SamplingProfiler : public std::enable_shared_from_this { + class SamplingProfiler { public: /** * Creates a new sampling profiler that samples at the specified rate. @@ -56,7 +56,7 @@ namespace profiling { private: mach_timespec_t delaySpec_; std::function callback_; - std::shared_ptr cache_; + std::unique_ptr cache_; bool isInitialized_; std::mutex isSamplingLock_; bool isSampling_; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryScope+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryScope+Private.h index c6efd95df..6eb99cbb7 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryScope+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryScope+Private.h @@ -9,8 +9,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryScope () +@interface SentryScope () @property (atomic, copy, nullable) NSString *environmentString; @@ -21,7 +20,10 @@ SentryScope () */ @property (atomic, strong) SentryUser *_Nullable userObject; -@property (atomic, strong) SentryPropagationContext *propagationContext; +/** + * The propagation context has a setter, requiring it to be nonatomic + */ +@property (nonatomic, strong) SentryPropagationContext *propagationContext; @property (nonatomic, nullable, copy) NSString *currentScreen; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryScopeObserver.h b/Pods/Sentry/Sources/Sentry/include/SentryScopeObserver.h index f63c4c078..98894f86f 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryScopeObserver.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryScopeObserver.h @@ -17,6 +17,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)setContext:(nullable NSDictionary *)context; +- (void)setTraceContext:(nullable NSDictionary *)traceContext; + - (void)setDist:(nullable NSString *)dist; - (void)setEnvironment:(nullable NSString *)environment; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryScopeSyncC.h b/Pods/Sentry/Sources/Sentry/include/SentryScopeSyncC.h index 98437f555..9ee63ba9b 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryScopeSyncC.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryScopeSyncC.h @@ -5,6 +5,7 @@ typedef struct { char *user; char *dist; char *context; + char *traceContext; char *environment; char *tags; char *extras; @@ -13,6 +14,7 @@ typedef struct { char **breadcrumbs; // dynamic array of char arrays long maxCrumbs; long currentCrumb; + } SentryCrashScope; SentryCrashScope *sentrycrash_scopesync_getScope(void); @@ -29,6 +31,8 @@ void sentrycrash_scopesync_setDist(const char *const jsonEncodedCString); void sentrycrash_scopesync_setContext(const char *const jsonEncodedCString); +void sentrycrash_scopesync_setTraceContext(const char *const jsonEncodedCString); + void sentrycrash_scopesync_setEnvironment(const char *const jsonEncodedCString); void sentrycrash_scopesync_setTags(const char *const jsonEncodedCString); diff --git a/Pods/Sentry/Sources/Sentry/include/SentryScreenshot.h b/Pods/Sentry/Sources/Sentry/include/SentryScreenshot.h index 90c24b827..c7116fd49 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryScreenshot.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryScreenshot.h @@ -1,6 +1,8 @@ #import "SentryDefines.h" -#if SENTRY_HAS_UIKIT +#if SENTRY_TARGET_REPLAY_SUPPORTED + +# import NS_ASSUME_NONNULL_BEGIN @@ -10,7 +12,13 @@ NS_ASSUME_NONNULL_BEGIN * Get a screenshot of every open window in the app. * @return An array of @c NSData instances containing PNG images. */ -- (NSArray *)appScreenshotsFromMainThread; +- (NSArray *)appScreenshotDatasFromMainThread; + +/** + * Get a screenshot of every open window in the app. + * @return An array of @c UIImage instances. + */ +- (NSArray *)appScreenshotsFromMainThread; /** * Save the current app screen shots in the given directory. @@ -20,9 +28,10 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)saveScreenShots:(NSString *)imagesDirectoryPath; -- (NSArray *)appScreenshots; +- (NSArray *)appScreenshots; +- (NSArray *)appScreenshotsData; @end NS_ASSUME_NONNULL_END -#endif // SENTRY_HAS_UIKIT +#endif // SENTRY_TARGET_REPLAY_SUPPORTED diff --git a/Pods/Sentry/Sources/Sentry/include/SentryScreenshotIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryScreenshotIntegration.h index 161966ea0..50b007da6 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryScreenshotIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryScreenshotIntegration.h @@ -1,17 +1,14 @@ #import "SentryDefines.h" -#if SENTRY_HAS_UIKIT +#if SENTRY_TARGET_REPLAY_SUPPORTED # import "SentryBaseIntegration.h" # import "SentryClient+Private.h" # import "SentryScreenshot.h" -# import "SentrySwift.h" -# import NS_ASSUME_NONNULL_BEGIN -@interface SentryScreenshotIntegration - : SentryBaseIntegration +@interface SentryScreenshotIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySdkInfo.h b/Pods/Sentry/Sources/Sentry/include/SentrySdkInfo.h index 4e51e77b1..6ad1d8801 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySdkInfo.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySdkInfo.h @@ -1,7 +1,19 @@ -#import "SentryDefines.h" -#import "SentryInternalSerializable.h" +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif + +#if __has_include() +# import +#else +# import "SentryInternalSerializable.h" +#endif + #import +@class SentryOptions; + NS_ASSUME_NONNULL_BEGIN /** @@ -12,6 +24,8 @@ NS_ASSUME_NONNULL_BEGIN @interface SentrySdkInfo : NSObject SENTRY_NO_INIT ++ (instancetype)global; + /** * The name of the SDK. Examples: sentry.cocoa, sentry.cocoa.vapor, ... */ @@ -24,13 +38,40 @@ SENTRY_NO_INIT */ @property (nonatomic, readonly, copy) NSString *version; +/** + * A list of names identifying enabled integrations. The list should + * have all enabled integrations, including default integrations. Default + * integrations are included because different SDK releases may contain different + * default integrations. + */ +@property (nonatomic, readonly, copy) NSArray *integrations; + +/** + * A list of feature names identifying enabled SDK features. This list + * should contain all enabled SDK features. On some SDKs, enabling a feature in the + * options also adds an integration. We encourage tracking such features with either + * integrations or features but not both to reduce the payload size. + */ +@property (nonatomic, readonly, copy) NSArray *features; + +/** + * A list of packages that were installed as part of this SDK or the + * activated integrations. Each package consists of a name in the format + * source:identifier and version. + */ +@property (nonatomic, readonly, copy) NSArray *> *packages; + +- (instancetype)initWithOptions:(SentryOptions *_Nullable)options; + - (instancetype)initWithName:(NSString *)name - andVersion:(NSString *)version NS_DESIGNATED_INITIALIZER; + version:(NSString *)version + integrations:(NSArray *)integrations + features:(NSArray *)features + packages:(NSArray *> *)packages + NS_DESIGNATED_INITIALIZER; - (instancetype)initWithDict:(NSDictionary *)dict; -- (instancetype)initWithDict:(NSDictionary *)dict orDefaults:(SentrySdkInfo *)info; - @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySdkPackage.h b/Pods/Sentry/Sources/Sentry/include/SentrySdkPackage.h new file mode 100644 index 000000000..a49e3ce59 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentrySdkPackage.h @@ -0,0 +1,21 @@ +#if __has_include() +# import +#else +# import "SentryDefines.h" +#endif + +NS_ASSUME_NONNULL_BEGIN + +@interface SentrySdkPackage : NSObject +SENTRY_NO_INIT + ++ (nullable NSDictionary *)global; + +#if SENTRY_TEST || SENTRY_TEST_CI ++ (void)setPackageManager:(NSUInteger)manager; ++ (void)resetPackageManager; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySerialization.h b/Pods/Sentry/Sources/Sentry/include/SentrySerialization.h index ba9b67535..fb672821d 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySerialization.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySerialization.h @@ -1,6 +1,9 @@ #import "SentryDefines.h" -@class SentrySession, SentryEnvelope, SentryAppState, SentryReplayRecording; +@class SentryAppState; +@class SentryEnvelope; +@class SentryReplayRecording; +@class SentrySession; NS_ASSUME_NONNULL_BEGIN @@ -23,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN /** * Retrieves the json object from an event envelope item data. */ -+ (NSDictionary *)deserializeDictionaryFromJsonData:(NSData *)data; ++ (NSDictionary *_Nullable)deserializeDictionaryFromJsonData:(NSData *)data; /** * Extract the level from data of an envelopte item containing an event. Default is the 'error' diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySession+Private.h b/Pods/Sentry/Sources/Sentry/include/SentrySession+Private.h index 1075b3026..988d378b9 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySession+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySession+Private.h @@ -1,12 +1,10 @@ #import "SentrySession.h" -#import NS_ASSUME_NONNULL_BEGIN NSString *nameForSentrySessionStatus(SentrySessionStatus status); -@interface -SentrySession () +@interface SentrySession () @property (nonatomic) NSUInteger errors; diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySession.h b/Pods/Sentry/Sources/Sentry/include/SentrySession.h index f852f4a0d..20996ed32 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySession.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySession.h @@ -49,6 +49,11 @@ SENTRY_NO_INIT @property (nonatomic, copy) NSString *_Nullable environment; @property (nonatomic, copy) SentryUser *_Nullable user; +/** + * The reason for session to become abnormal, for example an app hang. + */ +@property (nonatomic, copy) NSString *_Nullable abnormalMechanism; + - (NSDictionary *)serialize; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySessionCrashedHandler.h b/Pods/Sentry/Sources/Sentry/include/SentrySessionCrashedHandler.h deleted file mode 100644 index d4cf1c34d..000000000 --- a/Pods/Sentry/Sources/Sentry/include/SentrySessionCrashedHandler.h +++ /dev/null @@ -1,25 +0,0 @@ -#import "SentryDefines.h" -#import - -@class SentryCrashWrapper, SentryDispatchQueueWrapper; -#if SENTRY_HAS_UIKIT -@class SentryWatchdogTerminationLogic; -#endif // SENTRY_HAS_UIKIT - -@interface SentrySessionCrashedHandler : NSObject - -#if SENTRY_HAS_UIKIT -- (instancetype)initWithCrashWrapper:(SentryCrashWrapper *)crashWrapper - watchdogTerminationLogic:(SentryWatchdogTerminationLogic *)watchdogTerminationLogic; -#else -- (instancetype)initWithCrashWrapper:(SentryCrashWrapper *)crashWrapper; -#endif // SENTRY_HAS_UIKIT - -/** - * When a crash happened the current session is ended as crashed, stored at a different - * location and the current session is deleted. Checkout SentryHub where most of the session logic - * is implemented for more details about sessions. - */ -- (void)endCurrentSessionAsCrashedWhenCrashOrOOM; - -@end diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySessionReplayIntegration+Private.h b/Pods/Sentry/Sources/Sentry/include/SentrySessionReplayIntegration+Private.h index f4293d661..a725583e8 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySessionReplayIntegration+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySessionReplayIntegration+Private.h @@ -1,17 +1,19 @@ #import "SentryBaseIntegration.h" #import "SentrySessionReplayIntegration.h" -#import "SentrySwift.h" #if SENTRY_TARGET_REPLAY_SUPPORTED @class SentrySessionReplay; +@class SentryViewPhotographer; -@interface -SentrySessionReplayIntegration () +@interface SentrySessionReplayIntegration () @property (nonatomic, strong) SentrySessionReplay *sessionReplay; +@property (nonatomic, strong) SentryViewPhotographer *viewPhotographer; + +- (void)setReplayTags:(NSDictionary *)tags; + @end #endif diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySessionTracker.h b/Pods/Sentry/Sources/Sentry/include/SentrySessionTracker.h index 1367abca2..759c9520d 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySessionTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySessionTracker.h @@ -1,7 +1,9 @@ #import "SentryDefines.h" -#import -@class SentryEvent, SentryOptions, SentryCurrentDateProvider, SentryNSNotificationCenterWrapper; +@class SentryCurrentDateProvider; +@class SentryEvent; +@class SentryNSNotificationCenterWrapper; +@class SentryOptions; /** * Tracks sessions for release health. For more info see: diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySpan+Private.h b/Pods/Sentry/Sources/Sentry/include/SentrySpan+Private.h index 453c18447..bb8c897d8 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySpan+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySpan+Private.h @@ -2,8 +2,7 @@ #import "SentryProfilingConditionals.h" -@interface -SentrySpan () +@interface SentrySpan () #if SENTRY_TARGET_PROFILING_SUPPORTED @property (copy, nonatomic) NSString *_Nullable profileSessionID; diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySpan.h b/Pods/Sentry/Sources/Sentry/include/SentrySpan.h index 2653239d3..7fd111eed 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySpan.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySpan.h @@ -4,8 +4,11 @@ NS_ASSUME_NONNULL_BEGIN -@class SentryTracer, SentryId, SentrySpanId, SentryFrame, SentrySpanContext; -@class LocalMetricsAggregator; +@class SentryFrame; +@class SentryId; +@class SentrySpanContext; +@class SentrySpanId; +@class SentryTracer; #if SENTRY_HAS_UIKIT @class SentryFramesTracker; @@ -85,8 +88,6 @@ SENTRY_NO_INIT */ @property (nullable, nonatomic, strong) NSArray *frames; -- (LocalMetricsAggregator *)getLocalMetricsAggregator; - /** * Init a @c SentrySpan with given transaction and context. * @param transaction The @c SentryTracer managing the transaction this span is associated with. diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySpanContext+Private.h b/Pods/Sentry/Sources/Sentry/include/SentrySpanContext+Private.h index 4f6327bea..57f9772b7 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySpanContext+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySpanContext+Private.h @@ -2,8 +2,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentrySpanContext () +@interface SentrySpanContext () - (instancetype)initWithOperation:(NSString *)operation origin:(NSString *)origin diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySpanDataKey.h b/Pods/Sentry/Sources/Sentry/include/SentrySpanDataKey.h new file mode 100644 index 000000000..27e73ed63 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentrySpanDataKey.h @@ -0,0 +1,28 @@ +#import "SentryDefines.h" +#import + +// Constants for span data field keys. +// +// These keys are used to attach additional data to spans in a standardized way. +// +// The keys follow [OpenTelemetry's semantic +// conventions](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/trace.md) +// for attributes and must be: +// - Lowercase +// - Use underscores for word separation +// - Follow the format `.` (e.g. `file.size`) +// +// - Note: See [Sentry SDK development +// documentation](https://develop.sentry.dev/sdk/telemetry/traces/span-data-conventions/) for more +// information. +// - Remark: These constants were originally implemented as a Swift-like enum with associated String +// values, but due to potential Swift-to-Objective-C interoperability issues (see +// [GH-4887](https://github.com/getsentry/sentry-cocoa/issues/4887)), they were moved from Swift to +// Objective-C. +// +// - Note: The following constants are defined as `extern` with an `.m` implementation file, as we +// did face compliation errors in tests and sample apps not being able to import the constants, i.e. +// `Undefined symbol: _SentrySpanOperationUiLoad`. We might want to revisit this in the future. + +SENTRY_EXTERN NSString *const SentrySpanDataKeyFileSize; +SENTRY_EXTERN NSString *const SentrySpanDataKeyFilePath; diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySpanOperation.h b/Pods/Sentry/Sources/Sentry/include/SentrySpanOperation.h new file mode 100644 index 000000000..969ac7522 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentrySpanOperation.h @@ -0,0 +1,42 @@ +#import "SentryDefines.h" +#import + +// Span operations are short string identifiers that categorize the type of operation a span is +// measuring. +// +// They follow a hierarchical dot notation format (e.g., `ui.load.initial_display`) to group related +// operations. These identifiers help organize and analyze performance data across different types +// of operations. +// +// - Note: See [Sentry SDK development +// documentation](https://develop.sentry.dev/sdk/telemetry/traces/span-operations/) for more +// information. +// - Remark: These constants were originally implemented as a Swift-like enum with associated String +// values, but due to potential Swift-to-Objective-C interoperability issues (see +// [GH-4887](https://github.com/getsentry/sentry-cocoa/issues/4887)), they were moved from Swift to +// Objective-C. +// +// - Note: The following constants are defined as `extern` with an `.m` implementation file, as we +// did face compliation errors in tests and sample apps not being able to import the constants, i.e. +// `Undefined symbol: _SentrySpanOperationUiLoad`. We might want to revisit this in the future. + +SENTRY_EXTERN NSString *const SentrySpanOperationAppLifecycle; + +SENTRY_EXTERN NSString *const SentrySpanOperationCoredataFetchOperation; +SENTRY_EXTERN NSString *const SentrySpanOperationCoredataSaveOperation; + +SENTRY_EXTERN NSString *const SentrySpanOperationFileRead; +SENTRY_EXTERN NSString *const SentrySpanOperationFileWrite; +SENTRY_EXTERN NSString *const SentrySpanOperationFileCopy; +SENTRY_EXTERN NSString *const SentrySpanOperationFileRename; +SENTRY_EXTERN NSString *const SentrySpanOperationFileDelete; + +SENTRY_EXTERN NSString *const SentrySpanOperationNetworkRequestOperation; + +SENTRY_EXTERN NSString *const SentrySpanOperationUiAction; +SENTRY_EXTERN NSString *const SentrySpanOperationUiActionClick; + +SENTRY_EXTERN NSString *const SentrySpanOperationUiLoad; + +SENTRY_EXTERN NSString *const SentrySpanOperationUiLoadInitialDisplay; +SENTRY_EXTERN NSString *const SentrySpanOperationUiLoadFullDisplay; diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySpanOperations.h b/Pods/Sentry/Sources/Sentry/include/SentrySpanOperations.h deleted file mode 100644 index 57eb606c9..000000000 --- a/Pods/Sentry/Sources/Sentry/include/SentrySpanOperations.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -static NSString *const SentrySpanOperationUILoad = @"ui.load"; -static NSString *const SentrySpanOperationUILoadInitialDisplay = @"ui.load.initial_display"; -static NSString *const SentrySpanOperationUILoadFullDisplay = @"ui.load.full_display"; -static NSString *const SentrySpanOperationUIAction = @"ui.action"; -static NSString *const SentrySpanOperationUIActionClick = @"ui.action.click"; diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySpotlightTransport.h b/Pods/Sentry/Sources/Sentry/include/SentrySpotlightTransport.h index 37e5e2723..4cc93b345 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySpotlightTransport.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySpotlightTransport.h @@ -2,7 +2,9 @@ #import "SentryRequestManager.h" #import "SentryTransport.h" -@class SentryOptions, SentryDispatchQueueWrapper, SentryNSURLRequestBuilder; +@class SentryDispatchQueueWrapper; +@class SentryNSURLRequestBuilder; +@class SentryOptions; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryStacktraceBuilder.h b/Pods/Sentry/Sources/Sentry/include/SentryStacktraceBuilder.h index 99f2670e7..3121111f2 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryStacktraceBuilder.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryStacktraceBuilder.h @@ -4,7 +4,9 @@ #import "SentryDefines.h" #import -@class SentryStacktrace, SentryFrameRemover, SentryCrashStackEntryMapper; +@class SentryCrashStackEntryMapper; +@class SentryFrameRemover; +@class SentryStacktrace; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryStatsdClient.h b/Pods/Sentry/Sources/Sentry/include/SentryStatsdClient.h deleted file mode 100644 index 1d332e092..000000000 --- a/Pods/Sentry/Sources/Sentry/include/SentryStatsdClient.h +++ /dev/null @@ -1,16 +0,0 @@ -#import "SentryDefines.h" - -NS_ASSUME_NONNULL_BEGIN - -@class SentryClient; - -@interface SentryStatsdClient : NSObject -SENTRY_NO_INIT - -- (instancetype)initWithClient:(SentryClient *)client; - -- (void)captureStatsdEncodedData:(NSData *)statsdEncodedData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySubClassFinder.h b/Pods/Sentry/Sources/Sentry/include/SentrySubClassFinder.h index 842d1478f..8da9aa7ef 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySubClassFinder.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySubClassFinder.h @@ -1,10 +1,10 @@ #import "SentryDefines.h" #import "SentryObjCRuntimeWrapper.h" -#import NS_ASSUME_NONNULL_BEGIN -@class SentryDispatchQueueWrapper, SentryDefaultObjCRuntimeWrapper; +@class SentryDefaultObjCRuntimeWrapper; +@class SentryDispatchQueueWrapper; @interface SentrySubClassFinder : NSObject SENTRY_NO_INIT diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySwift.h b/Pods/Sentry/Sources/Sentry/include/SentrySwift.h index fbada5798..4c60786b3 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySwift.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySwift.h @@ -14,10 +14,27 @@ # import # endif #else // !__has_include() + +// needed for the check for SENTRY_HAS_UIKIT below +# if __has_include() +# import +# else +# import "SentryDefines.h" +# endif // __has_include() + +# if SENTRY_HAS_UIKIT +// this is needed to fix a build issue when building iOS-ObjectiveC where the definitions of some +// UIKIt enums used from SentryUserFeedbackWidgetConfiguration.swift aren't visible from the +// generated ObjC interface for that class in Sentry-Swift.h +# import +# endif // SENTRY_HAS_UIKIT + # if __has_include("Sentry-Swift.h") # import "Sentry-Swift.h" -# else +# elif __has_include() # import +# else +@import SentrySwift; # endif #endif // __has_include() diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySwiftAsyncIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentrySwiftAsyncIntegration.h index 546716f02..209c1050f 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySwiftAsyncIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySwiftAsyncIntegration.h @@ -1,10 +1,8 @@ #import "SentryBaseIntegration.h" -#import "SentrySwift.h" -#import NS_ASSUME_NONNULL_BEGIN -@interface SentrySwiftAsyncIntegration : SentryBaseIntegration +@interface SentrySwiftAsyncIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySystemEventBreadcrumbs.h b/Pods/Sentry/Sources/Sentry/include/SentrySystemEventBreadcrumbs.h index 7a286eb52..fc33880d7 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySystemEventBreadcrumbs.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySystemEventBreadcrumbs.h @@ -1,5 +1,4 @@ #import "SentryFileManager.h" -#import #if TARGET_OS_IOS && SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/include/SentrySystemWrapper.h b/Pods/Sentry/Sources/Sentry/include/SentrySystemWrapper.h index c4098444f..eccf490c1 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentrySystemWrapper.h +++ b/Pods/Sentry/Sources/Sentry/include/SentrySystemWrapper.h @@ -1,5 +1,4 @@ #import "SentryDefines.h" -#import NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryThreadInspector.h b/Pods/Sentry/Sources/Sentry/include/SentryThreadInspector.h index 6611b39c3..108398eac 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryThreadInspector.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryThreadInspector.h @@ -2,7 +2,10 @@ #import "SentryDefines.h" #import -@class SentryThread, SentryStacktraceBuilder, SentryStacktrace, SentryOptions; +@class SentryOptions; +@class SentryStacktrace; +@class SentryStacktraceBuilder; +@class SentryThread; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryThreadMetadataCache.hpp b/Pods/Sentry/Sources/Sentry/include/SentryThreadMetadataCache.hpp index 5518a5c94..4a801c2ab 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryThreadMetadataCache.hpp +++ b/Pods/Sentry/Sources/Sentry/include/SentryThreadMetadataCache.hpp @@ -44,7 +44,7 @@ namespace profiling { ThreadHandle::NativeHandle handle; ThreadMetadata metadata; }; - std::vector threadMetadataCache_; + std::vector threadMetadataCache_; }; } // namespace profiling diff --git a/Pods/Sentry/Sources/Sentry/include/SentryThreadState.hpp b/Pods/Sentry/Sources/Sentry/include/SentryThreadState.hpp index f6f8f9963..19023411c 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryThreadState.hpp +++ b/Pods/Sentry/Sources/Sentry/include/SentryThreadState.hpp @@ -69,7 +69,7 @@ namespace profiling { # elif CPU(ARM64) // fp is an alias for frame pointer register x29: // https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html - return context->__ss.__fp; + return arm_thread_state64_get_fp(context->__ss); # elif CPU(ARM) // https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html#//apple_ref/doc/uid/TP40009021-SW1 return context->__ss.__r[7]; @@ -104,7 +104,7 @@ namespace profiling { getLinkRegister(const MachineContext *context) noexcept { // https://stackoverflow.com/a/8236974 - return context->__ss.__lr; + return arm_thread_state64_get_lr(context->__ss); # else ALWAYS_INLINE std::uintptr_t getLinkRegister(__unused const MachineContext *context) noexcept @@ -123,7 +123,7 @@ namespace profiling { getProgramCounter(const MachineContext *context) noexcept { # if CPU(ARM64) || CPU(ARM) - return context->__ss.__pc; + return arm_thread_state64_get_pc(context->__ss); # elif CPU(X86_64) return context->__ss.__rip; # elif CPU(X86) diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTime.h b/Pods/Sentry/Sources/Sentry/include/SentryTime.h index 50ab2098e..13b55bcbf 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTime.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTime.h @@ -14,12 +14,6 @@ uint64_t timeIntervalToNanoseconds(double seconds); /** Converts integer nanoseconds to a @c NSTimeInterval. */ double nanosecondsToTimeInterval(uint64_t nanoseconds); -/** - * Returns the absolute timestamp, which has no defined reference point or unit - * as it is platform dependent. - */ -uint64_t getAbsoluteTime(void); - /** * Check whether two timestamps provided as 64 bit unsigned integers are in normal * chronological order, as a convenience runtime check before using @c getDurationNs. diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTimeToDisplayTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryTimeToDisplayTracker.h index f8406a520..7d14a08e4 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTimeToDisplayTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTimeToDisplayTracker.h @@ -25,9 +25,9 @@ SENTRY_NO_INIT @property (nonatomic, readonly) BOOL waitForFullDisplay; -- (instancetype)initForController:(UIViewController *)controller - waitForFullDisplay:(BOOL)waitForFullDisplay - dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper; +- (instancetype)initWithName:(NSString *)name + waitForFullDisplay:(BOOL)waitForFullDisplay + dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper; - (BOOL)startForTracer:(SentryTracer *)tracer; @@ -35,6 +35,8 @@ SENTRY_NO_INIT - (void)reportFullyDisplayed; +- (void)finishSpansIfNotFinished; + @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTraceOrigin.h b/Pods/Sentry/Sources/Sentry/include/SentryTraceOrigin.h new file mode 100644 index 000000000..78bc25512 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryTraceOrigin.h @@ -0,0 +1,35 @@ +#import "SentryDefines.h" +#import + +// Trace origin indicates what created a trace or a span. +// +// The origin is of type string and consists of four parts: +// `...`. +// +// Only the first is mandatory. The parts build upon each other, meaning it is forbidden to skip one +// part. For example, you may send parts one and two but aren't allowed to send parts one and three +// without part two. +// +// - Note: See [Sentry SDK development +// documentation](https://develop.sentry.dev/sdk/telemetry/traces/trace-origin/) for more +// information. +// - Remark: Since Objective-C does not have enums with associated string values like Swift, this is +// implemented as an `NSString` constant list. +// +// - Note: The following constants are defined as `extern` with an `.m` implementation file, as we +// did face compliation errors in tests and sample apps not being able to import the constants, i.e. +// `Undefined symbol: _SentrySpanOperationUiLoad`. We might want to revisit this in the future. + +SENTRY_EXTERN NSString *const SentryTraceOriginAutoAppStart; +SENTRY_EXTERN NSString *const SentryTraceOriginAutoAppStartProfile; + +SENTRY_EXTERN NSString *const SentryTraceOriginAutoDBCoreData; +SENTRY_EXTERN NSString *const SentryTraceOriginAutoHttpNSURLSession; +SENTRY_EXTERN NSString *const SentryTraceOriginAutoNSData; +SENTRY_EXTERN NSString *const SentryTraceOriginAutoUiEventTracker; +SENTRY_EXTERN NSString *const SentryTraceOriginAutoUITimeToDisplay; +SENTRY_EXTERN NSString *const SentryTraceOriginAutoUIViewController; + +SENTRY_EXTERN NSString *const SentryTraceOriginManual; +SENTRY_EXTERN NSString *const SentryTraceOriginManualFileData; +SENTRY_EXTERN NSString *const SentryTraceOriginManualUITimeToDisplay; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTraceOrigins.h b/Pods/Sentry/Sources/Sentry/include/SentryTraceOrigins.h deleted file mode 100644 index 7922cdb9a..000000000 --- a/Pods/Sentry/Sources/Sentry/include/SentryTraceOrigins.h +++ /dev/null @@ -1,14 +0,0 @@ -#import - -static NSString *const SentryTraceOriginManual = @"manual"; -static NSString *const SentryTraceOriginUIEventTracker = @"auto.ui.event_tracker"; - -static NSString *const SentryTraceOriginAutoAppStart = @"auto.app.start"; -static NSString *const SentryTraceOriginAutoAppStartProfile = @"auto.app.start.profile"; -static NSString *const SentryTraceOriginAutoNSData = @"auto.file.ns_data"; -static NSString *const SentryTraceOriginAutoDBCoreData = @"auto.db.core_data"; -static NSString *const SentryTraceOriginAutoHttpNSURLSession = @"auto.http.ns_url_session"; -static NSString *const SentryTraceOriginAutoUIViewController = @"auto.ui.view_controller"; - -static NSString *const SentryTraceOriginAutoUITimeToDisplay = @"auto.ui.time_to_display"; -static NSString *const SentryTraceOriginManualUITimeToDisplay = @"manual.ui.time_to_display"; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTracer+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryTracer+Private.h index a4a4190c8..282954da5 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTracer+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTracer+Private.h @@ -1,7 +1,6 @@ #import "SentryTracer.h" -@interface -SentryTracer () +@interface SentryTracer () @property (nonatomic, strong) SentryHub *hub; @@ -10,6 +9,6 @@ SentryTracer () * we can use the same ID as a key in the concurrent bookkeeping. @c SentryTracer.traceId can be * changed by consumers so is unfit for this purpose. */ -@property (nonatomic, strong, readonly) SentryId *internalID; +@property (nonatomic, strong, readonly) SentryId *profilerReferenceID; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTracer.h b/Pods/Sentry/Sources/Sentry/include/SentryTracer.h index b3c841b3b..74e2f3750 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTracer.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTracer.h @@ -3,7 +3,6 @@ #import "SentrySpan.h" #import "SentrySpanProtocol.h" #import "SentryTracerConfiguration.h" -#import NS_ASSUME_NONNULL_BEGIN @@ -23,10 +22,10 @@ static const NSTimeInterval SENTRY_AUTO_TRANSACTION_MAX_DURATION = 500.0; @protocol SentryTracerDelegate /** - * Return the active span of given tracer. + * Return the active span. * This function is used to determine which span will be used to create a new child. */ -- (nullable id)activeSpanForTracer:(SentryTracer *)tracer; +- (nullable id)getActiveSpan; /** * Report that the tracer has finished. @@ -91,7 +90,14 @@ static const NSTimeInterval SENTRY_AUTO_TRANSACTION_MAX_DURATION = 500.0; */ + (nullable SentryTracer *)getTracer:(id)span; -- (void)dispatchIdleTimeout; +- (void)startIdleTimeout; + +/** + * This method is designed to be used when the app crashes. It finishes the transaction and stores + * it to disk on the calling thread. This method skips adding a profile to the transaction to + * increase the likelihood of storing it before the app exits. + */ +- (void)finishForCrash; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTracerConfiguration.h b/Pods/Sentry/Sources/Sentry/include/SentryTracerConfiguration.h index 9fdb9c228..831b006b5 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTracerConfiguration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTracerConfiguration.h @@ -9,7 +9,7 @@ NS_ASSUME_NONNULL_BEGIN @class SentryDispatchQueueWrapper; -@class SentryNSTimerFactory; +@class SentryProfileOptions; @class SentrySamplerDecision; @interface SentryTracerConfiguration : NSObject @@ -28,11 +28,25 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nonatomic) BOOL waitForChildren; +/** + * This flag indicates whether the trace should be captured when the timeout triggers. + * If Yes, this tracer will be discarced in case the timeout triggers. + * Default @c NO + */ +@property (nonatomic) BOOL finishMustBeCalled; + #if SENTRY_TARGET_PROFILING_SUPPORTED /** * Whether to sample a profile corresponding to this transaction */ @property (nonatomic, strong, nullable) SentrySamplerDecision *profilesSamplerDecision; + +/** + * For launch continuous v2 profiles that must start for trace lifecycle, we must explicitly be able + * to indicate that to the tracer here, since there's no hub or options attached to it for the + * profiler system to know whether it's a old-style trace profile or a trace continuous v2 profile. + */ +@property (nonatomic, strong, nullable) SentryProfileOptions *profileOptions; #endif // SENTRY_TARGET_PROFILING_SUPPORTED" /** @@ -42,11 +56,6 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nonatomic) NSTimeInterval idleTimeout; -/** - * A writer around NSTimer, to make it testable - */ -@property (nonatomic, strong, nullable) SentryNSTimerFactory *timerFactory; - + (SentryTracerConfiguration *)configurationWithBlock: (void (^)(SentryTracerConfiguration *configuration))block; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTransactionContext+Private.h b/Pods/Sentry/Sources/Sentry/include/SentryTransactionContext+Private.h index 92a572c5d..4baef4cbb 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTransactionContext+Private.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTransactionContext+Private.h @@ -3,8 +3,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface -SentryTransactionContext () +@interface SentryTransactionContext () - (instancetype)initWithName:(NSString *)name nameSource:(SentryTransactionNameSource)source @@ -15,16 +14,20 @@ SentryTransactionContext () nameSource:(SentryTransactionNameSource)source operation:(NSString *)operation origin:(NSString *)origin - sampled:(SentrySampleDecision)sampled; + sampled:(SentrySampleDecision)sampled + sampleRate:(nullable NSNumber *)sampleRate + sampleRand:(nullable NSNumber *)sampleRand; - (instancetype)initWithName:(NSString *)name nameSource:(SentryTransactionNameSource)source - operation:(nonnull NSString *)operation + operation:(NSString *)operation origin:(NSString *)origin traceId:(SentryId *)traceId spanId:(SentrySpanId *)spanId parentSpanId:(nullable SentrySpanId *)parentSpanId - parentSampled:(SentrySampleDecision)parentSampled; + parentSampled:(SentrySampleDecision)parentSampled + parentSampleRate:(nullable NSNumber *)parentSampleRate + parentSampleRand:(nullable NSNumber *)parentSampleRand; - (instancetype)initWithName:(NSString *)name nameSource:(SentryTransactionNameSource)source @@ -34,7 +37,11 @@ SentryTransactionContext () spanId:(SentrySpanId *)spanId parentSpanId:(nullable SentrySpanId *)parentSpanId sampled:(SentrySampleDecision)sampled - parentSampled:(SentrySampleDecision)parentSampled; + parentSampled:(SentrySampleDecision)parentSampled + sampleRate:(nullable NSNumber *)sampleRate + parentSampleRate:(nullable NSNumber *)parentSampleRate + sampleRand:(nullable NSNumber *)sampleRand + parentSampleRand:(nullable NSNumber *)parentSampleRand; #if SENTRY_TARGET_PROFILING_SUPPORTED // This is currently only exposed for testing purposes, see -[SentryProfilerTests diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTransport.h b/Pods/Sentry/Sources/Sentry/include/SentryTransport.h index c3cdcd1bd..f51145591 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTransport.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTransport.h @@ -1,6 +1,5 @@ #import "SentryDataCategory.h" #import "SentryDiscardReason.h" -#import @class SentryEnvelope; @@ -17,6 +16,8 @@ NS_SWIFT_NAME(Transport) - (void)sendEnvelope:(SentryEnvelope *)envelope NS_SWIFT_NAME(send(envelope:)); +- (void)storeEnvelope:(SentryEnvelope *)envelope; + - (void)recordLostEvent:(SentryDataCategory)category reason:(SentryDiscardReason)reason; - (void)recordLostEvent:(SentryDataCategory)category @@ -25,9 +26,9 @@ NS_SWIFT_NAME(Transport) - (SentryFlushResult)flush:(NSTimeInterval)timeout; -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) - (void)setStartFlushCallback:(void (^)(void))callback; -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTransportAdapter.h b/Pods/Sentry/Sources/Sentry/include/SentryTransportAdapter.h index 81c7f36fc..5e8d1387a 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTransportAdapter.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTransportAdapter.h @@ -3,8 +3,15 @@ #import "SentryDiscardReason.h" #import "SentryTransport.h" -@class SentryEnvelope, SentryEnvelopeItem, SentryEvent, SentrySession, SentryUserFeedback, - SentryAttachment, SentryTraceContext, SentryOptions; +@class SentryAttachment; +@class SentryEnvelope; +@class SentryEnvelopeItem; +@class SentryEvent; +@class SentryFeedback; +@class SentryOptions; +@class SentrySession; +@class SentryTraceContext; +@class SentryUserFeedback; NS_ASSUME_NONNULL_BEGIN @@ -39,7 +46,14 @@ SENTRY_NO_INIT traceContext:(nullable SentryTraceContext *)traceContext attachments:(NSArray *)attachments; -- (void)sendUserFeedback:(SentryUserFeedback *)userFeedback NS_SWIFT_NAME(send(userFeedback:)); +- (void)storeEvent:(SentryEvent *)event traceContext:(nullable SentryTraceContext *)traceContext; + +/** + * @deprecated Use @c -[SentryClient @c captureFeedback:withScope:] . + */ +- (void)sendUserFeedback:(SentryUserFeedback *)userFeedback + NS_SWIFT_NAME(send(userFeedback:)) + DEPRECATED_MSG_ATTRIBUTE("Use -[SentryClient captureFeedback:withScope:]."); - (void)sendEnvelope:(SentryEnvelope *)envelope NS_SWIFT_NAME(send(envelope:)); diff --git a/Pods/Sentry/Sources/Sentry/include/SentryTransportFactory.h b/Pods/Sentry/Sources/Sentry/include/SentryTransportFactory.h index 4a6d9ecc2..6916517c6 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryTransportFactory.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryTransportFactory.h @@ -1,9 +1,9 @@ -#import - #import "SentryTransport.h" -@class SentryOptions, SentryFileManager; -@class SentryCurrentDateProvider; +@class SentryFileManager; +@class SentryOptions; +@protocol SentryCurrentDateProvider; +@protocol SentryRateLimits; NS_ASSUME_NONNULL_BEGIN @@ -12,7 +12,7 @@ NS_SWIFT_NAME(TransportInitializer) + (NSArray> *)initTransports:(SentryOptions *)options sentryFileManager:(SentryFileManager *)sentryFileManager - currentDateProvider:(SentryCurrentDateProvider *)currentDateProvider; + rateLimits:(id)rateLimits; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUIEventTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryUIEventTracker.h index 456315c92..38970c1b7 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryUIEventTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryUIEventTracker.h @@ -10,7 +10,8 @@ NS_ASSUME_NONNULL_BEGIN @interface SentryUIEventTracker : NSObject SENTRY_NO_INIT -- (instancetype)initWithMode:(id)mode; +- (instancetype)initWithMode:(id)mode + reportAccessibilityIdentifier:(BOOL)report; - (void)start; - (void)stop; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackerMode.h b/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackerMode.h index 7c0f4f9c2..637311fec 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackerMode.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackerMode.h @@ -8,7 +8,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)handleUIEvent:(NSString *)action operation:(NSString *)operation - accessibilityIdentifier:(NSString *)accessibilityIdentifier; + accessibilityIdentifier:(nullable NSString *)accessibilityIdentifier; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackingIntegration.h index f37bc58b1..3fc9f01cb 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryUIEventTrackingIntegration.h @@ -3,9 +3,8 @@ #if SENTRY_HAS_UIKIT # import "SentryBaseIntegration.h" -# import "SentrySwift.h" -@interface SentryUIEventTrackingIntegration : SentryBaseIntegration +@interface SentryUIEventTrackingIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerPerformanceTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerPerformanceTracker.h index ed520b34f..c5dcd23cb 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerPerformanceTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerPerformanceTracker.h @@ -4,33 +4,28 @@ @class SentrySpan; @class SentryInAppLogic; +@class SentryTimeToDisplayTracker; @class UIViewController; +@class SentryTracer; +@class SentryPerformanceTracker; +@class SentryDispatchQueueWrapper; NS_ASSUME_NONNULL_BEGIN -static NSString *const SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID - = @"SENTRY_UI_PERFORMANCE_TRACKER_SPAN_ID"; - -static NSString *const SENTRY_UI_PERFORMANCE_TRACKER_LAYOUTSUBVIEW_SPAN_ID - = @"SENTRY_UI_PERFORMANCE_TRACKER_LAYOUTSUBVIEW_SPAN_ID"; - -static NSString *const SENTRY_UI_PERFORMANCE_TRACKER_SPANS_IN_EXECUTION_SET - = @"SENTRY_UI_PERFORMANCE_TRACKER_SPANS_IN_EXECUTION_SET"; - -static NSString *const SENTRY_UI_PERFORMANCE_TRACKER_TTD_TRACKER - = @"SENTRY_UI_PERFORMANCE_TRACKER_TTD_TRACKER"; - /** * Class responsible to track UI performance. * This class is intended to be used in a swizzled context. */ @interface SentryUIViewControllerPerformanceTracker : NSObject -@property (nonatomic, readonly, class) SentryUIViewControllerPerformanceTracker *shared; - @property (nonatomic, strong) SentryInAppLogic *inAppLogic; -@property (nonatomic) BOOL enableWaitForFullDisplay; +@property (nonatomic) BOOL alwaysWaitForFullDisplay; + +SENTRY_NO_INIT + +- (instancetype)initWithTracker:(SentryPerformanceTracker *)tracker + dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper; /** * Measures @c controller's @c loadView method. @@ -101,6 +96,10 @@ static NSString *const SENTRY_UI_PERFORMANCE_TRACKER_TTD_TRACKER - (void)reportFullyDisplayed; +- (nullable SentryTimeToDisplayTracker *)startTimeToDisplayTrackerForScreen:(NSString *)screenName + waitForFullDisplay:(BOOL)waitForFullDisplay + tracer:(SentryTracer *)tracer; + @end NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerSwizzling.h b/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerSwizzling.h index 510053f8b..0c4347235 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerSwizzling.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryUIViewControllerSwizzling.h @@ -7,8 +7,11 @@ NS_ASSUME_NONNULL_BEGIN -@class SentryOptions, SentryDispatchQueueWrapper, SentrySubClassFinder, SentryNSProcessInfoWrapper, - SentryBinaryImageCache; +@class SentryBinaryImageCache; +@class SentryDispatchQueueWrapper; +@class SentryNSProcessInfoWrapper; +@class SentryOptions; +@class SentrySubClassFinder; /** * This is a protocol to define which properties and methods the swizzler required from diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUncaughtNSExceptions.h b/Pods/Sentry/Sources/Sentry/include/SentryUncaughtNSExceptions.h new file mode 100644 index 000000000..8ff833c98 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryUncaughtNSExceptions.h @@ -0,0 +1,27 @@ +#import + +#if TARGET_OS_OSX + +# import "SentryDefines.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface SentryUncaughtNSExceptions : NSObject + +/** + * This method will force the application to crash when an uncaught exception occurs. We recommended + * this approach cause otherwise, the application can end up in a corrupted state because the Cocoa + * Frameworks are generally not exception-safe: + * https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Exceptions/Articles/ExceptionsAndCocoaFrameworks.html. + */ ++ (void)configureCrashOnExceptions; + ++ (void)swizzleNSApplicationReportException; + ++ (void)capture:(nullable NSException *)exception; + +@end + +NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_OSX diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUserAccess.h b/Pods/Sentry/Sources/Sentry/include/SentryUserAccess.h new file mode 100644 index 000000000..1919360dc --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryUserAccess.h @@ -0,0 +1,13 @@ +// This provides convenience access to internal ObjC API of internal Swift implementation, which +// can't be directly imported in SentryPrivate.h + +#import + +@class SentryClient; +@class SentryUser; + +NS_ASSUME_NONNULL_BEGIN + +SentryUser *_Nullable sentry_getCurrentUser(void); + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryUserFeedbackIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryUserFeedbackIntegration.h new file mode 100644 index 000000000..2425cdbd6 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryUserFeedbackIntegration.h @@ -0,0 +1,17 @@ +#import "SentryBaseIntegration.h" + +#import "SentryDefines.h" + +#if TARGET_OS_IOS && SENTRY_HAS_UIKIT + +NS_ASSUME_NONNULL_BEGIN + +API_AVAILABLE(ios(13.0)) +@interface SentryUserFeedbackIntegration : SentryBaseIntegration +- (void)showWidget; +- (void)hideWidget; +@end + +NS_ASSUME_NONNULL_END + +#endif // TARGET_OS_IOS && SENTRY_HAS_UIKIT diff --git a/Pods/Sentry/Sources/Sentry/include/SentryViewHierarchyIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryViewHierarchyIntegration.h index e1c0d5e6b..7f785b620 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryViewHierarchyIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryViewHierarchyIntegration.h @@ -4,13 +4,10 @@ # import "SentryBaseIntegration.h" # import "SentryClient+Private.h" -# import "SentrySwift.h" -# import NS_ASSUME_NONNULL_BEGIN -@interface SentryViewHierarchyIntegration - : SentryBaseIntegration +@interface SentryViewHierarchyIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationBreadcrumbProcessor.h b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationBreadcrumbProcessor.h new file mode 100644 index 000000000..ccbdf07d3 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationBreadcrumbProcessor.h @@ -0,0 +1,20 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class SentryFileManager; + +@interface SentryWatchdogTerminationBreadcrumbProcessor : NSObject + +- (instancetype)initWithMaxBreadcrumbs:(NSInteger)maxBreadcrumbs + fileManager:(SentryFileManager *)fileManager; + +- (void)addSerializedBreadcrumb:(NSDictionary *)crumb; + +- (void)clearBreadcrumbs; + +- (void)clear; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationLogic.h b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationLogic.h index 7144b0653..ee0add889 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationLogic.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationLogic.h @@ -2,7 +2,11 @@ #if SENTRY_HAS_UIKIT -@class SentryOptions, SentryCrashWrapper, SentryAppState, SentryFileManager, SentryAppStateManager; +@class SentryAppState; +@class SentryAppStateManager; +@class SentryCrashWrapper; +@class SentryFileManager; +@class SentryOptions; NS_ASSUME_NONNULL_BEGIN diff --git a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationScopeObserver.h b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationScopeObserver.h index 52ad76d13..4f9e41bd1 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationScopeObserver.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationScopeObserver.h @@ -4,7 +4,8 @@ # import "SentryScopeObserver.h" -@class SentryFileManager; +@class SentryWatchdogTerminationBreadcrumbProcessor; +@class SentryWatchdogTerminationContextProcessor; NS_ASSUME_NONNULL_BEGIN @@ -17,8 +18,9 @@ NS_ASSUME_NONNULL_BEGIN @interface SentryWatchdogTerminationScopeObserver : NSObject SENTRY_NO_INIT -- (instancetype)initWithMaxBreadcrumbs:(NSInteger)maxBreadcrumbs - fileManager:(SentryFileManager *)fileManager; +- (instancetype) + initWithBreadcrumbProcessor:(SentryWatchdogTerminationBreadcrumbProcessor *)breadcrumbProcessor + contextProcessor:(SentryWatchdogTerminationContextProcessor *)contextProcessor; @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTracker.h b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTracker.h index bde5f8999..bc6a1db92 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTracker.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTracker.h @@ -1,7 +1,11 @@ #import "SentryDefines.h" -@class SentryOptions, SentryWatchdogTerminationLogic, SentryDispatchQueueWrapper, - SentryAppStateManager, SentryFileManager; +@class SentryAppStateManager; +@class SentryDispatchQueueWrapper; +@class SentryFileManager; +@class SentryOptions; +@class SentryWatchdogTerminationLogic; +@class SentryScopeContextPersistentStore; NS_ASSUME_NONNULL_BEGIN @@ -11,9 +15,10 @@ static NSString *const SentryWatchdogTerminationExceptionValue static NSString *const SentryWatchdogTerminationMechanismType = @"watchdog_termination"; /** - * Detect OOMs based on heuristics described in a blog post: - * https://engineering.fb.com/2015/08/24/ios/reducing-fooms-in-the-facebook-ios-app/ If a OOM is - * detected, the SDK sends it as crash event. Only works for iOS, tvOS and macCatalyst. + * Detect watchdog terminations based on heuristics described in a blog post: + * https://engineering.fb.com/2015/08/24/ios/reducing-fooms-in-the-facebook-ios-app/ If a watchdog + * termination is detected, the SDK sends it as crash event. Only works for iOS, tvOS and + * macCatalyst. */ @interface SentryWatchdogTerminationTracker : NSObject SENTRY_NO_INIT @@ -22,7 +27,8 @@ SENTRY_NO_INIT watchdogTerminationLogic:(SentryWatchdogTerminationLogic *)watchdogTerminationLogic appStateManager:(SentryAppStateManager *)appStateManager dispatchQueueWrapper:(SentryDispatchQueueWrapper *)dispatchQueueWrapper - fileManager:(SentryFileManager *)fileManager; + fileManager:(SentryFileManager *)fileManager + scopeContextStore:(SentryScopeContextPersistentStore *)scopeContextStore; - (void)start; - (void)stop; diff --git a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTrackingIntegration.h b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTrackingIntegration.h index 7b39715a9..c155d9d54 100644 --- a/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTrackingIntegration.h +++ b/Pods/Sentry/Sources/Sentry/include/SentryWatchdogTerminationTrackingIntegration.h @@ -1,16 +1,11 @@ #import "SentryDefines.h" #if SENTRY_HAS_UIKIT - -# import "SentryANRTracker.h" # import "SentryBaseIntegration.h" -# import "SentrySwift.h" -# import NS_ASSUME_NONNULL_BEGIN -@interface SentryWatchdogTerminationTrackingIntegration - : SentryBaseIntegration +@interface SentryWatchdogTerminationTrackingIntegration : SentryBaseIntegration @end diff --git a/Pods/Sentry/Sources/Sentry/include/SentryWeakMap.h b/Pods/Sentry/Sources/Sentry/include/SentryWeakMap.h new file mode 100644 index 000000000..1874e61d3 --- /dev/null +++ b/Pods/Sentry/Sources/Sentry/include/SentryWeakMap.h @@ -0,0 +1,48 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SentryWeakMap : NSObject + +/** + * Returns a the value associated with a given key. + * + * - Parameter aKey: The key for which to return the corresponding value. + * - Returns: The value associated with aKey, or nil if no value is associated with aKey. + */ +- (nullable ObjectType)objectForKey:(nullable KeyType)aKey; + +/** + * Adds a given key-value pair to the map table. + * + * - Parameters: + * - anObject: The value for aKey. + * - aKey: The key for anObject. + */ +- (void)setObject:(nullable ObjectType)anObject forKey:(nullable KeyType)aKey; + +/** + * Removes the object for the given key and prunes the map table. + * + * Does nothing if `aKey` does not exist. + * + * - Parameter aKey: The key to remove. + */ +- (void)removeObjectForKey:(nullable KeyType)aKey; + +/** + * Prune the maps to remove any weak references that have been deallocated. + * + * - SeeAlso: Further discussion available at + * https://github.com/getsentry/sentry-cocoa/pull/5048#issuecomment-2876880446 + */ +- (void)prune; + +/** + * The number of key-value pairs in the map table. + */ +- (NSUInteger)count; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation+Private.h b/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation+Private.h index 196dcc591..bf3f29f1c 100644 --- a/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation+Private.h +++ b/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation+Private.h @@ -38,8 +38,7 @@ typedef struct { ReportField *reportFields[0]; } CrashHandlerData; -@interface -SentryCrashInstallation () +@interface SentryCrashInstallation () /** Initializer. * diff --git a/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation.m b/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation.m index 447f9126e..9ac1e5bdf 100644 --- a/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation.m +++ b/Pods/Sentry/Sources/SentryCrash/Installations/SentryCrashInstallation.m @@ -54,8 +54,7 @@ } } -@interface -SentryCrashInstallation () +@interface SentryCrashInstallation () @property (nonatomic, readwrite, assign) int nextFieldIndex; @property (nonatomic, readonly, assign) CrashHandlerData *crashHandlerData; @@ -77,16 +76,15 @@ - (id)init [NSException raise:NSInternalInconsistencyException format:@"%@ does not support init. Subclasses must call " @"initWithMaxReportFieldCount:requiredProperties:", - [self class]]; + [self class]]; return nil; } - (id)initWithRequiredProperties:(NSArray *)requiredProperties { if ((self = [super init])) { - self.crashHandlerDataBacking = - [NSMutableData dataWithLength:sizeof(*self.crashHandlerData) - + sizeof(*self.crashHandlerData->reportFields) * kMaxProperties]; + self.crashHandlerDataBacking = [NSMutableData dataWithLength:sizeof(*self.crashHandlerData) + + sizeof(*self.crashHandlerData->reportFields) * kMaxProperties]; self.fields = [NSMutableDictionary dictionary]; self.requiredProperties = requiredProperties; } diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.cpp b/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.cpp index 633ae7e07..f0b9688e3 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.cpp +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_CPPException.cpp @@ -160,10 +160,11 @@ CPPExceptionTerminate(void) try { throw; } catch (std::exception &exc) { - strncpy(descriptionBuff, exc.what(), sizeof(descriptionBuff)); + strlcpy(descriptionBuff, exc.what(), sizeof(descriptionBuff)); } #define CATCH_VALUE(TYPE, PRINTFTYPE) \ - catch (TYPE value) { \ + catch (TYPE value) \ + { \ snprintf(descriptionBuff, sizeof(descriptionBuff), "%" #PRINTFTYPE, value); \ } CATCH_VALUE(char, d) diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.m b/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.m index 72ddd8087..c5e399d09 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.m +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Monitors/SentryCrashMonitor_System.m @@ -39,7 +39,6 @@ #import "SentryDefines.h" #import -#import #include #include @@ -533,7 +532,7 @@ stringWithFormat:@"%d.%d", (int)version.majorVersion, (int)version.minorVersion]; } else { systemVersion = [NSString stringWithFormat:@"%d.%d.%d", (int)version.majorVersion, - (int)version.minorVersion, (int)version.patchVersion]; + (int)version.minorVersion, (int)version.patchVersion]; } g_systemData.systemVersion = cString(systemVersion); diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrash.m b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrash.m index 6b7194d71..ba56b172b 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrash.m +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrash.m @@ -54,8 +54,7 @@ #pragma mark - Globals - // ============================================================================ -@interface -SentryCrash () +@interface SentryCrash () @property (nonatomic, readwrite, retain) NSString *bundleName; @property (nonatomic, readwrite, assign) SentryCrashMonitorType monitoringWhenUninstalled; @@ -448,8 +447,8 @@ - (NSDictionary *)reportWithIntID:(int64_t)reportID NSMutableDictionary *crashReport = [SentryCrashJSONCodec decode:jsonData options:SentryCrashJSONDecodeOptionIgnoreNullInArray - | SentryCrashJSONDecodeOptionIgnoreNullInObject - | SentryCrashJSONDecodeOptionKeepPartialObject + | SentryCrashJSONDecodeOptionIgnoreNullInObject + | SentryCrashJSONDecodeOptionKeepPartialObject error:&error]; if (error != nil) { diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.c b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.c index 62212e614..b0832c72b 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashBinaryImageCache.c @@ -7,7 +7,7 @@ #include #include -#if defined(TEST) || defined(TESTCI) || defined(DEBUG) +#if defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) typedef void (*SentryRegisterImageCallback)(const struct mach_header *mh, intptr_t vmaddr_slide); typedef void (*SentryRegisterFunction)(SentryRegisterImageCallback function); @@ -57,7 +57,7 @@ sentry_resetFuncForAddRemoveImage(void) # define sentry_dyld_register_func_for_remove_image(CALLBACK) \ _dyld_register_func_for_remove_image(CALLBACK) # define _will_add_image() -#endif // defined(TEST) || defined(TESTCI) || defined(DEBUG) +#endif // defined(SENTRY_TEST) || defined(SENTRY_TEST_CI) || defined(DEBUG) typedef struct SentryCrashBinaryImageNode { SentryCrashBinaryImage image; diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.c b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.c index 1225728bf..116357fe6 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.c @@ -58,7 +58,7 @@ static SentryCrashMonitorType g_monitoring = SentryCrashMonitorTypeProductionSaf static char g_lastCrashReportFilePath[SentryCrashFU_MAX_PATH_LENGTH]; static void (*g_saveScreenShot)(const char *) = 0; static void (*g_saveViewHierarchy)(const char *) = 0; - +static void (*g_saveTransaction)(void) = 0; // ============================================================================ #pragma mark - Utility - // ============================================================================ @@ -82,13 +82,14 @@ onCrash(struct SentryCrash_MonitorContext *monitorContext) } else { char crashReportFilePath[SentryCrashFU_MAX_PATH_LENGTH]; sentrycrashcrs_getNextCrashReportPath(crashReportFilePath); - strncpy(g_lastCrashReportFilePath, crashReportFilePath, sizeof(g_lastCrashReportFilePath)); + strlcpy(g_lastCrashReportFilePath, crashReportFilePath, sizeof(g_lastCrashReportFilePath)); sentrycrashreport_writeStandardReport(monitorContext, crashReportFilePath); sentrySessionReplaySync_writeInfo(); } // Report is saved to disk, now we try to take screenshots - // and view hierarchies. + // and view hierarchies, and try to save any ongoing transaction + // bound to the scope. // Depending on the state of the crash this may not work // because we gonna call into non async-signal safe code // but since the app is already in a crash state we don't @@ -108,6 +109,10 @@ onCrash(struct SentryCrash_MonitorContext *monitorContext) } } } + + if (g_saveTransaction) { + g_saveTransaction(); + } } // ============================================================================ @@ -201,6 +206,12 @@ sentrycrash_setSaveViewHierarchy(void (*callback)(const char *)) g_saveViewHierarchy = callback; } +void +sentrycrash_setSaveTransaction(void (*callback)(void)) +{ + g_saveTransaction = callback; +} + void sentrycrash_notifyAppActive(bool isActive) { @@ -289,3 +300,17 @@ sentrycrash_hasSaveViewHierarchyCallback(void) { return g_saveViewHierarchy != NULL; } + +bool +sentrycrash_hasSaveTransaction(void) +{ + return g_saveTransaction != NULL; +} + +void +sentrycrash_invokeSaveTransaction(void) +{ + if (g_saveTransaction) { + g_saveTransaction(); + } +} diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.h b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.h index 9601289b7..45654a2c9 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.h +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashC.h @@ -139,33 +139,11 @@ void sentrycrash_setSaveScreenshots(SaveAttachmentCallback callback); */ void sentrycrash_setSaveViewHierarchy(SaveAttachmentCallback callback); -/** Report a custom, user defined exception. - * This can be useful when dealing with scripting languages. - * - * If terminateProgram is true, all sentries will be uninstalled and the - * application will terminate with an abort(). - * - * @param name The exception name (for namespacing exception types). - * - * @param reason A description of why the exception occurred. - * - * @param language A unique language identifier. - * - * @param lineOfCode A copy of the offending line of code (NULL = ignore). - * - * @param stackTrace JSON encoded array containing stack trace information (one - * frame per array entry). The frame structure can be anything you want, - * including bare strings. - * - * @param logAllThreads If true, suspend all threads and log their state. Note - * that this incurs a performance penalty, so it's best to use only on fatal - * errors. - * - * @param terminateProgram If true, do not return from this function call. - * Terminate the program instead. +/** + * Set the callback to be called at the end of a crash to make the app save the ongoing transaction + * bound to the scope. */ -void sentrycrash_reportUserException(const char *name, const char *reason, const char *language, - const char *lineOfCode, const char *stackTrace, bool logAllThreads, bool terminateProgram); +void sentrycrash_setSaveTransaction(void (*callback)(void)); #pragma mark-- Notifications -- @@ -246,6 +224,17 @@ bool sentrycrash_hasSaveScreenshotCallback(void); */ bool sentrycrash_hasSaveViewHierarchyCallback(void); +/** + * For testing purpose. + * Indicates that a callback was registered for saving the transaction. + */ +bool sentrycrash_hasSaveTransaction(void); + +/** + * For testing purposes. + */ +void sentrycrash_invokeSaveTransaction(void); + #ifdef __cplusplus } #endif diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.c b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.c index b08133480..3d0a0a0ba 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.c @@ -202,15 +202,6 @@ sentrycrashccd_unfreeze(void) } } -SentryCrashThread * -sentrycrashccd_getAllThreads(int *threadCount) -{ - if (threadCount != NULL) { - *threadCount = g_allThreadsCount; - } - return g_allMachThreads; -} - const char * sentrycrashccd_getThreadName(SentryCrashThread thread) SENTRY_DISABLE_THREAD_SANITIZER("Known data race to fix") diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.h b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.h index f6a89f95d..c8e7f31d9 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.h +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashCachedData.h @@ -35,8 +35,6 @@ bool sentrycrashccd_hasThreadStarted(void); void sentrycrashccd_freeze(void); void sentrycrashccd_unfreeze(void); -SentryCrashThread *sentrycrashccd_getAllThreads(int *threadCount); - const char *sentrycrashccd_getThreadName(SentryCrashThread thread); const char *sentrycrashccd_getQueueName(SentryCrashThread thread); diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashDoctor.m b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashDoctor.m index 9c5e0936f..90739c617 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashDoctor.m +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashDoctor.m @@ -84,7 +84,7 @@ - (NSString *)descriptionForObjCCall [string appendString:param.previousClassName]; } else if (param.className != nil) { [string appendFormat:@"%@ (%@)", param.className, - param.isInstance ? @"instance" : @"class"]; + param.isInstance ? @"instance" : @"class"]; } else { [string appendString:@"?"]; } @@ -117,7 +117,7 @@ - (NSString *)descriptionWithParamCount:(int)paramCount [str appendFormat:@"Param %d: ", i + 1]; if (param.className != nil) { [str appendFormat:@"%@ (%@) ", param.className, - param.isInstance ? @"instance" : @"class"]; + param.isInstance ? @"instance" : @"class"]; } if (param.value != nil) { [str appendFormat:@"%@ ", param.value]; @@ -368,9 +368,9 @@ - (SentryCrashDoctorFunctionCall *)lastFunctionCall:(NSDictionary *)report CPUFamily family = [self cpuFamily:report]; NSDictionary *registers = [self basicRegistersFromThreadReport:crashedThread]; NSArray *regNames = [NSArray arrayWithObjects:[self registerNameForFamily:family paramIndex:0], - [self registerNameForFamily:family paramIndex:1], - [self registerNameForFamily:family paramIndex:2], - [self registerNameForFamily:family paramIndex:3], nil]; + [self registerNameForFamily:family paramIndex:1], + [self registerNameForFamily:family paramIndex:2], + [self registerNameForFamily:family paramIndex:3], nil]; NSMutableArray *params = [NSMutableArray arrayWithCapacity:4]; for (NSString *regName in regNames) { SentryCrashDoctorParam *param = [[SentryCrashDoctorParam alloc] init]; @@ -459,8 +459,8 @@ - (NSString *)diagnoseCrash:(NSDictionary *)report } if ([self isInvalidAddress:errorReport]) { - uintptr_t address = (uintptr_t)[ - [errorReport objectForKey:@SentryCrashField_Address] unsignedLongLongValue]; + uintptr_t address = (uintptr_t)[[errorReport objectForKey:@SentryCrashField_Address] + unsignedLongLongValue]; if (address == 0) { return @"Attempted to dereference null pointer."; } @@ -473,7 +473,7 @@ - (NSString *)diagnoseCrash:(NSDictionary *)report } else { return [NSString stringWithFormat:@"Attempted to dereference garbage pointer at %p.", - (void *)address]; + (void *)address]; } } @@ -487,11 +487,11 @@ - (NSString *)diagnoseCrash:(NSDictionary *)report if (symbols) { return [NSString stringWithFormat:@"No diagnosis due to exception %@:\n%@\nPlease " @"file a bug report to the SentryCrash project.", - e, symbols]; + e, symbols]; } return [NSString stringWithFormat:@"No diagnosis due to exception %@\nPlease file a " @"bug report to the SentryCrash project.", - e]; + e]; } } diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReport.c b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReport.c index 70afaf606..6ba486db8 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReport.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReport.c @@ -163,7 +163,7 @@ addTextFileElement( char buffer[512]; int bytesRead; for (bytesRead = (int)read(fd, buffer, sizeof(buffer)); bytesRead > 0; - bytesRead = (int)read(fd, buffer, sizeof(buffer))) { + bytesRead = (int)read(fd, buffer, sizeof(buffer))) { if (sentrycrashjson_appendStringElement(getJsonContext(writer), buffer, bytesRead) != SentryCrashJSON_OK) { SENTRY_ASYNC_SAFE_LOG_ERROR("Could not append string element"); @@ -1169,10 +1169,6 @@ writeBinaryImage(const SentryCrashReportWriter *const writer, const char *const writer->addUUIDElement(writer, SentryCrashField_UUID, image->uuid); writer->addIntegerElement(writer, SentryCrashField_CPUType, image->cpuType); writer->addIntegerElement(writer, SentryCrashField_CPUSubType, image->cpuSubType); - writer->addUIntegerElement(writer, SentryCrashField_ImageMajorVersion, image->majorVersion); - writer->addUIntegerElement(writer, SentryCrashField_ImageMinorVersion, image->minorVersion); - writer->addUIntegerElement( - writer, SentryCrashField_ImageRevisionVersion, image->revisionVersion); if (image->crashInfoMessage != NULL) { writer->addStringElement( writer, SentryCrashField_ImageCrashInfoMessage, image->crashInfoMessage); @@ -1189,6 +1185,10 @@ static void binaryImagesIteratorCallback(SentryCrashBinaryImage *image, void *context) { SentryCrashReportWriter *writer = (SentryCrashReportWriter *)context; + // We can only retrieve the crash info after a crash occurred. So we need to + // fetch it when writing the crash report. + // Swift puts its fatalErrors into the crash info message. + sentrycrashdl_getCrashInfo(image->address, image); writeBinaryImage(writer, NULL, image); } @@ -1474,8 +1474,8 @@ sentrycrashreport_writeRecrashReport( char writeBuffer[1024]; SentryCrashBufferedWriter bufferedWriter; static char tempPath[SentryCrashFU_MAX_PATH_LENGTH]; - strncpy(tempPath, path, sizeof(tempPath) - 10); - strncpy(tempPath + strlen(tempPath) - 5, ".old", 5); + strlcpy(tempPath, path, sizeof(tempPath) - 10); + strlcpy(tempPath + strlen(tempPath) - 5, ".old", 5); SENTRY_ASYNC_SAFE_LOG_INFO("Writing recrash report to %s", path); if (rename(path, tempPath) < 0) { @@ -1612,6 +1612,9 @@ writeScopeJson(const SentryCrashReportWriter *const writer) if (scope->context) { addJSONElement(writer, "context", scope->context, false); } + if (scope->traceContext) { + addJSONElement(writer, "traceContext", scope->traceContext, false); + } if (scope->environment) { addJSONElement(writer, "environment", scope->environment, false); } diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFields.h b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFields.h index 31e14cfeb..dea483265 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFields.h +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFields.h @@ -110,9 +110,6 @@ #define SentryCrashField_ImageAddress "image_addr" #define SentryCrashField_ImageVmAddress "image_vmaddr" #define SentryCrashField_ImageSize "image_size" -#define SentryCrashField_ImageMajorVersion "major_version" -#define SentryCrashField_ImageMinorVersion "minor_version" -#define SentryCrashField_ImageRevisionVersion "revision_version" #define SentryCrashField_ImageCrashInfoMessage "crash_info_message" #define SentryCrashField_ImageCrashInfoMessage2 "crash_info_message2" diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFixer.c b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFixer.c index 0315f7a8b..e4e4f1540 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFixer.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/SentryCrashReportFixer.c @@ -60,7 +60,7 @@ increaseDepth(FixupContext *context, const char *name) if (name == NULL) { *context->objectPath[context->currentDepth] = '\0'; } else { - strncpy(context->objectPath[context->currentDepth], name, + strlcpy(context->objectPath[context->currentDepth], name, sizeof(context->objectPath[context->currentDepth])); } context->currentDepth++; diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm64.c b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm64.c index d6f5ef4cb..8c18a24cc 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm64.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashCPU_arm64.c @@ -52,7 +52,7 @@ sentrycrashcpu_framePointer(const SentryCrashMachineContext *const context) // We don't want this from stopping us to enable warnings as errors. This needs to be fixed. # pragma clang diagnostic push # pragma GCC diagnostic ignored "-Wshorten-64-to-32" - return context->machineContext.__ss.__fp; + return arm_thread_state64_get_fp(context->machineContext.__ss); # pragma clang diagnostic pop } @@ -62,7 +62,7 @@ sentrycrashcpu_stackPointer(const SentryCrashMachineContext *const context) // We don't want this from stopping us to enable warnings as errors. This needs to be fixed. # pragma clang diagnostic push # pragma GCC diagnostic ignored "-Wshorten-64-to-32" - return context->machineContext.__ss.__sp; + return arm_thread_state64_get_sp(context->machineContext.__ss); # pragma clang diagnostic pop } @@ -72,7 +72,7 @@ sentrycrashcpu_instructionAddress(const SentryCrashMachineContext *const context // We don't want this from stopping us to enable warnings as errors. This needs to be fixed. # pragma clang diagnostic push # pragma GCC diagnostic ignored "-Wshorten-64-to-32" - return context->machineContext.__ss.__pc; + return arm_thread_state64_get_pc(context->machineContext.__ss); # pragma clang diagnostic pop } @@ -82,7 +82,7 @@ sentrycrashcpu_linkRegister(const SentryCrashMachineContext *const context) // We don't want this from stopping us to enable warnings as errors. This needs to be fixed. # pragma clang diagnostic push # pragma GCC diagnostic ignored "-Wshorten-64-to-32" - return context->machineContext.__ss.__lr; + return arm_thread_state64_get_lr(context->machineContext.__ss); # pragma clang diagnostic pop } @@ -122,13 +122,13 @@ sentrycrashcpu_registerValue(const SentryCrashMachineContext *const context, con switch (regNumber) { case 29: - return context->machineContext.__ss.__fp; + return arm_thread_state64_get_fp(context->machineContext.__ss); case 30: - return context->machineContext.__ss.__lr; + return arm_thread_state64_get_lr(context->machineContext.__ss); case 31: - return context->machineContext.__ss.__sp; + return arm_thread_state64_get_sp(context->machineContext.__ss); case 32: - return context->machineContext.__ss.__pc; + return arm_thread_state64_get_pc(context->machineContext.__ss); case 33: return context->machineContext.__ss.__cpsr; } diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.c b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.c index 17cb65433..0dc67fbed 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.c @@ -293,6 +293,50 @@ isValidCrashInfoMessage(const char *str) return false; } +/** + * Get the message of fatalError, assert, and precondition to set it as the exception value if the + * crashInfo contains the message. + * + * Swift puts the messages of fatalError, assert, and precondition into the @c crashInfo of the + * @c libswiftCore.dylib. We found proof that the swift runtime uses @c __crash_info: + * fatalError (1) calls @c swift_reportError (2) calls @c reportOnCrash (3) which uses (4) the + * @c __crash_info (5). The documentation of Apple and Swift doesn't mention anything about where + * the @c __crash_info ends up. Trying fatalError, assert, and precondition on iPhone, iPhone + * simulator, and macOS all showed that the message ends up in the crashInfo of the + * @c libswiftCore.dylib. For example, on the simulator, other binary images also contain a + * @c crash_info_message with information about the stacktrace. We only care about the message of + * fatalError, assert, or precondition, and we already get the stacktrace from the threads, + * retrieving it from @c libswiftCore.dylib seems to be the most reliable option. + * + * @seealso + * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L365-L377 + * @seealso + * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L361 + * @seealso + * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L269-L293 + * @seealso + * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/stdlib/public/runtime/Errors.cpp#L264-L293 + * @seealso + * https://github.com/apple/swift/blob/d1bb98b11ede375a1cee739f964b7d23b6657aaf/include/swift/Runtime/Debug.h#L29-L58 + * + * We also investigated using getsectbynamefromheader to get the crash info as Crashlytics + * (https://github.com/firebase/firebase-ios-sdk/blob/main/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m#L245-L283) + * does it, but we get the same results. If the crash info is missing, we can't find it via + * getsectiondata or getsectbynamefromheader. We also saw Swift storing the error message into the + * x26 CPU register, but when the error message isn't in the crash info, we also can't find it in + * the x26 CPU register. Furthermore, the error message gets truncated. For example: + * + * Fatal error: Duplicate keys of type 'Something' were found in a Dictionary.\nThis usually means + * either that the type violates Hashable's requirements, or\nthat members of such a dictionary were + * mutated after insertion. + * + * gets truncated to + * + * ' were found in a Dictionary.\nThis usually means either that the type violates Hashable's + * requirements, or\nthat members of such a dictionary were mutated after insertion. + * + * So, there seems to be a problem with the string interpolation. + */ static void getCrashInfo(const struct mach_header *header, SentryCrashBinaryImage *buffer) { @@ -352,6 +396,12 @@ sentrycrashdl_getBinaryImage(int index, SentryCrashBinaryImage *buffer, bool isC return sentrycrashdl_getBinaryImageForHeader((const void *)header, imageName, buffer, isCrash); } +void +sentrycrashdl_getCrashInfo(uint64_t address, SentryCrashBinaryImage *buffer) +{ + getCrashInfo((struct mach_header *)address, buffer); +} + bool sentrycrashdl_getBinaryImageForHeader(const void *const header_ptr, const char *const image_name, SentryCrashBinaryImage *buffer, bool isCrash) @@ -366,7 +416,6 @@ sentrycrashdl_getBinaryImageForHeader(const void *const header_ptr, const char * // Also look for a UUID command. uint64_t imageSize = 0; uint64_t imageVmAddr = 0; - uint64_t version = 0; uint8_t *uuid = NULL; for (uint32_t iCmd = 0; iCmd < header->ncmds; iCmd++) { @@ -393,12 +442,6 @@ sentrycrashdl_getBinaryImageForHeader(const void *const header_ptr, const char * uuid = uuidCmd->uuid; break; } - case LC_ID_DYLIB: { - - struct dylib_command *dc = (struct dylib_command *)cmdPtr; - version = dc->dylib.current_version; - break; - } } cmdPtr += loadCmd->cmdsize; } @@ -410,9 +453,6 @@ sentrycrashdl_getBinaryImageForHeader(const void *const header_ptr, const char * buffer->uuid = uuid; buffer->cpuType = header->cputype; buffer->cpuSubType = header->cpusubtype; - buffer->majorVersion = version >> 16; - buffer->minorVersion = (version >> 8) & 0xff; - buffer->revisionVersion = version & 0xff; if (isCrash) { getCrashInfo(header, buffer); } diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.h b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.h index dc2ab1cfc..cce9725c6 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.h +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashDynamicLinker.h @@ -44,9 +44,6 @@ typedef struct { const uint8_t *uuid; int cpuType; int cpuSubType; - uint64_t majorVersion; - uint64_t minorVersion; - uint64_t revisionVersion; const char *crashInfoMessage; const char *crashInfoMessage2; } SentryCrashBinaryImage; @@ -119,6 +116,8 @@ const uint8_t *sentrycrashdl_imageUUID(const char *const imageName, bool exactMa */ bool sentrycrashdl_dladdr(const uintptr_t address, Dl_info *const info); +void sentrycrashdl_getCrashInfo(uint64_t address, SentryCrashBinaryImage *buffer); + #ifdef __cplusplus } #endif diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.c b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.c index 09e583ad4..39428ca89 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashFileUtils.c @@ -161,7 +161,7 @@ deletePathContents(const char *path, bool deleteTopLevelPathAlso) for (int i = 0; i < entryCount; i++) { char *entry = entries[i]; if (entry != NULL && canDeletePath(entry)) { - strncpy(pathPtr, entry, pathRemainingLength); + strlcpy(pathPtr, entry, pathRemainingLength); deletePathContents(pathBuffer, true); } } @@ -236,18 +236,18 @@ sentrycrashfu_readEntireFile(const char *const path, char **data, int *length, i int fd = -1; int bytesToRead = maxLength; - struct stat st; - if (stat(path, &st) < 0) { - SENTRY_ASYNC_SAFE_LOG_ERROR("Could not stat %s: %s", path, strerror(errno)); - goto done; - } - fd = open(path, O_RDONLY); if (fd < 0) { SENTRY_ASYNC_SAFE_LOG_ERROR("Could not open %s: %s", path, strerror(errno)); goto done; } + struct stat st; + if (fstat(fd, &st) < 0) { + SENTRY_ASYNC_SAFE_LOG_ERROR("Could not fstat %s: %s", path, strerror(errno)); + goto done; + } + if (bytesToRead == 0 || bytesToRead >= (int)st.st_size) { bytesToRead = (int)st.st_size; } else if (bytesToRead > 0) { diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.c b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.c index 9bdc5d110..a8fd78c89 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodec.c @@ -1210,7 +1210,7 @@ decodeElement(const char *const name, SentryCrashJSONDecodeContext *context) const char *const start = context->bufferPtr; for (; context->bufferPtr < context->bufferEnd && isdigit(*context->bufferPtr); - context->bufferPtr++) { + context->bufferPtr++) { unlikely_if((isOverflow = accum > (ULLONG_MAX / 10))) { break; } accum *= 10; int nextDigit = (*context->bufferPtr - '0'); @@ -1256,9 +1256,17 @@ decodeElement(const char *const name, SentryCrashJSONDecodeContext *context) SENTRY_ASYNC_SAFE_LOG_DEBUG("Number is too long."); return SentryCrashJSON_ERROR_DATA_TOO_LONG; } + // Must use strncpy instead of strlcpy, because of the following reason: + // + // Also note that strlcpy() and strlcat() only operate on true 'C' strings. + // This means that for strlcpy() src must be NUL-terminated [..] + // + // Source: https://linux.die.net/man/3/strlcpy strncpy(context->stringBuffer, start, len); context->stringBuffer[len] = '\0'; + // Parses a floating point number from the string buffer into value using %lg format + // %lg uses shortest decimal representation and removes trailing zeros sscanf(context->stringBuffer, "%lg", &value); value *= sign; diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.m b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.m index c06526b42..fa10a58fe 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.m +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashJSONCodecObjC.m @@ -31,8 +31,7 @@ #import "SentryCrashJSONCodec.h" #import "SentryCrashNSErrorUtil.h" -@interface -SentryCrashJSONCodec () +@interface SentryCrashJSONCodec () #pragma mark Properties diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.c b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.c index f22f0b053..cc1781847 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.c @@ -91,12 +91,6 @@ getThreadList(SentryCrashMachineContext *context) return true; } -int -sentrycrashmc_contextSize(void) -{ - return sizeof(SentryCrashMachineContext); -} - SentryCrashThread sentrycrashmc_getThreadFromContext(const SentryCrashMachineContext *const context) { diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.h b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.h index 5b97e04d2..4b9ea917f 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.h +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext.h @@ -28,6 +28,7 @@ #ifndef HDR_SentryCrashMachineContext_h #define HDR_SentryCrashMachineContext_h +#include "SentryCrashMachineContext_Apple.h" #include "SentryCrashThread.h" #include #include @@ -64,16 +65,12 @@ void sentrycrashmc_resumeEnvironment(thread_act_array_t threads, mach_msg_type_n * @param NAME The C identifier to give the pointer. */ #define SentryCrashMC_NEW_CONTEXT(NAME) \ - char sentrycrashmc_##NAME##_storage[sentrycrashmc_contextSize()]; \ + char sentrycrashmc_##NAME##_storage[sentrycrashmc_contextSize]; \ struct SentryCrashMachineContext *NAME \ = (struct SentryCrashMachineContext *)sentrycrashmc_##NAME##_storage struct SentryCrashMachineContext; -/** Get the internal size of a machine context. - */ -int sentrycrashmc_contextSize(void); - /** Fill in a machine context from a thread. * * @param thread The thread to get information from. diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext_Apple.h b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext_Apple.h index fcf1cde44..794973948 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext_Apple.h +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashMachineContext_Apple.h @@ -34,6 +34,7 @@ extern "C" { #include #include +#include #include #ifdef __arm64__ @@ -53,6 +54,8 @@ typedef struct SentryCrashMachineContext { STRUCT_MCONTEXT_L machineContext; } SentryCrashMachineContext; +static const size_t sentrycrashmc_contextSize = sizeof(SentryCrashMachineContext); + #ifdef __cplusplus } #endif diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashObjCApple.h b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashObjCApple.h index c665cdf51..8ecbfc1c4 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashObjCApple.h +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashObjCApple.h @@ -479,7 +479,7 @@ CF_INLINE const void * __CFStrContents(CFStringRef str) { if (__CFStrIsInline(str)) { - return (const void *)(((uintptr_t) & (str->variants)) + return (const void *)(((uintptr_t)&(str->variants)) + (__CFStrHasExplicitLength(str) ? sizeof(CFIndex) : 0)); } else { // Not inline; pointer is always word 2 return str->variants.notInlineImmutable1.buffer; diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.m b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.m index 38bab5ab0..adc534daf 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.m +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashStackCursor_SelfThread.m @@ -25,7 +25,7 @@ #include "SentryCrashStackCursor_SelfThread.h" #include "SentryCrashStackCursor_Backtrace.h" -#import "SentryLog.h" +#import #include #include "SentryAsyncSafeLog.h" @@ -57,23 +57,24 @@ int backtraceLength; if (@available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *)) { if (stitchSwiftAsync) { - SENTRY_LOG_DEBUG(@"Retrieving backtrace with async swift stitching..."); + SENTRY_ASYNC_SAFE_LOG_DEBUG("Retrieving backtrace with async swift stitching..."); backtraceLength = (int)backtrace_async((void **)context->backtrace, MAX_BACKTRACE_LENGTH, NULL); } else { - SENTRY_LOG_DEBUG(@"Retrieving backtrace without async swift stitching..."); + SENTRY_ASYNC_SAFE_LOG_DEBUG("Retrieving backtrace without async swift stitching..."); backtraceLength = backtrace((void **)context->backtrace, MAX_BACKTRACE_LENGTH); } } else { - SENTRY_LOG_DEBUG( - @"Retrieving backtrace without async swift stitching (old platform versions)..."); + SENTRY_ASYNC_SAFE_LOG_DEBUG( + "Retrieving backtrace without async swift stitching (old platform versions)..."); backtraceLength = backtrace((void **)context->backtrace, MAX_BACKTRACE_LENGTH); } #else - SENTRY_LOG_DEBUG(@"Retrieving backtrace without async swift stitching (old Xcode versions)..."); + SENTRY_ASYNC_SAFE_LOG_DEBUG( + "Retrieving backtrace without async swift stitching (old Xcode versions)..."); int backtraceLength = backtrace((void **)context->backtrace, MAX_BACKTRACE_LENGTH); #endif - SENTRY_LOG_DEBUG(@"Finished retrieving backtrace."); + SENTRY_ASYNC_SAFE_LOG_DEBUG("Finished retrieving backtrace."); sentrycrashsc_initWithBacktrace(cursor, context->backtrace, backtraceLength, skipEntries + 1); } diff --git a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.c b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.c index 9609f93fb..aad9c4473 100644 --- a/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.c +++ b/Pods/Sentry/Sources/SentryCrash/Recording/Tools/SentryCrashSysCtl.c @@ -233,7 +233,7 @@ bool sentrycrashsysctl_getMacAddress(const char *const name, char *const macAddressBuffer) { // Based off - // http://iphonedevelopertips.com/device/determine-mac-address.html + // http://web.archive.org/web/20111109013928/http://iphonedevelopertips.com/device/determine-mac-address.html int mib[6] = { CTL_NET, AF_ROUTE, 0, AF_LINK, NET_RT_IFLIST, (int)if_nametoindex(name) }; if (mib[5] == 0) { diff --git a/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.m b/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.m index 94a65fea3..e26c1a427 100644 --- a/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.m +++ b/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/SentryCrashReportFilterBasic.m @@ -47,8 +47,7 @@ - (void)filterReports:(NSArray *)reports @end -@interface -SentryCrashReportFilterCombine () +@interface SentryCrashReportFilterCombine () @property (nonatomic, readwrite, retain) NSArray *filters; @property (nonatomic, readwrite, retain) NSArray *keys; @@ -192,8 +191,7 @@ - (void)filterReports:(NSArray *)reports @end -@interface -SentryCrashReportFilterPipeline () +@interface SentryCrashReportFilterPipeline () @property (nonatomic, readwrite, retain) NSArray *filters; @@ -289,8 +287,7 @@ - (void)filterReports:(NSArray *)reports @end -@interface -SentryCrashReportFilterObjectForKey () +@interface SentryCrashReportFilterObjectForKey () @property (nonatomic, readwrite, retain) id key; @property (nonatomic, readwrite, assign) BOOL allowNotFound; @@ -344,8 +341,7 @@ - (void)filterReports:(NSArray *)reports @end -@interface -SentryCrashReportFilterConcatenate () +@interface SentryCrashReportFilterConcatenate () @property (nonatomic, readwrite, retain) NSString *separatorFmt; @property (nonatomic, readwrite, retain) NSArray *keys; @@ -411,8 +407,7 @@ - (void)filterReports:(NSArray *)reports @end -@interface -SentryCrashReportFilterSubset () +@interface SentryCrashReportFilterSubset () @property (nonatomic, readwrite, retain) NSArray *keyPaths; diff --git a/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/Tools/SentryCrashVarArgs.h b/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/Tools/SentryCrashVarArgs.h index 722d9c5de..75eb5a7e2 100644 --- a/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/Tools/SentryCrashVarArgs.h +++ b/Pods/Sentry/Sources/SentryCrash/Reporting/Filters/Tools/SentryCrashVarArgs.h @@ -55,7 +55,7 @@ typedef void (^SentryCrashVA_Block)(id entry); va_list sentrycrashva_args; \ va_start(sentrycrashva_args, FIRST_ARG_NAME); \ for (id sentrycrashva_arg = FIRST_ARG_NAME; sentrycrashva_arg != nil; \ - sentrycrashva_arg = va_arg(sentrycrashva_args, id)) { \ + sentrycrashva_arg = va_arg(sentrycrashva_args, id)) { \ sentrycrashva_block(sentrycrashva_arg); \ } \ va_end(sentrycrashva_args); \ diff --git a/Pods/Sentry/Sources/Swift/Core/Extensions/Locks.swift b/Pods/Sentry/Sources/Swift/Core/Extensions/Locks.swift new file mode 100644 index 000000000..c1bc3a448 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Extensions/Locks.swift @@ -0,0 +1,33 @@ +import Foundation + +/// Be aware that NSLock isn't reentrant, so if you need re-entrancy, use NSRecursiveLock instead. +/// NSLock is slightly faster than NSRecursiveLock, so if you don't need re-entrancy, prefer NSLock. +extension NSLock { + + /// Executes the closure while acquiring the lock. + /// + /// - Parameter closure: The closure to run. + /// + /// - Returns: The value the closure generated. + func synchronized(_ closure: () throws -> T) rethrows -> T { + defer { self.unlock() } + self.lock() + return try closure() + } +} + +/// Although this class is only used for tests when adding it, we keep it next to the NSLock extension, +/// as it's highly likely that we have to use it at some point, and we want to keep these two extensions +/// close together. +extension NSRecursiveLock { + /// Executes the closure while acquiring the lock. + /// + /// - Parameter closure: The closure to run. + /// + /// - Returns: The value the closure generated. + func synchronized(_ closure: () throws -> T) rethrows -> T { + defer { self.unlock() } + self.lock() + return try closure() + } +} diff --git a/Pods/Sentry/Sources/Swift/Extensions/NumberExtensions.swift b/Pods/Sentry/Sources/Swift/Core/Extensions/NumberExtensions.swift similarity index 100% rename from Pods/Sentry/Sources/Swift/Extensions/NumberExtensions.swift rename to Pods/Sentry/Sources/Swift/Core/Extensions/NumberExtensions.swift diff --git a/Pods/Sentry/Sources/Swift/Extensions/StringExtensions.swift b/Pods/Sentry/Sources/Swift/Core/Extensions/StringExtensions.swift similarity index 100% rename from Pods/Sentry/Sources/Swift/Extensions/StringExtensions.swift rename to Pods/Sentry/Sources/Swift/Core/Extensions/StringExtensions.swift diff --git a/Pods/Sentry/Sources/Swift/Extensions/UIViewExtensions.swift b/Pods/Sentry/Sources/Swift/Core/Extensions/UIViewExtensions.swift similarity index 54% rename from Pods/Sentry/Sources/Swift/Extensions/UIViewExtensions.swift rename to Pods/Sentry/Sources/Swift/Core/Extensions/UIViewExtensions.swift index 53292e32e..7c5e8cf27 100644 --- a/Pods/Sentry/Sources/Swift/Extensions/UIViewExtensions.swift +++ b/Pods/Sentry/Sources/Swift/Core/Extensions/UIViewExtensions.swift @@ -7,20 +7,21 @@ public extension UIView { /** * Marks this view to be redacted during replays. - * - warning: This is an experimental feature and may still have bugs. + * - experiment: This is an experimental feature and may still have bugs. */ - func sentryReplayRedact() { - SentryRedactViewHelper.redactView(self) + func sentryReplayMask() { + SentryRedactViewHelper.maskView(self) } /** * Marks this view to be ignored during redact step * of session replay. All its content will be visible in the replay. - * - warning: This is an experimental feature and may still have bugs. + * - experiment: This is an experimental feature and may still have bugs. */ - func sentryReplayIgnore() { - SentryRedactViewHelper.ignoreView(self) + func sentryReplayUnmask() { + SentryRedactViewHelper.unmaskView(self) } + } #endif diff --git a/Pods/Sentry/Sources/Swift/Helper/Log/SentryLevel.swift b/Pods/Sentry/Sources/Swift/Core/Helper/Log/SentryLevel.swift similarity index 73% rename from Pods/Sentry/Sources/Swift/Helper/Log/SentryLevel.swift rename to Pods/Sentry/Sources/Swift/Core/Helper/Log/SentryLevel.swift index 80ed88a71..2a0f3fe01 100644 --- a/Pods/Sentry/Sources/Swift/Helper/Log/SentryLevel.swift +++ b/Pods/Sentry/Sources/Swift/Core/Helper/Log/SentryLevel.swift @@ -1,4 +1,3 @@ -@_implementationOnly import _SentryPrivate import Foundation @objc @@ -37,16 +36,12 @@ extension SentryLevel: CustomStringConvertible { } @objcMembers -class SentryLevelHelper: NSObject { - static func nameForLevel(_ level: SentryLevel) -> String { +@_spi(Private) public class SentryLevelHelper: NSObject { + public static func nameForLevel(_ level: SentryLevel) -> String { return level.description } - static func levelForName(_ name: String) -> SentryLevel { + public static func levelForName(_ name: String) -> SentryLevel { .fromName(name) } - - static func breadcrumbLevel(_ breadcrumb: Breadcrumb) -> SentryLevel? { - SentryLevel(rawValue: sentry_breadcrumbLevel(breadcrumb)) - } } diff --git a/Pods/Sentry/Sources/Swift/Helper/SentryBaggageSerialization.swift b/Pods/Sentry/Sources/Swift/Core/Helper/SentryBaggageSerialization.swift similarity index 100% rename from Pods/Sentry/Sources/Swift/Helper/SentryBaggageSerialization.swift rename to Pods/Sentry/Sources/Swift/Core/Helper/SentryBaggageSerialization.swift diff --git a/Pods/Sentry/Sources/Swift/Core/Helper/SentryCurrentDateProvider.swift b/Pods/Sentry/Sources/Swift/Core/Helper/SentryCurrentDateProvider.swift new file mode 100644 index 000000000..851df07fe --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Helper/SentryCurrentDateProvider.swift @@ -0,0 +1,40 @@ +import Foundation + +/** + * We need a protocol to expose SentryCurrentDateProvider to tests. + * Mocking the previous private class from `SentryTestUtils` stopped working in Xcode 16. +*/ +@objc +protocol SentryCurrentDateProvider { + func date() -> Date + func timezoneOffset() -> Int + func systemTime() -> UInt64 + func systemUptime() -> TimeInterval +} + +@objcMembers +@_spi(Private) public class SentryDefaultCurrentDateProvider: NSObject, SentryCurrentDateProvider { + public func date() -> Date { + return Date() + } + + public func timezoneOffset() -> Int { + return TimeZone.current.secondsFromGMT() + } + + /** + * Returns the absolute timestamp, which has no defined reference point or unit + * as it is platform dependent. + */ + public func systemTime() -> UInt64 { + Self.getAbsoluteTime() + } + + func systemUptime() -> TimeInterval { + ProcessInfo.processInfo.systemUptime + } + + public static func getAbsoluteTime() -> UInt64 { + clock_gettime_nsec_np(CLOCK_UPTIME_RAW) + } +} diff --git a/Pods/Sentry/Sources/Swift/Core/Helper/SentryFileContents.swift b/Pods/Sentry/Sources/Swift/Core/Helper/SentryFileContents.swift new file mode 100644 index 000000000..e367ca5eb --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Helper/SentryFileContents.swift @@ -0,0 +1,13 @@ +import Foundation + +@objcMembers +@_spi(Private) public class SentryFileContents: NSObject { + + public let path: String + public let contents: Data + + public init(path: String, contents: Data) { + self.path = path + self.contents = contents + } +} diff --git a/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTracker.swift b/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTracker.swift new file mode 100644 index 000000000..d850a1276 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTracker.swift @@ -0,0 +1,12 @@ +import Foundation + +@objc +protocol SentryANRTracker { + @objc(addListener:) + func add(listener: SentryANRTrackerDelegate) + @objc(removeListener:) + func remove(listener: SentryANRTrackerDelegate) + + /// Only used for tests. + func clear() +} diff --git a/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTrackerV2Delegate.swift b/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTrackerV2Delegate.swift new file mode 100644 index 000000000..fd622ec6e --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRTrackerV2Delegate.swift @@ -0,0 +1,21 @@ +import Foundation + +/// The methods are called from a background thread. +@objc +protocol SentryANRTrackerDelegate { + func anrDetected(type: SentryANRType) + + func anrStopped(result: SentryANRStoppedResult?) +} + +@objcMembers +class SentryANRStoppedResult: NSObject { + + let minDuration: TimeInterval + let maxDuration: TimeInterval + + init(minDuration: TimeInterval, maxDuration: TimeInterval) { + self.minDuration = minDuration + self.maxDuration = maxDuration + } +} diff --git a/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRType.swift b/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRType.swift new file mode 100644 index 000000000..ecedb372c --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Integrations/ANR/SentryANRType.swift @@ -0,0 +1,52 @@ +import Foundation + +@objc +enum SentryANRType: Int { + case fatalFullyBlocking + case fatalNonFullyBlocking + case fullyBlocking + case nonFullyBlocking + case unknown +} + +@objc +class SentryAppHangTypeMapper: NSObject { + + private enum ExceptionType: String { + case fatalFullyBlocking = "Fatal App Hang Fully Blocked" + case fatalNonFullyBlocking = "Fatal App Hang Non Fully Blocked" + case fullyBlocking = "App Hang Fully Blocked" + case nonFullyBlocking = "App Hang Non Fully Blocked" + case unknown = "App Hanging" + } + + @objc + static func getExceptionType(anrType: SentryANRType) -> String { + switch anrType { + case .fatalFullyBlocking: + return ExceptionType.fatalFullyBlocking.rawValue + case .fatalNonFullyBlocking: + return ExceptionType.fatalNonFullyBlocking.rawValue + case .fullyBlocking: + return ExceptionType.fullyBlocking.rawValue + case .nonFullyBlocking: + return ExceptionType.nonFullyBlocking.rawValue + default: + return ExceptionType.unknown.rawValue + } + } + + @objc + static func getFatalExceptionType(nonFatalErrorType: String) -> String { + if nonFatalErrorType == ExceptionType.nonFullyBlocking.rawValue { + return ExceptionType.fatalNonFullyBlocking.rawValue + } + + return ExceptionType.fatalFullyBlocking.rawValue + } + + @objc + static func isExceptionTypeAppHang(exceptionType: String) -> Bool { + return ExceptionType(rawValue: exceptionType) != nil + } +} diff --git a/Pods/Sentry/Sources/Swift/Integrations/FramesTracking/SentryFramesDelayResult.swift b/Pods/Sentry/Sources/Swift/Core/Integrations/FramesTracking/SentryFramesDelayResult.swift similarity index 100% rename from Pods/Sentry/Sources/Swift/Integrations/FramesTracking/SentryFramesDelayResult.swift rename to Pods/Sentry/Sources/Swift/Core/Integrations/FramesTracking/SentryFramesDelayResult.swift diff --git a/Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SentryProfileOptions.swift b/Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SentryProfileOptions.swift new file mode 100644 index 000000000..b6b1f8441 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SentryProfileOptions.swift @@ -0,0 +1,80 @@ +import Foundation + +#if os(iOS) || os(macOS) || targetEnvironment(macCatalyst) + +/// An object containing configuration for the Sentry profiler. +/// - warning: Continuous profiling is an experimental feature and may still contain bugs. +/// - note: If either `SentryOptions.profilesSampleRate` or `SentryOptions.profilesSampler` are +/// set to a non-nil value such that transaction-based profiling is being used, these settings +/// will have no effect, nor will `SentrySDK.startProfiler()` or `SentrySDK.stopProfiler()`. +/// - note: Profiling is automatically disabled if a thread sanitizer is attached. +@objcMembers +public class SentryProfileOptions: NSObject { + /// Different modes for starting and stopping the profiler. + @objc public enum SentryProfileLifecycle: Int { + /// Profiling is controlled manually, and is independent of transactions & spans. Developers + /// must use`SentrySDK.startProfiler()` and `SentrySDK.stopProfiler()` to manage the profile + /// session. If the session is sampled, `SentrySDK.startProfiler()` 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. + case manual + + /// 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 `SentryProfileOptions.profileSessionSampleRate` and + /// the existing sampling configuration for tracing + /// (`SentryOptions.tracesSampleRate`/`SentryOptions.tracesSampler`). 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. + case trace + } + + /// 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: `SentryProfileLifecycleManual`. + /// - note: If either `SentryOptions.profilesSampleRate` or `SentryOptions.profilesSampler` 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. + public var lifecycle: SentryProfileLifecycle = .manual + + /// 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 + /// `lifecycle`– 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. + public var sessionSampleRate: Float = 0 + + /// 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: `sessionSampleRate` is evaluated on the previous launch and only takes effect when + /// app start profiling activates on the next launch. + /// - note: If `lifecycle` is `manual`, profiling is started automatically on startup, but you + /// must manually call `SentrySDK.stopProfiler()` whenever you app startup to be complete. If + /// `lifecycle` is `trace`, 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. + public var profileAppStarts: Bool = false +} + +#endif // os(iOS) || os(macOS) || targetEnvironment(macCatalyst) diff --git a/Pods/Sentry/Sources/Swift/Integrations/Performance/SentryTransactionNameSource.swift b/Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SentryTransactionNameSource.swift similarity index 100% rename from Pods/Sentry/Sources/Swift/Integrations/Performance/SentryTransactionNameSource.swift rename to Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SentryTransactionNameSource.swift diff --git a/Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SwizzleClassNameExclude.swift b/Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SwizzleClassNameExclude.swift new file mode 100644 index 000000000..ca9ef1eb4 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Integrations/Performance/SwizzleClassNameExclude.swift @@ -0,0 +1,14 @@ +import Foundation + +@objcMembers +class SentrySwizzleClassNameExclude: NSObject { + static func shouldExcludeClass(className: String, swizzleClassNameExcludes: Set) -> Bool { + for exclude in swizzleClassNameExcludes { + if className.contains(exclude) { + SentryLog.debug("Excluding class \(className) from swizzling cause it matches the exclude pattern: \(exclude).") + return true + } + } + return false + } +} diff --git a/Pods/Sentry/Sources/Swift/MetricKit/SentryMXCallStackTree.swift b/Pods/Sentry/Sources/Swift/Core/MetricKit/SentryMXCallStackTree.swift similarity index 69% rename from Pods/Sentry/Sources/Swift/MetricKit/SentryMXCallStackTree.swift rename to Pods/Sentry/Sources/Swift/Core/MetricKit/SentryMXCallStackTree.swift index 850d4f718..df1d8ed50 100644 --- a/Pods/Sentry/Sources/Swift/MetricKit/SentryMXCallStackTree.swift +++ b/Pods/Sentry/Sources/Swift/Core/MetricKit/SentryMXCallStackTree.swift @@ -5,10 +5,10 @@ import Foundation * JSON specification of MXCallStackTree can be found here https://developer.apple.com/documentation/metrickit/mxcallstacktree/3552293-jsonrepresentation */ @objcMembers -class SentryMXCallStackTree: NSObject, Codable { +@_spi(Private) public class SentryMXCallStackTree: NSObject, Codable { - let callStacks: [SentryMXCallStack] - let callStackPerThread: Bool + public let callStacks: [SentryMXCallStack] + public let callStackPerThread: Bool init(callStacks: [SentryMXCallStack], callStackPerThread: Bool) { self.callStacks = callStacks @@ -21,11 +21,11 @@ class SentryMXCallStackTree: NSObject, Codable { } @objcMembers -class SentryMXCallStack: NSObject, Codable { - var threadAttributed: Bool? - var callStackRootFrames: [SentryMXFrame] +@_spi(Private) public class SentryMXCallStack: NSObject, Codable { + public var threadAttributed: Bool? + public var callStackRootFrames: [SentryMXFrame] - var flattenedRootFrames: [SentryMXFrame] { + public var flattenedRootFrames: [SentryMXFrame] { return callStackRootFrames.flatMap { [$0] + $0.frames } } @@ -36,14 +36,14 @@ class SentryMXCallStack: NSObject, Codable { } @objcMembers -class SentryMXFrame: NSObject, Codable { - var binaryUUID: UUID - var offsetIntoBinaryTextSegment: Int - var binaryName: String? - var address: UInt64 - var subFrames: [SentryMXFrame]? +@_spi(Private) public class SentryMXFrame: NSObject, Codable { + public var binaryUUID: UUID + public var offsetIntoBinaryTextSegment: Int + public var binaryName: String? + public var address: UInt64 + public var subFrames: [SentryMXFrame]? - var sampleCount: Int? + public var sampleCount: Int? init(binaryUUID: UUID, offsetIntoBinaryTextSegment: Int, sampleCount: Int? = nil, binaryName: String? = nil, address: UInt64, subFrames: [SentryMXFrame]?) { self.binaryUUID = binaryUUID diff --git a/Pods/Sentry/Sources/Swift/MetricKit/SentryMXManager.swift b/Pods/Sentry/Sources/Swift/Core/MetricKit/SentryMXManager.swift similarity index 92% rename from Pods/Sentry/Sources/Swift/MetricKit/SentryMXManager.swift rename to Pods/Sentry/Sources/Swift/Core/MetricKit/SentryMXManager.swift index 9bf449f04..58cbb915d 100644 --- a/Pods/Sentry/Sources/Swift/MetricKit/SentryMXManager.swift +++ b/Pods/Sentry/Sources/Swift/Core/MetricKit/SentryMXManager.swift @@ -12,7 +12,7 @@ import MetricKit @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) -@objc protocol SentryMXManagerDelegate { +@objc @_spi(Private) public protocol SentryMXManagerDelegate { func didReceiveCrashDiagnostic(_ diagnostic: MXCrashDiagnostic, callStackTree: SentryMXCallStackTree, timeStampBegin: Date, timeStampEnd: Date) @@ -26,7 +26,7 @@ import MetricKit @available(iOS 15.0, macOS 12.0, macCatalyst 15.0, *) @available(tvOS, unavailable) @available(watchOS, unavailable) -@objcMembers class SentryMXManager: NSObject, MXMetricManagerSubscriber { +@objcMembers @_spi(Private) public class SentryMXManager: NSObject, MXMetricManagerSubscriber { let disableCrashDiagnostics: Bool @@ -36,17 +36,17 @@ import MetricKit weak var delegate: SentryMXManagerDelegate? - func receiveReports() { + public func receiveReports() { let shared = MXMetricManager.shared shared.add(self) } - func pauseReports() { + public func pauseReports() { let shared = MXMetricManager.shared shared.remove(self) } - func didReceive(_ payloads: [MXDiagnosticPayload]) { + public func didReceive(_ payloads: [MXDiagnosticPayload]) { func actOn(callStackTree: MXCallStackTree, action: (SentryMXCallStackTree) -> Void) { guard let callStackTree = try? SentryMXCallStackTree.from(data: callStackTree.jsonRepresentation()) else { return diff --git a/Pods/Sentry/Sources/Swift/Protocol/SentryId.swift b/Pods/Sentry/Sources/Swift/Core/Protocol/SentryId.swift similarity index 95% rename from Pods/Sentry/Sources/Swift/Protocol/SentryId.swift rename to Pods/Sentry/Sources/Swift/Core/Protocol/SentryId.swift index 48ebc2586..54de1d2da 100644 --- a/Pods/Sentry/Sources/Swift/Protocol/SentryId.swift +++ b/Pods/Sentry/Sources/Swift/Core/Protocol/SentryId.swift @@ -1,12 +1,12 @@ import Foundation @objcMembers -public class SentryId: NSObject { +final public class SentryId: NSObject, Sendable { /** * A @c SentryId with an empty UUID "00000000000000000000000000000000". */ - public static var empty = SentryId(uuidString: "00000000-0000-0000-0000-000000000000") + public static let empty = SentryId(uuidString: "00000000-0000-0000-0000-000000000000") /** * Returns a 32 lowercase character hexadecimal string description of the @c SentryId, such as diff --git a/Pods/Sentry/Sources/Swift/Core/Protocol/SentryRedactOptions.swift b/Pods/Sentry/Sources/Swift/Core/Protocol/SentryRedactOptions.swift new file mode 100644 index 000000000..01ba4dd32 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Protocol/SentryRedactOptions.swift @@ -0,0 +1,17 @@ +import Foundation + +@objc +public protocol SentryRedactOptions { + var maskAllText: Bool { get } + var maskAllImages: Bool { get } + var maskedViewClasses: [AnyClass] { get } + var unmaskedViewClasses: [AnyClass] { get } +} + +@objcMembers +final class SentryRedactDefaultOptions: NSObject, SentryRedactOptions { + var maskAllText: Bool = true + var maskAllImages: Bool = true + var maskedViewClasses: [AnyClass] = [] + var unmaskedViewClasses: [AnyClass] = [] +} diff --git a/Pods/Sentry/Sources/Swift/Core/Protocol/SentryViewControllerBreadcrumbTracking.swift b/Pods/Sentry/Sources/Swift/Core/Protocol/SentryViewControllerBreadcrumbTracking.swift new file mode 100644 index 000000000..4233efa57 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Protocol/SentryViewControllerBreadcrumbTracking.swift @@ -0,0 +1,14 @@ +import Foundation + +/// +/// Use this protocol to customize the name used in the automatic +/// UIViewController performance tracker, view hierarchy, and breadcrumbs. +/// +@objc +public protocol SentryUIViewControllerDescriptor: NSObjectProtocol { + + /// The custom name of the UIViewController + /// that the Sentry SDK uses for transaction names, breadcrumbs, and + /// view hierarchy. + var sentryName: String { get } +} diff --git a/Pods/Sentry/Sources/Swift/Core/SentryExperimentalOptions.swift b/Pods/Sentry/Sources/Swift/Core/SentryExperimentalOptions.swift new file mode 100644 index 000000000..59b3ed397 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/SentryExperimentalOptions.swift @@ -0,0 +1,26 @@ +import Foundation + +@objcMembers +public class SentryExperimentalOptions: NSObject { + /** + * Enables swizzling of`NSData` to automatically track file operations. + * + * - Note: Swizzling is enabled by setting ``SentryOptions.enableSwizzling`` to `true`. + * This option allows you to disable swizzling for `NSData` only, while keeping swizzling enabled for other classes. + * This is useful if you want to use manual tracing for file operations. + */ + public var enableDataSwizzling = true + + /** + * Enables swizzling of`NSFileManager` to automatically track file operations. + * + * - Note: Swizzling is enabled by setting ``SentryOptions.enableSwizzling`` to `true`. + * This option allows you to disable swizzling for `NSFileManager` only, while keeping swizzling enabled for other classes. + * This is useful if you want to use manual tracing for file operations. + * - Experiment: This is an experimental feature and is therefore disabled by default. We'll enable it by default in a future release. + */ + public var enableFileManagerSwizzling = false + + func validateOptions(_ options: [String: Any]?) { + } +} diff --git a/Pods/Sentry/Sources/Swift/Core/SwiftDescriptor.swift b/Pods/Sentry/Sources/Swift/Core/SwiftDescriptor.swift new file mode 100644 index 000000000..17f8af833 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/SwiftDescriptor.swift @@ -0,0 +1,30 @@ +import Foundation + +#if canImport(UIKit) && !SENTRY_NO_UIKIT +import UIKit +#endif + +@objc +@_spi(Private) public class SwiftDescriptor: NSObject { + + @objc + public static func getObjectClassName(_ object: AnyObject) -> String { + return String(describing: type(of: object)) + } + + /// UIViewControllers aren't available on watchOS +#if canImport(UIKit) && !os(watchOS) && !SENTRY_NO_UIKIT + @objc + public static func getViewControllerClassName(_ object: UIViewController) -> String { + if let object = object as? SentryUIViewControllerDescriptor { + return object.sentryName + } + return getObjectClassName(object) + } +#endif + + @objc + public static func getSwiftErrorDescription(_ error: Error) -> String? { + return String(describing: error) + } +} diff --git a/Pods/Sentry/Sources/Swift/Tools/HTTPHeaderSanitizer.swift b/Pods/Sentry/Sources/Swift/Core/Tools/HTTPHeaderSanitizer.swift similarity index 72% rename from Pods/Sentry/Sources/Swift/Tools/HTTPHeaderSanitizer.swift rename to Pods/Sentry/Sources/Swift/Core/Tools/HTTPHeaderSanitizer.swift index b78a96b0d..5d9b99d95 100644 --- a/Pods/Sentry/Sources/Swift/Tools/HTTPHeaderSanitizer.swift +++ b/Pods/Sentry/Sources/Swift/Core/Tools/HTTPHeaderSanitizer.swift @@ -1,8 +1,8 @@ import Foundation @objcMembers -class HTTPHeaderSanitizer: NSObject { - static func sanitizeHeaders(_ headers: [String: String]) -> [String: String] { +@_spi(Private) public class HTTPHeaderSanitizer: NSObject { + public static func sanitizeHeaders(_ headers: [String: String]) -> [String: String] { let _securityHeaders = Set([ "X-FORWARDED-FOR", "AUTHORIZATION", "COOKIE", "SET-COOKIE", "X-API-KEY", "X-REAL-IP", "REMOTE-ADDR", "FORWARDED", "PROXY-AUTHORIZATION", "X-CSRF-TOKEN", "X-CSRFTOKEN", diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/SentryLog.swift b/Pods/Sentry/Sources/Swift/Core/Tools/SentryLog.swift new file mode 100644 index 000000000..a251536e4 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/SentryLog.swift @@ -0,0 +1,102 @@ +import Foundation + +/// 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. +@objc +@_spi(Private) public class SentryLog: NSObject { + + static private(set) var isDebug = true + static private(set) var diagnosticLevel = SentryLevel.error + + /** + * Threshold log level to always log, regardless of the current configuration + */ + static let alwaysLevel = SentryLevel.fatal + private static var logOutput = SentryLogOutput() + private static var dateProvider: SentryCurrentDateProvider = SentryDefaultCurrentDateProvider() + + static func _configure(_ isDebug: Bool, diagnosticLevel: SentryLevel) { + self.isDebug = isDebug + self.diagnosticLevel = diagnosticLevel + } + + @objc + public static func log(message: String, andLevel level: SentryLevel) { + guard willLog(atLevel: level) else { return } + + // We use the timeIntervalSinceReferenceDate because date format is + // expensive and we only care about the time difference between the + // log messages. We don't use system uptime because of privacy concerns + // see: NSPrivacyAccessedAPICategorySystemBootTime. + let time = self.dateProvider.date().timeIntervalSince1970 + logOutput.log("[Sentry] [\(level)] [timeIntervalSince1970:\(time)] \(message)") + } + + /** + * @return @c YES if the current logging configuration will log statements at the current level, + * @c NO if not. + */ + @objc + public static func willLog(atLevel level: SentryLevel) -> Bool { + if level == .none { + return false + } + if level.rawValue >= alwaysLevel.rawValue { + return true + } + return isDebug && level.rawValue >= diagnosticLevel.rawValue + } + + #if SENTRY_TEST || SENTRY_TEST_CI + + static func setOutput(_ output: SentryLogOutput) { + logOutput = output + } + + static func getOutput() -> SentryLogOutput { + return logOutput + } + + static func setDateProvider(_ dateProvider: SentryCurrentDateProvider) { + self.dateProvider = dateProvider + } + + #endif +} + +extension SentryLog { + private static func log(level: SentryLevel, message: String, file: String, line: Int) { + guard willLog(atLevel: level) else { return } + let path = file as NSString + let fileName = (path.lastPathComponent as NSString).deletingPathExtension + log(message: "[\(fileName):\(line)] \(message)", andLevel: level) + } + + static func debug(_ message: String, file: String = #file, line: Int = #line) { + log(level: .debug, message: message, file: file, line: line) + } + + static func info(_ message: String, file: String = #file, line: Int = #line) { + log(level: .info, message: message, file: file, line: line) + } + + static func warning(_ message: String, file: String = #file, line: Int = #line) { + log(level: .warning, message: message, file: file, line: line) + } + + static func error(_ message: String, file: String = #file, line: Int = #line) { + log(level: .error, message: message, file: file, line: line) + } + + static func fatal(_ message: String, file: String = #file, line: Int = #line) { + log(level: .fatal, message: message, file: file, line: line) + } +} diff --git a/Pods/Sentry/Sources/Swift/Tools/SentryLogOutput.swift b/Pods/Sentry/Sources/Swift/Core/Tools/SentryLogOutput.swift similarity index 100% rename from Pods/Sentry/Sources/Swift/Tools/SentryLogOutput.swift rename to Pods/Sentry/Sources/Swift/Core/Tools/SentryLogOutput.swift diff --git a/Pods/Sentry/Sources/Swift/Tools/UIImageHelper.swift b/Pods/Sentry/Sources/Swift/Core/Tools/UIImageHelper.swift similarity index 95% rename from Pods/Sentry/Sources/Swift/Tools/UIImageHelper.swift rename to Pods/Sentry/Sources/Swift/Core/Tools/UIImageHelper.swift index f53a95995..ade6c427a 100644 --- a/Pods/Sentry/Sources/Swift/Tools/UIImageHelper.swift +++ b/Pods/Sentry/Sources/Swift/Core/Tools/UIImageHelper.swift @@ -20,14 +20,13 @@ final class UIImageHelper { context.draw(croppedImage, in: CGRect(x: 0, y: 0, width: 1, height: 1)) guard let pixelBuffer = context.data else { return .black } - let data = pixelBuffer.bindMemory(to: UInt8.self, capacity: 4) + let data = pixelBuffer.bindMemory(to: UInt8.self, capacity: 3) let blue = CGFloat(data[0]) / 255.0 let green = CGFloat(data[1]) / 255.0 let red = CGFloat(data[2]) / 255.0 - let alpha = CGFloat(data[3]) / 255.0 - return UIColor(red: red, green: green, blue: blue, alpha: alpha) + return UIColor(red: red, green: green, blue: blue, alpha: 1) } } diff --git a/Pods/Sentry/Sources/Swift/Tools/URLSessionTaskHelper.swift b/Pods/Sentry/Sources/Swift/Core/Tools/URLSessionTaskHelper.swift similarity index 77% rename from Pods/Sentry/Sources/Swift/Tools/URLSessionTaskHelper.swift rename to Pods/Sentry/Sources/Swift/Core/Tools/URLSessionTaskHelper.swift index 6018e1df7..9217dae65 100644 --- a/Pods/Sentry/Sources/Swift/Tools/URLSessionTaskHelper.swift +++ b/Pods/Sentry/Sources/Swift/Core/Tools/URLSessionTaskHelper.swift @@ -1,9 +1,9 @@ import Foundation @objcMembers -class URLSessionTaskHelper: NSObject { +@_spi(Private) public class URLSessionTaskHelper: NSObject { - static func getGraphQLOperationName(from task: URLSessionTask?) -> String? { + public static func getGraphQLOperationName(from task: URLSessionTask?) -> String? { guard let task = task else { return nil } guard task.originalRequest?.value(forHTTPHeaderField: "Content-Type") == "application/json" else { return nil } guard let requestBody = task.originalRequest?.httpBody else { return nil } diff --git a/Pods/Sentry/Sources/Swift/Tools/UrlSanitized.swift b/Pods/Sentry/Sources/Swift/Core/Tools/UrlSanitized.swift similarity index 70% rename from Pods/Sentry/Sources/Swift/Tools/UrlSanitized.swift rename to Pods/Sentry/Sources/Swift/Core/Tools/UrlSanitized.swift index 705ebe68b..f821cbe91 100644 --- a/Pods/Sentry/Sources/Swift/Tools/UrlSanitized.swift +++ b/Pods/Sentry/Sources/Swift/Core/Tools/UrlSanitized.swift @@ -1,15 +1,15 @@ import Foundation @objcMembers -class UrlSanitized: NSObject { +@_spi(Private) public class UrlSanitized: NSObject { static let SENSITIVE_DATA_SUBSTITUTE = "[Filtered]" private var components: URLComponents? - var query: String? { components?.query } - var queryItems: [URLQueryItem]? { components?.queryItems } - var fragment: String? { components?.fragment } + public var query: String? { components?.query } + public var queryItems: [URLQueryItem]? { components?.queryItems } + public var fragment: String? { components?.fragment } - init(URL url: URL) { + public init(URL url: URL) { components = URLComponents(url: url, resolvingAgainstBaseURL: false) if components?.user != nil { @@ -21,7 +21,7 @@ class UrlSanitized: NSObject { } } - var sanitizedUrl: String? { + public var sanitizedUrl: String? { guard var result = self.components?.string else { return nil } if let end = result.firstIndex(of: "?") ?? result.firstIndex(of: "#") { result = String(result[result.startIndex.. UIImage { + let image = UIGraphicsImageRenderer(size: size, format: .init(for: .init(displayScale: 1))).image { context in + applyMasking(to: context, image: image, size: size, masking: masking) + } + return image + } + + func applyMasking( + to context: SentryMaskRendererContext, + image: UIImage, + size: CGSize, + masking: [RedactRegion] + ) { + let clipOutPath = CGMutablePath(rect: CGRect(origin: .zero, size: size), transform: nil) + var clipPaths = [CGPath]() + + let imageRect = CGRect(origin: .zero, size: size) + context.cgContext.addRect(CGRect(origin: CGPoint.zero, size: size)) + context.cgContext.clip(using: .evenOdd) + + context.cgContext.interpolationQuality = .none + image.draw(at: .zero) + + var latestRegion: RedactRegion? + for region in masking { + let rect = CGRect(origin: CGPoint.zero, size: region.size) + var transform = region.transform + let path = CGPath(rect: rect, transform: &transform) + + defer { latestRegion = region } + + switch region.type { + case .redact, .redactSwiftUI: + // This early return is to avoid masking the same exact area in row, + // something that is very common in SwiftUI and can impact performance. + guard latestRegion?.canReplace(as: region) != true && imageRect.intersects(path.boundingBoxOfPath) else { continue } + (region.color ?? UIImageHelper.averageColor(of: context.currentImage, at: rect.applying(region.transform))).setFill() + context.cgContext.addPath(path) + context.cgContext.fillPath() + case .clipOut: + clipOutPath.addPath(path) + self.updateClipping(for: context.cgContext, + clipPaths: clipPaths, + clipOutPath: clipOutPath) + case .clipBegin: + clipPaths.append(path) + self.updateClipping(for: context.cgContext, + clipPaths: clipPaths, + clipOutPath: clipOutPath) + case .clipEnd: + if !clipPaths.isEmpty { + clipPaths.removeLast() + } + self.updateClipping(for: context.cgContext, + clipPaths: clipPaths, + clipOutPath: clipOutPath) + } + } + } + + private func updateClipping(for context: CGContext, clipPaths: [CGPath], clipOutPath: CGPath) { + context.resetClip() + clipPaths.reversed().forEach { + context.addPath($0) + context.clip() + } + + context.addPath(clipOutPath) + context.clip(using: .evenOdd) + } +} + +// Implement the SentryMaskRendererContext protocol for UIGraphicsImageRendererContext to make it replaceable +extension UIGraphicsImageRendererContext: SentryMaskRendererContext {} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryDefaultViewRenderer.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryDefaultViewRenderer.swift new file mode 100644 index 000000000..dd9021961 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryDefaultViewRenderer.swift @@ -0,0 +1,17 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) + +import UIKit + +@objcMembers +class SentryDefaultViewRenderer: NSObject, SentryViewRenderer { + func render(view: UIView) -> UIImage { + let image = UIGraphicsImageRenderer(size: view.bounds.size).image { _ in + view.drawHierarchy(in: view.bounds, afterScreenUpdates: false) + } + return image + } +} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryGraphicsImageRenderer.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryGraphicsImageRenderer.swift new file mode 100644 index 000000000..18617ebd7 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryGraphicsImageRenderer.swift @@ -0,0 +1,93 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) + +import UIKit + +/** + * Class similar to the ``UIKit/UIGraphicsImageRenderer`` class, but optimized for Sentry. + * + * We introduced this class, because the ``UIGraphicsImageRenderer`` caused performance issues due to internal caching mechanisms mentioned in the + * [Apple Developer Documentation](https://developer.apple.com/documentation/uikit/uigraphicsimagerenderer) in the last paragraph of + * the section _Overview_: + * + * > An image renderer keeps a cache of Core Graphics contexts, so reusing the same renderer can be more efficient than creating new renderers. + * + * During testing we noticed a significant performance improvement by creating the bitmap context directly using ``CoreGraphics/CGContext``. + */ +class SentryGraphicsImageRenderer { + struct Context { + let cgContext: CGContext + let scale: CGFloat + + /// Converts the current context into an image. + /// + /// - Returns: The image representation of the current context. + /// - Remark: To reduce error-handling and potential issues, the image is always returned but can be empty. + var currentImage: UIImage { + guard let cgImage = cgContext.makeImage() else { + SentryLog.fatal("Unable to create image from graphics context") + return UIImage() + } + return UIImage(cgImage: cgImage, scale: scale, orientation: .up) + } + } + + let size: CGSize + let scale: CGFloat + + init(size: CGSize, scale: CGFloat) { + self.size = size + self.scale = scale + } + + func image(actions: (Context) -> Void) -> UIImage { + let colorSpace = CGColorSpaceCreateDeviceRGB() + let pixelsPerRow = Int(size.width * scale) + let pixelsPerColumn = Int(size.height * scale) + let bytesPerPixel = 4 // 4 bytes for RGBA + let bytesPerRow = bytesPerPixel * pixelsPerRow + let bitsPerComponent = 8 // 8 bits for each of RGB component + + // Allocate memory for raw image data and initializes every byte in the allocated memory to 0. + guard let rawData = calloc(pixelsPerColumn * bytesPerRow, MemoryLayout.size) else { + SentryLog.error("Unable to allocate memory for image data") + return UIImage() + } + defer { + free(rawData) // Release the memory when done + } + + guard let context = CGContext( + data: rawData, + width: pixelsPerRow, + height: pixelsPerColumn, + bitsPerComponent: bitsPerComponent, + bytesPerRow: bytesPerRow, + space: colorSpace, + bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue + ) else { + SentryLog.error("Unable to create context") + return UIImage() + } + + // UIKit coordinate system is flipped, so we need to shift and scale the context + // to match the CoreGraphics coordinate system. + context.translateBy(x: 0, y: size.height * scale) + context.scaleBy(x: scale, y: -1 * scale) + + // Pushing context will make the context the current main context + // and all the drawing operations will be performed on this context. + // This is necessary for the view to be drawn on the context. + // After drawing the view, we need to pop the context to make the original + // context the current main context. + UIGraphicsPushContext(context) + let rendererContext = Context(cgContext: context, scale: scale) + actions(rendererContext) + UIGraphicsPopContext() + + return rendererContext.currentImage + } +} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRenderer.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRenderer.swift new file mode 100644 index 000000000..3b202c2f0 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRenderer.swift @@ -0,0 +1,16 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) + +import UIKit + +protocol SentryMaskRenderer { + func maskScreenshot(screenshot image: UIImage, size: CGSize, masking: [RedactRegion]) -> UIImage +} + +protocol SentryMaskRendererContext { + var cgContext: CGContext { get } + var currentImage: UIImage { get } +} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRendererV2.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRendererV2.swift new file mode 100644 index 000000000..f439f2bd5 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryMaskRendererV2.swift @@ -0,0 +1,21 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) + +import UIKit + +class SentryMaskRendererV2: SentryDefaultMaskRenderer { + override func maskScreenshot(screenshot image: UIImage, size: CGSize, masking: [RedactRegion]) -> UIImage { + // The `SentryDefaultMaskRenderer` is also using an display scale of 1, therefore we also use 1 here. + // This could be evaluated in future iterations to view performance impact vs quality. + let image = SentryGraphicsImageRenderer(size: size, scale: 1).image { context in + // The experimental mask renderer only uses a different graphics renderer and can reuse the default masking logic. + applyMasking(to: context, image: image, size: size, masking: masking) + } + return image + } +} + +extension SentryGraphicsImageRenderer.Context: SentryMaskRendererContext {} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewPhotographer.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewPhotographer.swift new file mode 100644 index 000000000..57dc9b84b --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewPhotographer.swift @@ -0,0 +1,90 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) + +@_implementationOnly import _SentryPrivate +import CoreGraphics +import Foundation +import UIKit + +@objcMembers +class SentryViewPhotographer: NSObject, SentryViewScreenshotProvider { + private let redactBuilder: UIRedactBuilder + private let maskRenderer: SentryMaskRenderer + private let dispatchQueue = SentryDispatchQueueWrapper() + + var renderer: SentryViewRenderer + + /// Creates a view photographer used to convert a view hierarchy to an image. + /// + /// - Parameters: + /// - renderer: Implementation of the view renderer. + /// - redactOptions: Options provided to redact sensitive information. + /// - enableMaskRendererV2: Flag to enable experimental view renderer. + /// - Note: The option `enableMaskRendererV2` is an internal flag, which is not part of the public API. + /// Therefore, it is not part of the the `redactOptions` parameter, to not further expose it. + init( + renderer: SentryViewRenderer, + redactOptions: SentryRedactOptions, + enableMaskRendererV2: Bool + ) { + self.renderer = renderer + self.maskRenderer = enableMaskRendererV2 ? SentryMaskRendererV2() : SentryDefaultMaskRenderer() + redactBuilder = UIRedactBuilder(options: redactOptions) + super.init() + } + + func image(view: UIView, onComplete: @escaping ScreenshotCallback) { + let viewSize = view.bounds.size + let redact = redactBuilder.redactRegionsFor(view: view) + // The render method is synchronous and must be called on the main thread. + // This is because the render method accesses the view hierarchy which is managed from the main thread. + let renderedScreenshot = renderer.render(view: view) + + dispatchQueue.dispatchAsync { [maskRenderer] in + // The mask renderer does not need to be on the main thread. + // Moving it to a background thread to avoid blocking the main thread, therefore reducing the performance + // impact/lag of the user interface. + let maskedScreenshot = maskRenderer.maskScreenshot(screenshot: renderedScreenshot, size: viewSize, masking: redact) + onComplete(maskedScreenshot) + } + } + + func image(view: UIView) -> UIImage { + let viewSize = view.bounds.size + let redact = redactBuilder.redactRegionsFor(view: view) + let renderedScreenshot = renderer.render(view: view) + let maskedScreenshot = maskRenderer.maskScreenshot(screenshot: renderedScreenshot, size: viewSize, masking: redact) + + return maskedScreenshot + } + + @objc(addIgnoreClasses:) + func addIgnoreClasses(classes: [AnyClass]) { + redactBuilder.addIgnoreClasses(classes) + } + + @objc(addRedactClasses:) + func addRedactClasses(classes: [AnyClass]) { + redactBuilder.addRedactClasses(classes) + } + + @objc(setIgnoreContainerClass:) + func setIgnoreContainerClass(_ containerClass: AnyClass) { + redactBuilder.setIgnoreContainerClass(containerClass) + } + + @objc(setRedactContainerClass:) + func setRedactContainerClass(_ containerClass: AnyClass) { + redactBuilder.setRedactContainerClass(containerClass) + } + +#if SENTRY_TEST || SENTRY_TEST_CI + func getRedactBuild() -> UIRedactBuilder { + redactBuilder + } +#endif + +} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRenderer.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRenderer.swift new file mode 100644 index 000000000..dd66af070 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRenderer.swift @@ -0,0 +1,11 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) + +import UIKit + +@objc protocol SentryViewRenderer { + func render(view: UIView) -> UIImage +} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRendererV2.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRendererV2.swift new file mode 100644 index 000000000..6263493e4 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewRendererV2.swift @@ -0,0 +1,28 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) + +import UIKit + +@objcMembers +class SentryViewRendererV2: NSObject, SentryViewRenderer { + let enableFastViewRendering: Bool + + init(enableFastViewRendering: Bool) { + self.enableFastViewRendering = enableFastViewRendering + } + + func render(view: UIView) -> UIImage { + let scale = (view as? UIWindow ?? view.window)?.screen.scale ?? 1 + let image = SentryGraphicsImageRenderer(size: view.bounds.size, scale: scale).image { context in + if enableFastViewRendering { + view.layer.draw(in: context.cgContext) + } else { + view.drawHierarchy(in: view.bounds, afterScreenUpdates: false) + } + } + return image + } +} + +#endif // os(iOS) || os(tvOS) +#endif // canImport(UIKit) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Tools/SentryViewScreenshotProvider.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewScreenshotProvider.swift similarity index 69% rename from Pods/Sentry/Sources/Swift/Tools/SentryViewScreenshotProvider.swift rename to Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewScreenshotProvider.swift index 7fc012dee..0b99bc1bf 100644 --- a/Pods/Sentry/Sources/Swift/Tools/SentryViewScreenshotProvider.swift +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/SentryViewScreenshotProvider.swift @@ -7,7 +7,7 @@ typealias ScreenshotCallback = (UIImage) -> Void @objc protocol SentryViewScreenshotProvider: NSObjectProtocol { - func image(view: UIView, options: SentryRedactOptions, onComplete: @escaping ScreenshotCallback) + func image(view: UIView, onComplete: @escaping ScreenshotCallback) } #endif #endif diff --git a/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/UIRedactBuilder.swift b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/UIRedactBuilder.swift new file mode 100644 index 000000000..2e1745768 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Core/Tools/ViewCapture/UIRedactBuilder.swift @@ -0,0 +1,367 @@ +#if canImport(UIKit) && !SENTRY_NO_UIKIT +#if os(iOS) || os(tvOS) +import Foundation +import ObjectiveC.NSObjCRuntime +import UIKit +#if os(iOS) +import WebKit +#endif + +enum RedactRegionType { + /// Redacts the region. + case redact + + /// Marks a region to not draw anything. + /// This is used for opaque views. + case clipOut + + /// Push a clip region to the drawing context. + /// This is used for views that clip to its bounds. + case clipBegin + + /// Pop the last Pushed region from the drawing context. + /// Used after prossing every child of a view that clip to its bounds. + case clipEnd + + /// These regions are redacted first, there is no way to avoid it. + case redactSwiftUI +} + +struct RedactRegion { + let size: CGSize + let transform: CGAffineTransform + let type: RedactRegionType + let color: UIColor? + + init(size: CGSize, transform: CGAffineTransform, type: RedactRegionType, color: UIColor? = nil) { + self.size = size + self.transform = transform + self.type = type + self.color = color + } + + func canReplace(as other: RedactRegion) -> Bool { + size == other.size && transform == other.transform && type == other.type + } +} + +class UIRedactBuilder { + ///This is a wrapper which marks it's direct children to be ignored + private var ignoreContainerClassIdentifier: ObjectIdentifier? + ///This is a wrapper which marks it's direct children to be redacted + private var redactContainerClassIdentifier: ObjectIdentifier? + + ///This is a list of UIView subclasses that will be ignored during redact process + private var ignoreClassesIdentifiers: Set + ///This is a list of UIView subclasses that need to be redacted from screenshot + private var redactClassesIdentifiers: Set + + /** + Initializes a new instance of the redaction process with the specified options. + + This initializer configures which `UIView` subclasses should be redacted from screenshots and which should be ignored during the redaction process. + + - parameter options: A `SentryRedactOptions` object that specifies the configuration for the redaction process. + + - If `options.maskAllText` is `true`, common text-related views such as `UILabel`, `UITextView`, and `UITextField` are redacted. + - If `options.maskAllImages` is `true`, common image-related views such as `UIImageView` and various internal `SwiftUI` image views are redacted. + - The `options.unmaskViewTypes` allows specifying custom view types to be ignored during the redaction process. + - The `options.maskViewTypes` allows specifying additional custom view types to be redacted. + + - note: On iOS, views such as `WKWebView` and `UIWebView` are automatically redacted, and controls like `UISlider` and `UISwitch` are ignored. + */ + init(options: SentryRedactOptions) { + var redactClasses = [AnyClass]() + + if options.maskAllText { + redactClasses += [ UILabel.self, UITextView.self, UITextField.self ] + // These classes are used by React Native to display text. + // We are including them here to avoid leaking text from RN apps with manually initialized sentry-cocoa. + redactClasses += ["RCTTextView", "RCTParagraphComponentView"].compactMap(NSClassFromString(_:)) + } + + if options.maskAllImages { + //this classes are used by SwiftUI to display images. + redactClasses += ["_TtCOCV7SwiftUI11DisplayList11ViewUpdater8Platform13CGDrawingView", + "_TtC7SwiftUIP33_A34643117F00277B93DEBAB70EC0697122_UIShapeHitTestingView", + "SwiftUI._UIGraphicsView", "SwiftUI.ImageLayer" + ].compactMap(NSClassFromString(_:)) + + // These classes are used by React Native to display images/vectors. + // We are including them here to avoid leaking images from RN apps with manually initialized sentry-cocoa. + redactClasses += ["RCTImageView"].compactMap(NSClassFromString(_:)) + + redactClasses.append(UIImageView.self) + } + +#if os(iOS) + redactClasses += [ WKWebView.self ] + + //If we try to use 'UIWebView.self' it will not compile for macCatalyst, but the class does exists. + redactClasses += [ "UIWebView" ].compactMap(NSClassFromString(_:)) + + ignoreClassesIdentifiers = [ ObjectIdentifier(UISlider.self), ObjectIdentifier(UISwitch.self) ] +#else + ignoreClassesIdentifiers = [] +#endif + + redactClassesIdentifiers = Set(redactClasses.map({ ObjectIdentifier($0) })) + + for type in options.unmaskedViewClasses { + self.ignoreClassesIdentifiers.insert(ObjectIdentifier(type)) + } + + for type in options.maskedViewClasses { + self.redactClassesIdentifiers.insert(ObjectIdentifier(type)) + } + } + + func containsIgnoreClass(_ ignoreClass: AnyClass) -> Bool { + return ignoreClassesIdentifiers.contains(ObjectIdentifier(ignoreClass)) + } + + func containsRedactClass(_ redactClass: AnyClass) -> Bool { + var currentClass: AnyClass? = redactClass + while currentClass != nil && currentClass != UIView.self { + if let currentClass = currentClass, redactClassesIdentifiers.contains(ObjectIdentifier(currentClass)) { + return true + } + currentClass = currentClass?.superclass() + } + return false + } + + func addIgnoreClass(_ ignoreClass: AnyClass) { + ignoreClassesIdentifiers.insert(ObjectIdentifier(ignoreClass)) + } + + func addRedactClass(_ redactClass: AnyClass) { + redactClassesIdentifiers.insert(ObjectIdentifier(redactClass)) + } + + func addIgnoreClasses(_ ignoreClasses: [AnyClass]) { + ignoreClasses.forEach(addIgnoreClass(_:)) + } + + func addRedactClasses(_ redactClasses: [AnyClass]) { + redactClasses.forEach(addRedactClass(_:)) + } + + func setIgnoreContainerClass(_ containerClass: AnyClass) { + ignoreContainerClassIdentifier = ObjectIdentifier(containerClass) + } + + func setRedactContainerClass(_ containerClass: AnyClass) { + let id = ObjectIdentifier(containerClass) + redactContainerClassIdentifier = id + redactClassesIdentifiers.insert(id) + } + +#if SENTRY_TEST || SENTRY_TEST_CI + func isIgnoreContainerClassTestOnly(_ containerClass: AnyClass) -> Bool { + return isIgnoreContainerClass(containerClass) + } + + func isRedactContainerClassTestOnly(_ containerClass: AnyClass) -> Bool { + return isRedactContainerClass(containerClass) + } +#endif + + /** + This function identifies and returns the regions within a given UIView that need to be redacted, based on the specified redaction options. + + - Parameter view: The root UIView for which redaction regions are to be calculated. + - Parameter options: A `SentryRedactOptions` object specifying whether to redact all text (`maskAllText`) or all images (`maskAllImages`). If `options` is nil, defaults are used (redacting all text and images). + + - Returns: An array of `RedactRegion` objects representing areas of the view (and its subviews) that require redaction, based on the current visibility, opacity, and content (text or images). + + The method recursively traverses the view hierarchy, collecting redaction areas from the view and all its subviews. Each redaction area is calculated based on the view’s presentation layer, size, transformation matrix, and other attributes. + + The redaction process considers several key factors: + 1. **Text Redaction**: If `maskAllText` is set to true, regions containing text within the view or its subviews are marked for redaction. + 2. **Image Redaction**: If `maskAllImages` is set to true, image-containing regions are also marked for redaction. + 3. **Opaque View Handling**: If an opaque view covers the entire area, obfuscating views beneath it, those hidden views are excluded from processing, and we can remove them from the result. + 4. **Clip Area Creation**: If a smaller opaque view blocks another view, we create a clip area to avoid drawing a redact mask on top of a view that does not require redaction. + + This function returns the redaction regions in reverse order from what was found in the view hierarchy, allowing the processing of regions from top to bottom. This ensures that clip regions are applied first before drawing a redact mask on lower views. + */ + func redactRegionsFor(view: UIView) -> [RedactRegion] { + var redactingRegions = [RedactRegion]() + + self.mapRedactRegion(fromLayer: view.layer.presentation() ?? view.layer, + relativeTo: nil, + redacting: &redactingRegions, + rootFrame: view.frame, + transform: .identity) + + var swiftUIRedact = [RedactRegion]() + var otherRegions = [RedactRegion]() + + for region in redactingRegions { + if region.type == .redactSwiftUI { + swiftUIRedact.append(region) + } else { + otherRegions.append(region) + } + } + + //The swiftUI type needs to appear first in the list so it always get masked + return (otherRegions + swiftUIRedact).reversed() + } + + private func shouldIgnore(view: UIView) -> Bool { + return SentryRedactViewHelper.shouldUnmask(view) || containsIgnoreClass(type(of: view)) || shouldIgnoreParentContainer(view) + } + + private func shouldIgnoreParentContainer(_ view: UIView) -> Bool { + guard !isRedactContainerClass(type(of: view)), let parent = view.superview else { return false } + return isIgnoreContainerClass(type(of: parent)) + } + + private func isIgnoreContainerClass(_ containerClass: AnyClass) -> Bool { + guard ignoreContainerClassIdentifier != nil else { return false } + return ObjectIdentifier(containerClass) == ignoreContainerClassIdentifier + } + + private func isRedactContainerClass(_ containerClass: AnyClass) -> Bool { + guard redactContainerClassIdentifier != nil else { return false } + return ObjectIdentifier(containerClass) == redactContainerClassIdentifier + } + + private func shouldRedact(view: UIView) -> Bool { + if SentryRedactViewHelper.shouldMaskView(view) { + return true + } + if let imageView = view as? UIImageView, containsRedactClass(UIImageView.self) { + return shouldRedact(imageView: imageView) + } + return containsRedactClass(type(of: view)) + } + + private func shouldRedact(imageView: UIImageView) -> Bool { + // Checking the size is to avoid redact gradient background that + // are usually small lines repeating + guard let image = imageView.image, image.size.width > 10 && image.size.height > 10 else { return false } + return image.imageAsset?.value(forKey: "_containingBundle") == nil + } + + private func mapRedactRegion(fromLayer layer: CALayer, relativeTo parentLayer: CALayer?, redacting: inout [RedactRegion], rootFrame: CGRect, transform: CGAffineTransform, forceRedact: Bool = false) { + guard !redactClassesIdentifiers.isEmpty && !layer.isHidden && layer.opacity != 0, let view = layer.delegate as? UIView else { return } + + let newTransform = concatenateTranform(transform, from: layer, withParent: parentLayer) + + let ignore = !forceRedact && shouldIgnore(view: view) + let swiftUI = SentryRedactViewHelper.shouldRedactSwiftUI(view) + let redact = forceRedact || shouldRedact(view: view) || swiftUI + var enforceRedact = forceRedact + + if !ignore && redact { + redacting.append(RedactRegion(size: layer.bounds.size, transform: newTransform, type: swiftUI ? .redactSwiftUI : .redact, color: self.color(for: view))) + + guard !view.clipsToBounds else { return } + enforceRedact = true + } else if isOpaque(view) { + let finalViewFrame = CGRect(origin: .zero, size: layer.bounds.size).applying(newTransform) + if isAxisAligned(newTransform) && finalViewFrame == rootFrame { + //Because the current view is covering everything we found so far we can clear `redacting` list + redacting.removeAll() + } else { + redacting.append(RedactRegion(size: layer.bounds.size, transform: newTransform, type: .clipOut)) + } + } + + guard let subLayers = layer.sublayers, subLayers.count > 0 else { return } + let clipToBounds = view.clipsToBounds + if clipToBounds { + /// Because the order in which we process the redacted regions is reversed, we add the end of the clip region first. + /// The beginning will be added after all the subviews have been mapped. + redacting.append(RedactRegion(size: layer.bounds.size, transform: newTransform, type: .clipEnd)) + } + for subLayer in subLayers.sorted(by: { $0.zPosition < $1.zPosition }) { + mapRedactRegion(fromLayer: subLayer, relativeTo: layer, redacting: &redacting, rootFrame: rootFrame, transform: newTransform, forceRedact: enforceRedact) + } + if clipToBounds { + redacting.append(RedactRegion(size: layer.bounds.size, transform: newTransform, type: .clipBegin)) + } + } + + /** + Gets a transform that represents the layer global position. + */ + private func concatenateTranform(_ transform: CGAffineTransform, from layer: CALayer, withParent parentLayer: CALayer?) -> CGAffineTransform { + let size = layer.bounds.size + let anchorPoint = CGPoint(x: size.width * layer.anchorPoint.x, y: size.height * layer.anchorPoint.y) + let position = parentLayer?.convert(layer.position, to: nil) ?? layer.position + + var newTransform = transform + newTransform.tx = position.x + newTransform.ty = position.y + newTransform = CATransform3DGetAffineTransform(layer.transform).concatenating(newTransform) + return newTransform.translatedBy(x: -anchorPoint.x, y: -anchorPoint.y) + } + + /** + Whether the transform does not contains rotation or skew + */ + private func isAxisAligned(_ transform: CGAffineTransform) -> Bool { + // Rotation exists if b or c are not zero + return transform.b == 0 && transform.c == 0 + } + + private func color(for view: UIView) -> UIColor? { + return (view as? UILabel)?.textColor.withAlphaComponent(1) + } + + /** + Indicates whether the view is opaque and will block other view behind it + */ + private func isOpaque(_ view: UIView) -> Bool { + let layer = view.layer.presentation() ?? view.layer + return SentryRedactViewHelper.shouldClipOut(view) || (layer.opacity == 1 && view.backgroundColor != nil && (view.backgroundColor?.cgColor.alpha ?? 0) == 1) + } +} + +@objcMembers +public class SentryRedactViewHelper: NSObject { + private static var associatedRedactObjectHandle: UInt8 = 0 + private static var associatedIgnoreObjectHandle: UInt8 = 0 + private static var associatedClipOutObjectHandle: UInt8 = 0 + private static var associatedSwiftUIRedactObjectHandle: UInt8 = 0 + + override private init() {} + + static func maskView(_ view: UIView) { + objc_setAssociatedObject(view, &associatedRedactObjectHandle, true, .OBJC_ASSOCIATION_ASSIGN) + } + + static func shouldMaskView(_ view: UIView) -> Bool { + (objc_getAssociatedObject(view, &associatedRedactObjectHandle) as? NSNumber)?.boolValue ?? false + } + + static func shouldUnmask(_ view: UIView) -> Bool { + (objc_getAssociatedObject(view, &associatedIgnoreObjectHandle) as? NSNumber)?.boolValue ?? false + } + + static func unmaskView(_ view: UIView) { + objc_setAssociatedObject(view, &associatedIgnoreObjectHandle, true, .OBJC_ASSOCIATION_ASSIGN) + } + + static func shouldClipOut(_ view: UIView) -> Bool { + (objc_getAssociatedObject(view, &associatedClipOutObjectHandle) as? NSNumber)?.boolValue ?? false + } + + static public func clipOutView(_ view: UIView) { + objc_setAssociatedObject(view, &associatedClipOutObjectHandle, true, .OBJC_ASSOCIATION_ASSIGN) + } + + static func shouldRedactSwiftUI(_ view: UIView) -> Bool { + (objc_getAssociatedObject(view, &associatedSwiftUIRedactObjectHandle) as? NSNumber)?.boolValue ?? false + } + + static public func maskSwiftUI(_ view: UIView) { + objc_setAssociatedObject(view, &associatedSwiftUIRedactObjectHandle, true, .OBJC_ASSOCIATION_ASSIGN) + } +} + +#endif +#endif diff --git a/Pods/Sentry/Sources/Swift/Extensions/NSLock.swift b/Pods/Sentry/Sources/Swift/Extensions/NSLock.swift deleted file mode 100644 index c7d7b90c6..000000000 --- a/Pods/Sentry/Sources/Swift/Extensions/NSLock.swift +++ /dev/null @@ -1,15 +0,0 @@ -import Foundation - -extension NSLock { - - /// Executes the closure while acquiring the lock. - /// - /// - Parameter closure: The closure to run. - /// - /// - Returns: The value the closure generated. - func synchronized(_ closure: () throws -> T) rethrows -> T { - defer { self.unlock() } - self.lock() - return try closure() - } -} diff --git a/Pods/Sentry/Sources/Swift/Helper/SentryCurrentDateProvider.swift b/Pods/Sentry/Sources/Swift/Helper/SentryCurrentDateProvider.swift deleted file mode 100644 index 2b42c77ec..000000000 --- a/Pods/Sentry/Sources/Swift/Helper/SentryCurrentDateProvider.swift +++ /dev/null @@ -1,21 +0,0 @@ -@_implementationOnly import _SentryPrivate -import Foundation - -@objcMembers class SentryCurrentDateProvider: NSObject { - - func date() -> Date { - return Date() - } - - func timezoneOffset() -> Int { - return TimeZone.current.secondsFromGMT() - } - - func systemTime() -> UInt64 { - getAbsoluteTime() - } - - func systemUptime() -> TimeInterval { - ProcessInfo.processInfo.systemUptime - } -} diff --git a/Pods/Sentry/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift b/Pods/Sentry/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift index 288b43e53..1b20f9e48 100644 --- a/Pods/Sentry/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift +++ b/Pods/Sentry/Sources/Swift/Helper/SentryEnabledFeaturesBuilder.swift @@ -1,9 +1,12 @@ import Foundation -@objcMembers class SentryEnabledFeaturesBuilder: NSObject { - - static func getEnabledFeatures(options: Options) -> [String] { - +@objcMembers @_spi(Private) public class SentryEnabledFeaturesBuilder: NSObject { + + // swiftlint:disable cyclomatic_complexity function_body_length + public static func getEnabledFeatures(options: Options?) -> [String] { + guard let options = options else { + return [] + } var features: [String] = [] if options.enableCaptureFailedRequests { @@ -35,11 +38,34 @@ import Foundation if options.swiftAsyncStacktraces { features.append("swiftAsyncStacktraces") } - - if options.enableMetrics { - features.append("metrics") + +#if os(iOS) || os(tvOS) || targetEnvironment(macCatalyst) + if options.enableAppHangTrackingV2 { + features.append("appHangTrackingV2") } +#endif //os(iOS) || os(tvOS) || targetEnvironment(macCatalyst) + if options.enablePersistingTracesWhenCrashing { + features.append("persistingTracesWhenCrashing") + } + +#if (os(iOS) || os(tvOS)) && !SENTRY_NO_UIKIT + if options.sessionReplay.enableViewRendererV2 { + // We keep the old name for backwards compatibility of the telemetry data. + features.append("experimentalViewRenderer") + } + if options.sessionReplay.enableFastViewRendering { + features.append("fastViewRendering") + } +#endif // (os(iOS) || os(tvOS)) && !SENTRY_NO_UIKIT + + if options.experimental.enableDataSwizzling { + features.append("dataSwizzling") + } + if options.experimental.enableFileManagerSwizzling { + features.append("fileManagerSwizzling") + } return features } + // swiftlint:enable cyclomatic_complexity function_body_length } diff --git a/Pods/Sentry/Sources/Swift/Helper/SentryFileContents.swift b/Pods/Sentry/Sources/Swift/Helper/SentryFileContents.swift deleted file mode 100644 index 9778b4f5d..000000000 --- a/Pods/Sentry/Sources/Swift/Helper/SentryFileContents.swift +++ /dev/null @@ -1,13 +0,0 @@ -import Foundation - -@objcMembers -class SentryFileContents: NSObject { - - let path: String - let contents: Data - - init(path: String, contents: Data) { - self.path = path - self.contents = contents - } -} diff --git a/Pods/Sentry/Sources/Swift/Helper/SentryIconography.swift b/Pods/Sentry/Sources/Swift/Helper/SentryIconography.swift new file mode 100644 index 000000000..88cd4e475 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Helper/SentryIconography.swift @@ -0,0 +1,215 @@ +import CoreGraphics + +extension CGMutablePath { + func addSVGArc(startPoint: CGPoint, xyRadii: CGFloat, clockwise: Bool, endPoint: CGPoint) { + let midX: CGFloat = (startPoint.x + endPoint.x) / 2 + let midY: CGFloat = (startPoint.y + endPoint.y) / 2 + let d: CGFloat = sqrt(pow(endPoint.x - startPoint.x, 2) + pow(endPoint.y - startPoint.y, 2)) + let h: CGFloat = sqrt(pow(xyRadii, 2) - pow(d / 2, 2)) + let orientation: CGFloat = clockwise ? 1 : -1 + + let centerX = midX + orientation * h * (startPoint.y - endPoint.y) / d + let centerY = midY + orientation * h * (endPoint.x - startPoint.x) / d + let centerPoint = CGPoint(x: centerX, y: centerY) + + let startAngleAtan2X = startPoint.x - centerX + let startAngleAtan2Y = startPoint.y - centerY + let startAngle: CGFloat = atan2(startAngleAtan2Y, startAngleAtan2X) + + let endAngleAtan2X = endPoint.x - centerX + let endAngleAtan2Y = endPoint.y - centerY + let endAngle: CGFloat = atan2(endAngleAtan2Y, endAngleAtan2X) + + addArc(center: centerPoint, radius: xyRadii, startAngle: startAngle, endAngle: endAngle, clockwise: !clockwise) + } +} + +extension CGPoint { + func translated(x: CGFloat = 0, y: CGFloat = 0) -> CGPoint { + .init(x: self.x + x, y: self.y + y) + } +} + +struct SentryIconography { + static let logo = { + let path = CGMutablePath() + + // M29,2.26 + var point: CGPoint = .init(x: 29, y: 2.26) + path.move(to: point) + + // a4.67,4.67,0,0,0-8,0 + var endpoint: CGPoint = point.translated(x: -8) + path.addSVGArc(startPoint: point, xyRadii: 4.67, clockwise: false, endPoint: endpoint) + point = endpoint + + // L14.42,13.53 + endpoint = .init(x: 14.42, y: 13.53) + path.addLine(to: endpoint) + point = endpoint + + // A32.21,32.21,0,0,1,32.17,40.19 + endpoint = .init(x: 32.17, y: 40.19) + path.addSVGArc(startPoint: point, xyRadii: 32.21, clockwise: true, endPoint: endpoint) + point = endpoint + + // H27.55 + endpoint = .init(x: 27.55, y: point.y) + path.addLine(to: endpoint) + point = endpoint + + // A27.68,27.68,0,0,0,12.09,17.47 + endpoint = .init(x: 12.09, y: 17.47) + path.addSVGArc(startPoint: point, xyRadii: 27.68, clockwise: false, endPoint: endpoint) + point = endpoint + + // L6,28 + endpoint = CGPoint(x: 6, y: 28) + path.addLine(to: endpoint) + point = endpoint + + // a15.92,15.92,0,0,1,9.23,12.17 + endpoint = point.translated(x: 9.23, y: 12.17) + path.addSVGArc(startPoint: point, xyRadii: 15.92, clockwise: true, endPoint: endpoint) + point = endpoint + + // H4.62 + endpoint = .init(x: 4.62, y: point.y) + path.addLine(to: endpoint) + point = endpoint + + // A.76.76,0,0,1,4,39.06 + endpoint = .init(x: 4, y: 39.06) + path.addSVGArc(startPoint: point, xyRadii: 0.76, clockwise: true, endPoint: endpoint) + point = endpoint + + // l2.94-5 + endpoint = point.translated(x: 2.94, y: -5) + path.addLine(to: endpoint) + point = endpoint + + // a10.74,10.74,0,0,0-3.36-1.9 + endpoint = point.translated(x: -3.36, y: -1.9) + path.addSVGArc(startPoint: point, xyRadii: 10.74, clockwise: false, endPoint: endpoint) + point = endpoint + + // l-2.91,5 + endpoint = point.translated(x: -2.91, y: 5) + path.addLine(to: endpoint) + point = endpoint + + // a4.54,4.54,0,0,0,1.69,6.24 + endpoint = point.translated(x: 1.69, y: 6.24) + path.addSVGArc(startPoint: point, xyRadii: 4.54, clockwise: false, endPoint: endpoint) + point = endpoint + + // A4.66,4.66,0,0,0,4.62,44 + endpoint = .init(x: 4.62, y: 44) + path.addSVGArc(startPoint: point, xyRadii: 4.66, clockwise: false, endPoint: endpoint) + point = endpoint + + // H19.15 + endpoint = CGPoint(x: 19.15, y: point.y) + path.addLine(to: endpoint) + point = endpoint + + // a19.4,19.4,0,0,0-8-17.31 + endpoint = point.translated(x: -8, y: -17.31) + path.addSVGArc(startPoint: point, xyRadii: 19.4, clockwise: false, endPoint: endpoint) + point = endpoint + + // l2.31-4 + endpoint = point.translated(x: 2.31, y: -4) + path.addLine(to: endpoint) + point = endpoint + + // A23.87,23.87,0,0,1,23.76,44 + endpoint = .init(x: 23.76, y: 44) + path.addSVGArc(startPoint: point, xyRadii: 23.87, clockwise: true, endPoint: endpoint) + point = endpoint + + // H36.07 + endpoint = CGPoint(x: 36.07, y: point.y) + path.addLine(to: endpoint) + point = endpoint + + // a35.88,35.88,0,0,0-16.41-31.8 + endpoint = point.translated(x: -16.41, y: -31.8) + path.addSVGArc(startPoint: point, xyRadii: 35.88, clockwise: false, endPoint: endpoint) + point = endpoint + + // l4.67-8 + endpoint = point.translated(x: 4.67, y: -8) + path.addLine(to: endpoint) + point = endpoint + + // a.77.77,0,0,1,1.05-.27 + endpoint = point.translated(x: 1.05, y: -0.27) + path.addSVGArc(startPoint: point, xyRadii: 0.77, clockwise: true, endPoint: endpoint) + point = endpoint + + // c.53.29,20.29,34.77,20.66,35.17 + var c1 = point.translated(x: 0.53, y: 0.29) + var c2 = point.translated(x: 20.29, y: 34.77) + endpoint = point.translated(x: 20.66, y: 35.17) + path.addCurve(to: endpoint, control1: c1, control2: c2) + point = endpoint + + // a.76.76,0,0,1-.68,1.13 + endpoint = point.translated(x: -0.68, y: 1.13) + path.addSVGArc(startPoint: point, xyRadii: 0.76, clockwise: true, endPoint: endpoint) + point = endpoint + + // H40.6 + endpoint = CGPoint(x: 40.6, y: point.y) + path.addLine(to: endpoint) + point = endpoint + + // q.09,1.91,0,3.81 + c1 = .init(x: point.x + 0.09, y: point.y + 1.91) + endpoint = .init(x: point.x, y: point.y + 3.81) + path.addQuadCurve(to: endpoint, control: c1) + point = endpoint + + // h4.78 + endpoint = .init(x: point.x + 4.78, y: point.y) + path.addLine(to: endpoint) + point = endpoint + + // A4.59,4.59,0,0,0,50,39.43 + endpoint = .init(x: 50, y: 39.43) + path.addSVGArc(startPoint: point, xyRadii: 4.59, clockwise: false, endPoint: endpoint) + point = endpoint + + // a4.49,4.49,0,0,0-.62-2.28 + endpoint = point.translated(x: -0.62, y: -2.28) + path.addSVGArc(startPoint: point, xyRadii: 4.49, clockwise: false, endPoint: endpoint) + point = endpoint + + // Z + path.closeSubpath() + + return path + }() + + static let megaphone = { + let path = CGMutablePath() + + path.move(to: CGPoint(x: 1, y: 3)) + path.addLine(to: CGPoint(x: 7, y: 3)) + path.addLine(to: CGPoint(x: 10, y: 1)) + path.addLine(to: CGPoint(x: 12, y: 1)) + path.addLine(to: CGPoint(x: 12, y: 11)) + path.addLine(to: CGPoint(x: 10, y: 11)) + path.addLine(to: CGPoint(x: 7, y: 9)) + path.addLine(to: CGPoint(x: 1, y: 9)) + path.closeSubpath() + + path.addRect(CGRect(x: 2, y: 9, width: 3.5, height: 6)) + + path.move(to: CGPoint(x: 12, y: 6)) + path.addRelativeArc(center: CGPoint(x: 12, y: 6), radius: 3, startAngle: -(.pi / 2), delta: .pi) + + return path + }() +} diff --git a/Pods/Sentry/Sources/Swift/Integrations/ANR/SentryANRTrackerV2Delegate.swift b/Pods/Sentry/Sources/Swift/Integrations/ANR/SentryANRTrackerV2Delegate.swift deleted file mode 100644 index 0049d790b..000000000 --- a/Pods/Sentry/Sources/Swift/Integrations/ANR/SentryANRTrackerV2Delegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import Foundation - -@objc -protocol SentryANRTrackerV2Delegate { - func anrDetected(type: SentryANRType) - func anrStopped() -} - -@objc -enum SentryANRType: Int { - case fullyBlocking - case nonFullyBlocking -} diff --git a/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift b/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift new file mode 100644 index 000000000..c72a764bd --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/Data+SentryTracing.swift @@ -0,0 +1,69 @@ +@_implementationOnly import _SentryPrivate + +/// A ``Data`` extension that tracks read and write operations with Sentry. +/// +/// - Note: Methods provided by this extension reflect the same functionality as the original ``Data`` methods, but they track the operation with Sentry. +public extension Data { + + // MARK: - Reading Data from a File + + /// Creates a data object from the data at the specified file URL, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``Data.init(contentsOf:options:)`` and can also be used when the Sentry SDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableDataSwizzling` to `false` when initializing Sentry. + /// - Parameters: + /// - url: The location on disk of the data to read. + /// - options: The mask specifying the options to use when reading the data. For more information, see ``NSData.ReadingOptions``. + /// - Note: See ``Data.init(contentsOf:options:)`` for more information. + init(contentsOfWithSentryTracing url: URL, options: Data.ReadingOptions = []) throws { + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + let method = { (url: URL, options: Data.ReadingOptions) throws -> Data in + try Data(contentsOf: url, options: options) + } + guard let tracker = SentryFileIOTracker.sharedInstance() else { + self = try method(url, options) + return + } + self = try tracker + .measureReadingData( + from: url, + options: options, + origin: SentryTraceOriginManualFileData, + method: method + ) + } + + // MARK: - Writing Data to a File + + /// Write the contents of the `Data` to a location, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``Data.write(to:options:)`` and can also be used when the Sentry SDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableDataSwizzling` to `false` when initializing Sentry. + /// - Parameters: + /// - url: The location to write the data into. + /// - options: Options for writing the data. Default value is `[]`. + /// - Note: See ``Data.write(to:options:)`` for more information. + func writeWithSentryTracing(to url: URL, options: Data.WritingOptions = []) throws { + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + let method = { (data: Data, url: URL, options: Data.WritingOptions) throws in + try data.write(to: url, options: options) + } + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return try method(self, url, options) + } + try tracker + .measureWritingData( + self, + to: url, + options: options, + origin: SentryTraceOriginManualFileData, + method: method + ) + } +} diff --git a/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift b/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift new file mode 100644 index 000000000..d4536497e --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/FileManager+SentryTracing.swift @@ -0,0 +1,216 @@ +@_implementationOnly import _SentryPrivate +import Foundation + +/// A ``FileManager`` extension that tracks read and write operations with Sentry. +/// +/// - Note: Methods provided by this extension reflect the same functionality as the original ``FileManager`` methods, but they track the operation with Sentry. +public extension FileManager { + + // MARK: - Creating and Deleting Items + + /// Creates a file with the specified content and attributes at the given location, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``FileManager.createFile(atPath:contents:attributes:)`` and can also be used when the SentrySDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// - Parameters: + /// - path: The path for the new file. + /// - data: A data object containing the contents of the new file. + /// - attr: A dictionary containing the attributes to associate with the new file. + /// You can use these attributes to set the owner and group numbers, file permissions, and modification date. + /// For a list of keys, see ``FileAttributeKey``. If you specify `nil` for attributes, the file is created with a set of default attributes. + /// - Returns: `true` if the operation was successful or if the item already exists, otherwise `false`. + /// - Note: See ``FileManager.createFile(atPath:contents:attributes:)`` for more information. + func createFileWithSentryTracing(atPath path: String, contents data: Data?, attributes attr: [FileAttributeKey: Any]? = nil) -> Bool { + // Using a closure ensures that the same method is used with and without Sentry tracking. + let method = { (path: String, data: Data?, attr: [FileAttributeKey: Any]?) -> Bool in + self.createFile(atPath: path, contents: data, attributes: attr) + } + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return method(path, data, attr) + } + return tracker + .measureCreatingFile( + atPath: path, + contents: data, + attributes: attr, + origin: SentryTraceOriginManualFileData, + method: method + ) + } + + /// Removes the file or directory at the specified URL, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``FileManager.removeItem(at:)`` and can also be used when the Sentry SDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// - Parameter url: A file URL specifying the file or directory to remove. + /// If the URL specifies a directory, the contents of that directory are recursively removed. + /// - Note: See ``FileManager.removeItem(at:)`` for more information. + func removeItemWithSentryTracing(at url: URL) throws { + // It is necessary to check if the SDK is enabled because accessing the tracker will otherwise initialize the + // depency container without any configured SDK options. This is a known issue and needs to be fixed in general. + // + // Using a closure ensures that the same method is used with and without Sentry tracking. + let method = { (url: URL) in + try self.removeItem(at: url) + } + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return try method(url) + } + try tracker.measureRemovingItem(at: url, origin: SentryTraceOriginManualFileData, method: method) + } + + /// Removes the file or directory at the specified path, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``FileManager.removeItem(atPath:)`` and can also be used when the Sentry SDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// - Parameter path: A path string indicating the file or directory to remove. + /// If the path specifies a directory, the contents of that directory are recursively removed. + /// - Note: See ``FileManager.removeItem(atPath:)`` for more information. + func removeItemWithSentryTracing(atPath path: String) throws { + // It is necessary to check if the SDK is enabled because accessing the tracker will otherwise initialize the + // depency container without any configured SDK options. This is a known issue and needs to be fixed in general. + // + // Using a closure to ensure that the same method is used with and without Sentry tracking. + let method = { (path: String) in + try self.removeItem(atPath: path) + } + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return try method(path) + } + try tracker.measureRemovingItem(atPath: path, origin: SentryTraceOriginManualFileData, method: method) + } + + // MARK: - Moving and Copying Items + + /// Copies the file at the specified URL to a new location synchronously, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``FileManager.copyItem(at:to:)`` and can also be used when the Sentry SDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// - Parameters: + /// - srcURL: The file URL that identifies the file you want to copy. + /// The URL in this parameter must not be a file reference URL. + /// - dstURL: The URL at which to place the copy of `srcURL`. + /// The URL in this parameter must not be a file reference URL and must include the name of the file in its new location. + /// - Note: See ``FileManager.copyItem(at:to:)`` for more information. + func copyItemWithSentryTracing(at srcURL: URL, to dstURL: URL) throws { + // It is necessary to check if the SDK is enabled because accessing the tracker will otherwise initialize the + // depency container without any configured SDK options. This is a known issue and needs to be fixed in general. + // + // Using a closure ensures that the same method is used with and without Sentry tracking. + let method = { (srcURL: URL, dstURL: URL) throws in + try self.copyItem(at: srcURL, to: dstURL) + } + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return try method(srcURL, dstURL) + } + try tracker.measureCopyingItem(at: srcURL, to: dstURL, origin: SentryTraceOriginManualFileData, method: method) + } + + /// Copies the item at the specified path to a new location synchronously, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``FileManager.copyItem(atPath:toPath:)`` and can also be used when the SentrySDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// - Parameters: + /// - srcPath: The path to the file or directory you want to move. + /// - dstPath: The path at which to place the copy of `srcPath`. + /// This path must include the name of the file or directory in its new location. + /// - Note: See ``FileManager.copyItem(atPath:toPath:)`` for more information. + func copyItemWithSentryTracing(atPath srcPath: String, toPath dstPath: String) throws { + // It is necessary to check if the SDK is enabled because accessing the tracker will otherwise initialize the + // depency container without any configured SDK options. This is a known issue and needs to be fixed in general. + // + // Using a closure to ensure that the same method is used with and without Sentry tracking. + let method = { (srcPath: String, dstPath: String) throws in + try self.copyItem(atPath: srcPath, toPath: dstPath) + } + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return try method(srcPath, dstPath) + } + try tracker.measureCopyingItem(atPath: srcPath, toPath: dstPath, origin: SentryTraceOriginManualFileData, method: method) + } + + /// Moves the file or directory at the specified URL to a new location synchronously, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``FileManager.moveItem(at:to:)`` and can also be used when the Sentry SDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// - Parameters: + /// - srcURL: The file URL that identifies the file or directory you want to move. + /// The URL in this parameter must not be a file reference URL. + /// - dstURL: The new location for the item in `srcURL`. + /// The URL in this parameter must not be a file reference URL and must include the name of the file or directory in its new location. + /// - Note: See ``FileManager.moveItem(at:to:)`` for more information. + func moveItemWithSentryTracing(at srcURL: URL, to dstURL: URL) throws { + // It is necessary to check if the SDK is enabled because accessing the tracker will otherwise initialize the + // depency container without any configured SDK options. This is a known issue and needs to be fixed in general. + // + // Using a closure ensures that the same method is used with and without Sentry tracking. + let method = { (srcURL: URL, dstURL: URL) throws in + try self.moveItem(at: srcURL, to: dstURL) + } + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return try method(srcURL, dstURL) + } + try tracker.measureMovingItem( + at: srcURL, + to: dstURL, + origin: SentryTraceOriginManualFileData, + method: method + ) + } + + /// Moves the file or directory at the specified path to a new location synchronously, tracking the operation with Sentry. + /// + /// This method is a wrapper around ``FileManager.moveItem(atPath:toPath:)`` and can also be used when the Sentry SDK is not enabled. + /// + /// - Important: Using this method with auto-instrumentation for file operations enabled can lead to duplicate spans on older operating system versions. + /// It is recommended to use either automatic or manual instrumentation. You can disable automatic instrumentation by setting + /// `options.experimental.enableFileManagerSwizzling` to `false` when initializing Sentry. + /// - Parameters: + /// - srcPath: The path to the file or directory you want to move. + /// - dstPath: The new path for the item in `srcPath`. + /// This path must include the name of the file or directory in its new location. + /// - Note: See ``FileManager.moveItem(atPath:toPath:)`` for more information. + func moveItemWithSentryTracing(atPath srcPath: String, toPath dstPath: String) throws { + // It is necessary to check if the SDK is enabled because accessing the tracker will otherwise initialize the + // depency container without any configured SDK options. This is a known issue and needs to be fixed in general. + // + // Using a closure ensures that the same method is used with and without Sentry tracking. + let method = { (srcPath: String, dstPath: String) throws in + try self.moveItem(atPath: srcPath, toPath: dstPath) + } + // Gets a tracker instance if the SDK is enabled, otherwise uses the original method. + guard let tracker = SentryFileIOTracker.sharedInstance() else { + return try method(srcPath, dstPath) + } + try tracker.measureMovingItem( + atPath: srcPath, + toPath: dstPath, + origin: SentryTraceOriginManualFileData, + method: method + ) + } +} diff --git a/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/SentryFileIOTracker+SwiftHelpers.swift b/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/SentryFileIOTracker+SwiftHelpers.swift new file mode 100644 index 000000000..47925ed88 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Integrations/Performance/IO/SentryFileIOTracker+SwiftHelpers.swift @@ -0,0 +1,199 @@ +@_implementationOnly import _SentryPrivate +import Foundation + +extension SentryFileIOTracker { + func measureReadingData( + from url: URL, + options: Data.ReadingOptions, + origin: String, + method: (_ url: URL, _ options: Data.ReadingOptions) throws -> Data + ) rethrows -> Data { + // We dont track reads from a url that is not a file url + // because these reads are handled by NSURLSession and + // SentryNetworkTracker will create spans in these cases. + guard url.scheme == NSURLFileScheme else { + return try method(url, options) + } + guard let span = self.span(forPath: url.path, origin: origin, operation: SentrySpanOperationFileRead) else { + return try method(url, options) + } + do { + let data = try method(url, options) + span.setData(value: data.count, key: SentrySpanDataKeyFileSize) + span.finish() + return data + } catch { + span.finish(status: .internalError) + throw error + } + } + + func measureWritingData( + _ data: Data, + to url: URL, + options: Data.WritingOptions, + origin: String, + method: (_ data: Data, _ url: URL, _ options: Data.WritingOptions) throws -> Void + ) rethrows { + // We dont track reads from a url that is not a file url + // because these reads are handled by NSURLSession and + // SentryNetworkTracker will create spans in these cases. + guard url.scheme == NSURLFileScheme else { + return try method(data, url, options) + } + guard let span = self.span(forPath: url.path, origin: origin, operation: SentrySpanOperationFileWrite, size: UInt(data.count)) else { + return try method(data, url, options) + } + do { + try method(data, url, options) + span.finish() + } catch { + span.finish(status: .internalError) + throw error + } + } + + func measureRemovingItem( + at url: URL, + origin: String, + method: (_ url: URL) throws -> Void + ) rethrows { + // We dont track reads from a url that is not a file url + // because these reads are handled by NSURLSession and + // SentryNetworkTracker will create spans in these cases. + guard url.scheme == NSURLFileScheme else { + return try method(url) + } + guard let span = self.span(forPath: url.path, origin: origin, operation: SentrySpanOperationFileDelete) else { + return try method(url) + } + do { + try method(url) + span.finish() + } catch { + span.finish(status: .internalError) + throw error + } + } + + func measureRemovingItem( + atPath path: String, + origin: String, + method: (_ path: String) throws -> Void + ) rethrows { + guard let span = self.span(forPath: path, origin: origin, operation: SentrySpanOperationFileDelete) else { + return try method(path) + } + do { + try method(path) + span.finish() + } catch { + span.finish(status: .internalError) + throw error + } + } + + func measureCreatingFile( + atPath path: String, + contents data: Data?, + attributes attr: [FileAttributeKey: Any]?, + origin: String, + method: (_ path: String, _ data: Data?, _ attributes: [FileAttributeKey: Any]?) -> Bool + ) -> Bool { + let size = UInt(data?.count ?? 0) + guard let span = self.span(forPath: path, origin: origin, operation: SentrySpanOperationFileWrite, size: size) else { + return method(path, data, attr) + } + if let data = data { + span.setData(value: data.count, key: SentrySpanDataKeyFileSize) + } + defer { + span.finish() + } + return method(path, data, attr) +} + + func measureCopyingItem( + at srcUrl: URL, + to dstUrl: URL, + origin: String, + method: (_ srcUrl: URL, _ dstUrl: URL) throws -> Void + ) rethrows { + // We dont track reads from a url that is not a file url + // because these reads are handled by NSURLSession and + // SentryNetworkTracker will create spans in these cases. + guard srcUrl.scheme == NSURLFileScheme && dstUrl.scheme == NSURLFileScheme else { + return try method(srcUrl, dstUrl) + } + guard let span = self.span(forPath: srcUrl.path, origin: origin, operation: SentrySpanOperationFileCopy) else { + return try method(srcUrl, dstUrl) + } + do { + try method(srcUrl, dstUrl) + span.finish() + } catch { + span.finish(status: .internalError) + throw error + } + } + + func measureCopyingItem( + atPath srcPath: String, + toPath dstPath: String, + origin: String, + method: (_ srcPath: String, _ dstPath: String) throws -> Void + ) rethrows { + guard let span = self.span(forPath: srcPath, origin: origin, operation: SentrySpanOperationFileCopy) else { + return try method(srcPath, dstPath) + } + do { + try method(srcPath, dstPath) + span.finish() + } catch { + span.finish(status: .internalError) + throw error + } + } + + func measureMovingItem( + at srcUrl: URL, + to dstUrl: URL, + origin: String, + method: (_ srcUrl: URL, _ dstUrl: URL) throws -> Void + ) rethrows { + // We dont track reads from a url that is not a file url + // because these reads are handled by NSURLSession and + // SentryNetworkTracker will create spans in these cases. + guard srcUrl.scheme == NSURLFileScheme && dstUrl.scheme == NSURLFileScheme else { + return try method(srcUrl, dstUrl) + } + guard let span = self.span(forPath: srcUrl.path, origin: origin, operation: SentrySpanOperationFileRename) else { + return try method(srcUrl, dstUrl) + } + do { + try method(srcUrl, dstUrl) + span.finish() + } catch { + span.finish(status: .internalError) + throw error + } + } + + func measureMovingItem( + atPath srcPath: String, + toPath dstPath: String, + origin: String, + method: (_ srcPath: String, _ dstPath: String) throws -> Void + ) rethrows { + guard let span = self.span(forPath: srcPath, origin: origin, operation: SentrySpanOperationFileRename) else { + return try method(srcPath, dstPath) + } + do { + try method(srcPath, dstPath) + span.finish() + } catch { + span.finish(status: .internalError) + throw error + } + } +} diff --git a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/Preview/SentryMaskingPreviewView.swift b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/Preview/SentryMaskingPreviewView.swift new file mode 100644 index 000000000..519c3d537 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/Preview/SentryMaskingPreviewView.swift @@ -0,0 +1,74 @@ +#if (os(iOS) || os(tvOS)) && !SENTRY_NO_UIKIT +import Foundation +import UIKit + +@objcMembers +class SentryMaskingPreviewView: UIView { + private class PreviewRenderer: SentryViewRenderer { + func render(view: UIView) -> UIImage { + return UIGraphicsImageRenderer(size: view.frame.size, format: .init(for: .init(displayScale: 1))).image { _ in + // Creates a transparent image of the view size that will be used to drawn the redact regions. + // Transparent background is the default, so no additional drawing is required. + // Left blank on purpose + } + } + } + + private let photographer: SentryViewPhotographer + private var displayLink: CADisplayLink? + private var imageView = UIImageView() + private var idle = true + + var opacity: Float { + get { return Float(imageView.alpha) } + set { imageView.alpha = CGFloat(newValue)} + } + + init(redactOptions: SentryRedactOptions) { + self.photographer = SentryViewPhotographer( + renderer: PreviewRenderer(), + redactOptions: redactOptions, + enableMaskRendererV2: false + ) + super.init(frame: .zero) + self.isUserInteractionEnabled = false + + imageView.sentryReplayUnmask() + imageView.frame = bounds + imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + addSubview(imageView) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + deinit { + displayLink?.invalidate() + } + + override func didMoveToSuperview() { + if displayLink == nil { + displayLink = CADisplayLink(target: self, selector: #selector(update)) + displayLink?.add(to: .main, forMode: .common) + } + + if let superview = self.superview { + self.frame = superview.bounds + } + } + + @objc + private func update() { + guard let superview = self.superview, idle else { return } + idle = false + self.photographer.image(view: superview) { image in + DispatchQueue.main.async { + self.imageView.image = image + self.idle = true + } + } + } +} + +#endif // (os(iOS) || os(tvOS)) && !SENTRY_NO_UIKIT diff --git a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebBreadcrumbEvent.swift b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebBreadcrumbEvent.swift index f731c1568..76ee74890 100644 --- a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebBreadcrumbEvent.swift +++ b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebBreadcrumbEvent.swift @@ -1,4 +1,3 @@ -@_implementationOnly import _SentryPrivate import Foundation class SentryRRWebBreadcrumbEvent: SentryRRWebCustomEvent { diff --git a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebOptionsEvent.swift b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebOptionsEvent.swift new file mode 100644 index 000000000..21c921534 --- /dev/null +++ b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebOptionsEvent.swift @@ -0,0 +1,31 @@ +@_implementationOnly import _SentryPrivate +import Foundation + +@objc class SentryRRWebOptionsEvent: SentryRRWebCustomEvent { + + init(timestamp: Date, customOptions: [String: Any]) { + super.init(timestamp: timestamp, tag: "options", payload: customOptions) + } + + init(timestamp: Date, options: SentryReplayOptions) { + var payload: [String: Any] = [ + "sessionSampleRate": options.sessionSampleRate, + "errorSampleRate": options.onErrorSampleRate, + "maskAllText": options.maskAllText, + "maskAllImages": options.maskAllImages, + "quality": String(describing: options.quality), + "nativeSdkName": SentryMeta.sdkName, + "nativeSdkVersion": SentryMeta.versionString + ] + + if !options.maskedViewClasses.isEmpty { + payload["maskedViewClasses"] = options.maskedViewClasses.map(String.init(describing:)).joined(separator: ", ") + } + + if !options.unmaskedViewClasses.isEmpty { + payload["unmaskedViewClasses"] = options.unmaskedViewClasses.map(String.init(describing:)).joined(separator: ", ") + } + + super.init(timestamp: timestamp, tag: "options", payload: payload) + } +} diff --git a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebSpanEvent.swift b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebSpanEvent.swift index f391979b1..c42ccd043 100644 --- a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebSpanEvent.swift +++ b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebSpanEvent.swift @@ -1,4 +1,3 @@ -@_implementationOnly import _SentryPrivate import Foundation @objc class SentryRRWebSpanEvent: SentryRRWebCustomEvent { diff --git a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebVideoEvent.swift b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebVideoEvent.swift index 44f53b1b5..0a65c8201 100644 --- a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebVideoEvent.swift +++ b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/RRWeb/SentryRRWebVideoEvent.swift @@ -1,4 +1,3 @@ -@_implementationOnly import _SentryPrivate import Foundation @objcMembers diff --git a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift index 19243b937..76e602bda 100644 --- a/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift +++ b/Pods/Sentry/Sources/Swift/Integrations/SessionReplay/SentryOnDemandReplay.swift @@ -1,107 +1,123 @@ +// swiftlint:disable file_length type_body_length #if canImport(UIKit) && !SENTRY_NO_UIKIT #if os(iOS) || os(tvOS) @_implementationOnly import _SentryPrivate import AVFoundation import CoreGraphics +import CoreMedia import Foundation import UIKit -struct SentryReplayFrame { - let imagePath: String - let time: Date - let screenName: String? -} - -enum SentryOnDemandReplayError: Error { - case cantReadVideoSize - case cantCreatePixelBuffer - case errorRenderingVideo -} - +// swiftlint:disable type_body_length @objcMembers class SentryOnDemandReplay: NSObject, SentryReplayVideoMaker { private let _outputPath: String private var _totalFrames = 0 - private let dateProvider: SentryCurrentDateProvider - private let workingQueue: SentryDispatchQueueWrapper + private let processingQueue: SentryDispatchQueueWrapper + private let assetWorkerQueue: SentryDispatchQueueWrapper private var _frames = [SentryReplayFrame]() - - #if TEST || TESTCI || DEBUG + + #if SENTRY_TEST || SENTRY_TEST_CI || DEBUG //This is exposed only for tests, no need to make it thread safe. var frames: [SentryReplayFrame] { get { _frames } set { _frames = newValue } } - #endif // TEST || TESTCI || DEBUG + #endif // SENTRY_TEST || SENTRY_TEST_CI || DEBUG var videoScale: Float = 1 var bitRate = 20_000 var frameRate = 1 var cacheMaxSize = UInt.max - init(outputPath: String, workingQueue: SentryDispatchQueueWrapper, dateProvider: SentryCurrentDateProvider) { + init( + outputPath: String, + processingQueue: SentryDispatchQueueWrapper, + assetWorkerQueue: SentryDispatchQueueWrapper + ) { + assert(processingQueue != assetWorkerQueue, "Processing and asset worker queue must not be the same.") self._outputPath = outputPath - self.dateProvider = dateProvider - self.workingQueue = workingQueue + self.processingQueue = processingQueue + self.assetWorkerQueue = assetWorkerQueue } - convenience init(withContentFrom outputPath: String, workingQueue: SentryDispatchQueueWrapper, dateProvider: SentryCurrentDateProvider) { - self.init(outputPath: outputPath, workingQueue: workingQueue, dateProvider: dateProvider) - + convenience init( + withContentFrom outputPath: String, + processingQueue: SentryDispatchQueueWrapper, + assetWorkerQueue: SentryDispatchQueueWrapper + ) { + self.init( + outputPath: outputPath, + processingQueue: processingQueue, + assetWorkerQueue: assetWorkerQueue + ) + loadFrames(fromPath: outputPath) + } + + /// Loads the frames from the given path. + /// + /// - Parameter path: The path to the directory containing the frames. + private func loadFrames(fromPath path: String) { + SentryLog.debug("[Session Replay] Loading frames from path: \(path)") do { - let content = try FileManager.default.contentsOfDirectory(atPath: outputPath) - _frames = content.compactMap { - guard $0.hasSuffix(".png") else { return SentryReplayFrame?.none } - guard let time = Double($0.dropLast(4)) else { return nil } - return SentryReplayFrame(imagePath: "\(outputPath)/\($0)", time: Date(timeIntervalSinceReferenceDate: time), screenName: nil) + let content = try FileManager.default.contentsOfDirectory(atPath: path) + _frames = content.compactMap { frameFilePath -> SentryReplayFrame? in + guard frameFilePath.hasSuffix(".png") else { return nil } + guard let time = Double(frameFilePath.dropLast(4)) else { return nil } + let timestamp = Date(timeIntervalSinceReferenceDate: time) + return SentryReplayFrame(imagePath: "\(path)/\(frameFilePath)", time: timestamp, screenName: nil) }.sorted { $0.time < $1.time } + SentryLog.debug("[Session Replay] Loaded \(content.count) files into \(_frames.count) frames from path: \(path)") } catch { - SentryLog.debug("Could not list frames from replay: \(error.localizedDescription)") - return + SentryLog.error("[Session Replay] Could not list frames from replay, reason: \(error.localizedDescription)") } } - - convenience init(outputPath: String) { - self.init(outputPath: outputPath, - workingQueue: SentryDispatchQueueWrapper(name: "io.sentry.onDemandReplay", attributes: nil), - dateProvider: SentryCurrentDateProvider()) - } - - convenience init(withContentFrom outputPath: String) { - self.init(withContentFrom: outputPath, - workingQueue: SentryDispatchQueueWrapper(name: "io.sentry.onDemandReplay", attributes: nil), - dateProvider: SentryCurrentDateProvider()) - } - - func addFrameAsync(image: UIImage, forScreen: String?) { - workingQueue.dispatchAsync({ - self.addFrame(image: image, forScreen: forScreen) - }) + + @objc func addFrameAsync(timestamp: Date, image: UIImage, forScreen screen: String?) { + SentryLog.debug("[Session Replay] Adding frame async for screen: \(screen ?? "nil") at timestamp: \(timestamp)") + // Dispatch the frame addition to a background queue to avoid blocking the main queue. + // This must be on the processing queue to avoid deadlocks. + processingQueue.dispatchAsync { + self.addFrame(timestamp: timestamp, image: image, forScreen: screen) + } } - private func addFrame(image: UIImage, forScreen: String?) { - guard let data = rescaleImage(image)?.pngData() else { return } - - let date = dateProvider.date() - let imagePath = (_outputPath as NSString).appendingPathComponent("\(date.timeIntervalSinceReferenceDate).png") + private func addFrame(timestamp: Date, image: UIImage, forScreen screen: String?) { + SentryLog.debug("[Session Replay] Adding frame to replay, screen: \(screen ?? "nil") at timestamp: \(timestamp)") + guard let data = rescaleImage(image)?.pngData() else { + SentryLog.error("[Session Replay] Could not rescale image, dropping frame") + return + } + + let imagePath = (_outputPath as NSString).appendingPathComponent("\(timestamp.timeIntervalSinceReferenceDate).png") do { - try data.write(to: URL(fileURLWithPath: imagePath)) + let url = URL(fileURLWithPath: imagePath) + SentryLog.debug("[Session Replay] Saving frame to file URL: \(url)") + try data.write(to: url) } catch { - SentryLog.debug("Could not save replay frame. Error: \(error)") + SentryLog.error("[Session Replay] Could not save replay frame, reason: \(error)") return } - _frames.append(SentryReplayFrame(imagePath: imagePath, time: date, screenName: forScreen)) - + _frames.append(SentryReplayFrame(imagePath: imagePath, time: timestamp, screenName: screen)) + + // Remove the oldest frames if the cache size exceeds the maximum size. while _frames.count > cacheMaxSize { let first = _frames.removeFirst() - try? FileManager.default.removeItem(at: URL(fileURLWithPath: first.imagePath)) + let url = URL(fileURLWithPath: first.imagePath) + SentryLog.debug("[Session Replay] Removing oldest frame at file URL: \(url.path)") + try? FileManager.default.removeItem(at: url) } _totalFrames += 1 + SentryLog.debug("[Session Replay] Added frame, total frames counter: \(_totalFrames), current frames count: \(_frames.count)") } private func rescaleImage(_ originalImage: UIImage) -> UIImage? { - guard originalImage.scale > 1 else { return originalImage } + SentryLog.debug("[Session Replay] Rescaling image with scale: \(originalImage.scale)") + guard originalImage.scale > 1 else { + SentryLog.debug("[Session Replay] Image is already at the correct scale, returning original image") + return originalImage + } UIGraphicsBeginImageContextWithOptions(originalImage.size, false, 1) defer { UIGraphicsEndImageContext() } @@ -111,147 +127,391 @@ class SentryOnDemandReplay: NSObject, SentryReplayVideoMaker { } func releaseFramesUntil(_ date: Date) { - workingQueue.dispatchAsync ({ + processingQueue.dispatchAsync { + SentryLog.debug("[Session Replay] Releasing frames until date: \(date)") while let first = self._frames.first, first.time < date { self._frames.removeFirst() - try? FileManager.default.removeItem(at: URL(fileURLWithPath: first.imagePath)) + let fileUrl = URL(fileURLWithPath: first.imagePath) + do { + try FileManager.default.removeItem(at: fileUrl) + SentryLog.debug("[Session Replay] Removed frame at url: \(fileUrl.path)") + } catch { + SentryLog.error("[Session Replay] Failed to remove frame at: \(fileUrl.path), reason: \(error), ignoring error") + } } - }) + SentryLog.debug("[Session Replay] Frames released, remaining frames count: \(self._frames.count)") + } } var oldestFrameDate: Date? { return _frames.first?.time } - - func createVideoWith(beginning: Date, end: Date) throws -> [SentryVideoInfo] { - let videoFrames = filterFrames(beginning: beginning, end: end) + + func createVideoInBackgroundWith(beginning: Date, end: Date, completion: @escaping ([SentryVideoInfo]) -> Void) { + // Note: In Swift it is best practice to use `Result` instead of `(Value?, Error?)` + // Due to interoperability with Objective-C and @objc, we can not use Result for the completion callback. + SentryLog.debug("[Session Replay] Creating video in background with beginning: \(beginning), end: \(end)") + processingQueue.dispatchAsync { + let videos = self.createVideoWith(beginning: beginning, end: end) + SentryLog.debug("[Session Replay] Finished creating video in background with \(videos.count) segments") + completion(videos) + } + } + + func createVideoWith(beginning: Date, end: Date) -> [SentryVideoInfo] { + SentryLog.debug("[Session Replay] Creating video with beginning: \(beginning), end: \(end)") + // Note: In previous implementations this method was wrapped by a sync call to the processing queue. + // As this method is already called from the processing queue, we must remove the sync call. + let videoFrames = self._frames.filter { $0.time >= beginning && $0.time <= end } var frameCount = 0 - + var videos = [SentryVideoInfo]() - + while frameCount < videoFrames.count { - let outputFileURL = URL(fileURLWithPath: _outputPath.appending("/\(videoFrames[frameCount].time.timeIntervalSinceReferenceDate).mp4")) - if let videoInfo = try renderVideo(with: videoFrames, from: &frameCount, at: outputFileURL) { - videos.append(videoInfo) - } else { - frameCount++ - } + let frame = videoFrames[frameCount] + let outputFileURL = URL(fileURLWithPath: _outputPath) + .appendingPathComponent("\(frame.time.timeIntervalSinceReferenceDate)") + .appendingPathExtension("mp4") + + let group = DispatchGroup() + var currentError: Error? + + group.enter() + self.renderVideo(with: videoFrames, from: frameCount, at: outputFileURL) { result in + switch result { + case .success(let videoResult): + // Set the frame count/offset to the new index that is returned by the completion block. + // This is important to avoid processing the same frame multiple times. + frameCount = videoResult.finalFrameIndex + SentryLog.debug("[Session Replay] Finished rendering video, frame count moved to: \(frameCount)") + + // Append the video info to the videos array. + // In case no video info is returned, skip the segment. + if let videoInfo = videoResult.info { + videos.append(videoInfo) + } + case .failure(let error): + SentryLog.error("[Session Replay] Failed to render video with error: \(error)") + currentError = error + } + group.leave() + } + + // Calling group.wait will block the `processingQueue` until the video rendering completes or a timeout occurs. + // It is imporant that the renderVideo completion block signals the group. + // The queue used by render video must have a higher priority than the processing queue to reduce thread inversion. + // Otherwise, it could lead to queue starvation and a deadlock/timeout. + guard group.wait(timeout: .now() + 10) == .success else { + SentryLog.error("[Session Replay] Timeout while waiting for video rendering to finish, returning \(videos.count) videos") + return videos + } + + // If there was an error, log it and exit the loop. + if let error = currentError { + // Until v8.50.2 the error was propagated to the completion block, discarding any generated video. + // Instead this will "silently" fail by only logging the error and returning the successfully generated videos. + SentryLog.error("[Session Replay] Error while rendering video: \(error), returning \(videos.count) videos") + return videos + } + + SentryLog.debug("[Session Replay] Finished rendering video, frame count moved to: \(frameCount)") } + + SentryLog.debug("[Session Replay] Finished creating video with \(videos.count) segments") return videos } - - private func renderVideo(with videoFrames: [SentryReplayFrame], from: inout Int, at outputFileURL: URL) throws -> SentryVideoInfo? { - guard from < videoFrames.count, let image = UIImage(contentsOfFile: videoFrames[from].imagePath) else { return nil } + + // swiftlint:disable function_body_length cyclomatic_complexity + private func renderVideo(with videoFrames: [SentryReplayFrame], from: Int, at outputFileURL: URL, completion: @escaping (Result) -> Void) { + SentryLog.debug("[Session Replay] Rendering video with \(videoFrames.count) frames, from index: \(from), to output url: \(outputFileURL)") + guard from < videoFrames.count else { + SentryLog.error("[Session Replay] Failed to render video, reason: index out of bounds") + return completion(.success(SentryRenderVideoResult( + info: nil, + finalFrameIndex: from + ))) + } + guard let image = UIImage(contentsOfFile: videoFrames[from].imagePath) else { + SentryLog.error("[Session Replay] Failed to render video, reason: can't read image at path: \(videoFrames[from].imagePath)") + return completion(.success(SentryRenderVideoResult( + info: nil, + finalFrameIndex: from + ))) + } + let videoWidth = image.size.width * CGFloat(videoScale) let videoHeight = image.size.height * CGFloat(videoScale) - - let videoWriter = try AVAssetWriter(url: outputFileURL, fileType: .mp4) + let pixelSize = CGSize(width: videoWidth, height: videoHeight) + + SentryLog.debug("[Session Replay] Creating video writer with output file URL: \(outputFileURL)") + let videoWriter: AVAssetWriter + do { + videoWriter = try AVAssetWriter(url: outputFileURL, fileType: .mp4) + } catch { + SentryLog.error("[Session Replay] Failed to create video writer, reason: \(error)") + return completion(.failure(error)) + } + + SentryLog.debug("[Session Replay] Creating pixel buffer based video writer input") let videoWriterInput = AVAssetWriterInput(mediaType: .video, outputSettings: createVideoSettings(width: videoWidth, height: videoHeight)) - - guard let currentPixelBuffer = SentryPixelBuffer(size: CGSize(width: videoWidth, height: videoHeight), videoWriterInput: videoWriterInput) - else { throw SentryOnDemandReplayError.cantCreatePixelBuffer } - + guard let currentPixelBuffer = SentryPixelBuffer(size: pixelSize, videoWriterInput: videoWriterInput) else { + SentryLog.error("[Session Replay] Failed to render video, reason: pixel buffer creation failed") + return completion(.failure(SentryOnDemandReplayError.cantCreatePixelBuffer)) + } videoWriter.add(videoWriterInput) videoWriter.startWriting() videoWriter.startSession(atSourceTime: .zero) - + var lastImageSize: CGSize = image.size var usedFrames = [SentryReplayFrame]() - let group = DispatchGroup() - - var result: Result? - var frameCount = from + var frameIndex = from + + // Convenience wrapper to handle the completion callback to return the video info and the final frame index + // It is not possible to use an inout frame index here, because the closure is escaping and the frameIndex variable is captured. + let deferredCompletionCallback: (Result) -> Void = { result in + switch result { + case .success(let videoResult): + completion(.success(SentryRenderVideoResult( + info: videoResult, + finalFrameIndex: frameIndex + ))) + case .failure(let error): + completion(.failure(error)) + } + } - group.enter() - videoWriterInput.requestMediaDataWhenReady(on: workingQueue.queue) { + // Append frames to the video writer input in a pull-style manner when the input is ready to receive more media data. + // + // Inside the callback: + // 1. We append media data until `isReadyForMoreMediaData` becomes false + // 2. Or until there's no more media data to process (then we mark input as finished) + // 3. If we don't mark the input as finished, the callback will be invoked again + // when the input is ready for more data + // + // By setting the queue to the asset worker queue, we ensure that the callback is invoked on the asset worker queue. + // This is important to avoid a deadlock, as this method is called on the processing queue. + videoWriterInput.requestMediaDataWhenReady(on: assetWorkerQueue.queue) { [weak self] in + SentryLog.debug("[Session Replay] Video writer input is ready, status: \(videoWriter.status)") + guard let strongSelf = self else { + SentryLog.warning("[Session Replay] On-demand replay is deallocated, completing writing session without output video info") + return deferredCompletionCallback(.success(nil)) + } guard videoWriter.status == .writing else { + SentryLog.error("[Session Replay] Video writer is not writing anymore, cancelling the writing session, reason: \(videoWriter.error?.localizedDescription ?? "Unknown error")") videoWriter.cancelWriting() - result = .failure(videoWriter.error ?? SentryOnDemandReplayError.errorRenderingVideo ) - group.leave() - return + return deferredCompletionCallback(.failure(videoWriter.error ?? SentryOnDemandReplayError.errorRenderingVideo)) } - if frameCount >= videoFrames.count { - result = self.finishVideo(outputFileURL: outputFileURL, usedFrames: usedFrames, videoHeight: Int(videoHeight), videoWidth: Int(videoWidth), videoWriter: videoWriter) - group.leave() - return + guard frameIndex < videoFrames.count else { + SentryLog.debug("[Session Replay] No more frames available to process, finishing the video") + return strongSelf.finishVideo( + outputFileURL: outputFileURL, + usedFrames: usedFrames, + videoHeight: Int(videoHeight), + videoWidth: Int(videoWidth), + videoWriter: videoWriter, + onCompletion: deferredCompletionCallback + ) } - let frame = videoFrames[frameCount] + + let frame = videoFrames[frameIndex] if let image = UIImage(contentsOfFile: frame.imagePath) { - if lastImageSize != image.size { - result = self.finishVideo(outputFileURL: outputFileURL, usedFrames: usedFrames, videoHeight: Int(videoHeight), videoWidth: Int(videoWidth), videoWriter: videoWriter) - group.leave() - return + SentryLog.debug("[Session Replay] Image at index \(frameIndex) is ready, size: \(image.size)") + guard lastImageSize == image.size else { + SentryLog.debug("[Session Replay] Image size has changed, finishing video") + return strongSelf.finishVideo( + outputFileURL: outputFileURL, + usedFrames: usedFrames, + videoHeight: Int(videoHeight), + videoWidth: Int(videoWidth), + videoWriter: videoWriter, + onCompletion: deferredCompletionCallback + ) } lastImageSize = image.size - - let presentTime = CMTime(seconds: Double(frameCount), preferredTimescale: CMTimeScale(1 / self.frameRate)) - if currentPixelBuffer.append(image: image, presentationTime: presentTime) != true { + + let presentTime = SentryOnDemandReplay.calculatePresentationTime( + forFrameAtIndex: frameIndex, + frameRate: strongSelf.frameRate + ).timeValue + guard currentPixelBuffer.append(image: image, presentationTime: presentTime) else { + SentryLog.error("[Session Replay] Failed to append image to pixel buffer, cancelling the writing session, reason: \(String(describing: videoWriter.error))") videoWriter.cancelWriting() - result = .failure(videoWriter.error ?? SentryOnDemandReplayError.errorRenderingVideo ) - group.leave() - return + return deferredCompletionCallback(.failure(videoWriter.error ?? SentryOnDemandReplayError.errorRenderingVideo)) } usedFrames.append(frame) } - frameCount += 1 + + // Increment the frame index even if the image could not be appended to the pixel buffer. + // This is important to avoid an infinite loop. + frameIndex += 1 } - guard group.wait(timeout: .now() + 2) == .success else { throw SentryOnDemandReplayError.errorRenderingVideo } - from = frameCount - - return try result?.get() } - - private func finishVideo(outputFileURL: URL, usedFrames: [SentryReplayFrame], videoHeight: Int, videoWidth: Int, videoWriter: AVAssetWriter) -> Result { - let group = DispatchGroup() - var finishError: Error? - var result: SentryVideoInfo? - - group.enter() + + // swiftlint:enable function_body_length cyclomatic_complexity + private func finishVideo( + outputFileURL: URL, + usedFrames: [SentryReplayFrame], + videoHeight: Int, + videoWidth: Int, + videoWriter: AVAssetWriter, + onCompletion completion: @escaping (Result) -> Void + ) { + // Note: This method is expected to be called from the asset worker queue and *not* the processing queue. + SentryLog.info("[Session Replay] Finishing video with output file URL: \(outputFileURL), used frames count: \(usedFrames.count), video height: \(videoHeight), video width: \(videoWidth)") videoWriter.inputs.forEach { $0.markAsFinished() } - videoWriter.finishWriting { - defer { group.leave() } - if videoWriter.status == .completed { + videoWriter.finishWriting { [weak self] in + SentryLog.debug("[Session Replay] Finished video writing, status: \(videoWriter.status)") + guard let strongSelf = self else { + SentryLog.warning("[Session Replay] On-demand replay is deallocated, completing writing session without output video info") + return completion(.success(nil)) + } + + switch videoWriter.status { + case .writing: + SentryLog.error("[Session Replay] Finish writing video was called with status writing, this is unexpected! Completing with no video info") + completion(.success(nil)) + case .cancelled: + SentryLog.warning("[Session Replay] Finish writing video was cancelled, completing with no video info.") + completion(.success(nil)) + case .completed: + SentryLog.debug("[Session Replay] Finish writing video was completed, creating video info from file attributes.") do { - let fileAttributes = try FileManager.default.attributesOfItem(atPath: outputFileURL.path) - guard let fileSize = fileAttributes[FileAttributeKey.size] as? Int else { - finishError = SentryOnDemandReplayError.cantReadVideoSize - return - } - guard let start = usedFrames.min(by: { $0.time < $1.time })?.time else { return } - let duration = TimeInterval(usedFrames.count / self.frameRate) - result = SentryVideoInfo(path: outputFileURL, height: Int(videoHeight), width: Int(videoWidth), duration: duration, frameCount: usedFrames.count, frameRate: self.frameRate, start: start, end: start.addingTimeInterval(duration), fileSize: fileSize, screens: usedFrames.compactMap({ $0.screenName })) + let result = try strongSelf.getVideoInfo( + from: outputFileURL, + usedFrames: usedFrames, + videoWidth: Int(videoWidth), + videoHeight: Int(videoHeight) + ) + completion(.success(result)) } catch { - finishError = error + SentryLog.warning("[Session Replay] Failed to create video info from file attributes, reason: \(error)") + completion(.failure(error)) } + case .failed: + SentryLog.warning("[Session Replay] Finish writing video failed, reason: \(String(describing: videoWriter.error))") + completion(.failure(videoWriter.error ?? SentryOnDemandReplayError.errorRenderingVideo)) + case .unknown: + SentryLog.warning("[Session Replay] Finish writing video with unknown status, reason: \(String(describing: videoWriter.error))") + completion(.failure(videoWriter.error ?? SentryOnDemandReplayError.errorRenderingVideo)) + @unknown default: + SentryLog.warning("[Session Replay] Finish writing video in unknown state, reason: \(String(describing: videoWriter.error))") + completion(.failure(SentryOnDemandReplayError.errorRenderingVideo)) } } - group.wait() - - if let finishError = finishError { return .failure(finishError) } - return .success(result) } - - private func filterFrames(beginning: Date, end: Date) -> [SentryReplayFrame] { - var frames = [SentryReplayFrame]() - //Using dispatch queue as sync mechanism since we need a queue already to generate the video. - workingQueue.dispatchSync({ - frames = self._frames.filter { $0.time >= beginning && $0.time <= end } - }) - return frames + + fileprivate func getVideoInfo(from outputFileURL: URL, usedFrames: [SentryReplayFrame], videoWidth: Int, videoHeight: Int) throws -> SentryVideoInfo { + SentryLog.debug("[Session Replay] Getting video info from file: \(outputFileURL.path), width: \(videoWidth), height: \(videoHeight), used frames count: \(usedFrames.count)") + let fileAttributes = try FileManager.default.attributesOfItem(atPath: outputFileURL.path) + guard let fileSize = fileAttributes[FileAttributeKey.size] as? Int else { + SentryLog.warning("[Session Replay] Failed to read video size from video file, reason: size attribute not found") + throw SentryOnDemandReplayError.cantReadVideoSize + } + let minFrame = usedFrames.min(by: { $0.time < $1.time }) + guard let start = minFrame?.time else { + // Note: This code path is currently not reached, because the `getVideoInfo` method is only called after the video is successfully created, therefore at least one frame was used. + // The compiler still requires us to unwrap the optional value, and we do not permit force-unwrapping. + SentryLog.warning("[Session Replay] Failed to read video start time from used frames, reason: no frames found") + throw SentryOnDemandReplayError.cantReadVideoStartTime + } + let duration = TimeInterval(usedFrames.count / self.frameRate) + return SentryVideoInfo( + path: outputFileURL, + height: videoHeight, + width: videoWidth, + duration: duration, + frameCount: usedFrames.count, + frameRate: self.frameRate, + start: start, + end: start.addingTimeInterval(duration), + fileSize: fileSize, + screens: usedFrames.compactMap({ $0.screenName }) + ) } - - private func createVideoSettings(width: CGFloat, height: CGFloat) -> [String: Any] { + + internal func createVideoSettings(width: CGFloat, height: CGFloat) -> [String: Any] { return [ + // The codec type for the video. H.264 (AVC) is the most widely supported codec across platforms, + // including web browsers, QuickTime, VLC, and mobile devices. AVVideoCodecKey: AVVideoCodecType.h264, + + // The dimensions of the video frame in pixels. AVVideoWidthKey: width, AVVideoHeightKey: height, + + // AVVideoCompressionPropertiesKey contains advanced compression settings. AVVideoCompressionPropertiesKey: [ + // Specifies the average bit rate used for encoding. A higher bit rate increases visual quality + // at the cost of file size. Choose a value appropriate for your resolution (e.g., 1 Mbps for 720p). AVVideoAverageBitRateKey: bitRate, - AVVideoProfileLevelKey: AVVideoProfileLevelH264BaselineAutoLevel + + // Selects the H.264 Main profile with an automatic level. + // This avoids using the Baseline profile, which lacks key features like CABAC entropy coding + // and causes issues in decoders like VideoToolbox, especially at non-standard frame rates (1 FPS). + // The Main profile is well supported by both hardware and software decoders. + AVVideoProfileLevelKey: AVVideoProfileLevelH264MainAutoLevel, + + // Prevents the use of B-frames (bidirectional predicted frames). + // B-frames reference both past and future frames, which can break compatibility + // with certain hardware decoders and make accurate seeking harder, especially in timelapse videos + // where each frame is independent and must be decodable on its own. + AVVideoAllowFrameReorderingKey: false, + + // Sets keyframe interval to one I-frame per video segment. + // This significantly reduces file size (e.g. from 19KB to 9KB) while maintaining + // acceptable seeking granularity. With our 1 FPS recording, this means a keyframe + // will be inserted once every 6 seconds of recorded content, but our video segments + // will never be longer than 5 seconds, resulting in a maximum of 1 I-frame per video. + AVVideoMaxKeyFrameIntervalKey: 6 // 5 + 1 interval for optimal compression + ] as [String: Any], + + // Explicitly sets the video color space to ITU-R BT.709 (the standard for HD video). + // This improves color accuracy and ensures consistent rendering across platforms and browsers, + // especially when the source content is rendered using UIKit/AppKit (e.g., UIColor, UIImage, UIView). + // Without these, decoders may guess or default to BT.601, resulting in incorrect gamma or saturation. + AVVideoColorPropertiesKey: [ + // Specifies the color primaries — i.e., the chromaticities of red, green, and blue. + // BT.709 is the standard for HD content and matches sRGB color primaries, + // ensuring accurate color reproduction when rendered on most displays. + AVVideoColorPrimariesKey: AVVideoColorPrimaries_ITU_R_709_2, + + // Defines the transfer function (optical-electrical transfer function). + // BT.709 matches sRGB gamma (~2.2) and ensures that brightness/contrast levels + // look correct on most screens and in browsers using HTML5 FooterText The MIT License (MIT) -Copyright (c) 2015-2024 Sentry +Copyright (c) 2015 Sentry Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -189,7 +189,6 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - License mit diff --git a/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.debug.xcconfig b/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.debug.xcconfig index fe27f6506..1204f3c3f 100644 --- a/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.debug.xcconfig @@ -5,6 +5,7 @@ HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/H LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ASCIImage" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaHTTPServer" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/MIKMIDI" "${PODS_CONFIGURATION_BUILD_DIR}/ORSSerialPort" "${PODS_CONFIGURATION_BUILD_DIR}/PocketSocket" "${PODS_CONFIGURATION_BUILD_DIR}/Sentry" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ASCIImage" -isystem "${PODS_ROOT}/Headers/Public/CocoaAsyncSocket" -isystem "${PODS_ROOT}/Headers/Public/CocoaHTTPServer" -isystem "${PODS_ROOT}/Headers/Public/CocoaLumberjack" -isystem "${PODS_ROOT}/Headers/Public/MIKMIDI" -isystem "${PODS_ROOT}/Headers/Public/ORSSerialPort" -isystem "${PODS_ROOT}/Headers/Public/PocketSocket" -isystem "${PODS_ROOT}/Headers/Public/SocketRocket" OTHER_LDFLAGS = $(inherited) -ObjC -l"ASCIImage" -l"CocoaAsyncSocket" -l"CocoaHTTPServer" -l"CocoaLumberjack" -l"MIKMIDI" -l"ORSSerialPort" -l"PocketSocket" -l"Sentry" -l"SocketRocket" -l"icucore" -l"system" -l"xml2" -l"z" -framework "AudioToolbox" -framework "AudioUnit" -framework "CFNetwork" -framework "CoreMIDI" -framework "CoreServices" -framework "Foundation" -framework "IOKit" -framework "Security" +OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/ASCIImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaHTTPServer" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/MIKMIDI" "-F${PODS_CONFIGURATION_BUILD_DIR}/ORSSerialPort" "-F${PODS_CONFIGURATION_BUILD_DIR}/PocketSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sentry" "-F${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.profile.xcconfig b/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.profile.xcconfig index fe27f6506..1204f3c3f 100644 --- a/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.profile.xcconfig +++ b/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.profile.xcconfig @@ -5,6 +5,7 @@ HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/H LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ASCIImage" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaHTTPServer" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/MIKMIDI" "${PODS_CONFIGURATION_BUILD_DIR}/ORSSerialPort" "${PODS_CONFIGURATION_BUILD_DIR}/PocketSocket" "${PODS_CONFIGURATION_BUILD_DIR}/Sentry" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ASCIImage" -isystem "${PODS_ROOT}/Headers/Public/CocoaAsyncSocket" -isystem "${PODS_ROOT}/Headers/Public/CocoaHTTPServer" -isystem "${PODS_ROOT}/Headers/Public/CocoaLumberjack" -isystem "${PODS_ROOT}/Headers/Public/MIKMIDI" -isystem "${PODS_ROOT}/Headers/Public/ORSSerialPort" -isystem "${PODS_ROOT}/Headers/Public/PocketSocket" -isystem "${PODS_ROOT}/Headers/Public/SocketRocket" OTHER_LDFLAGS = $(inherited) -ObjC -l"ASCIImage" -l"CocoaAsyncSocket" -l"CocoaHTTPServer" -l"CocoaLumberjack" -l"MIKMIDI" -l"ORSSerialPort" -l"PocketSocket" -l"Sentry" -l"SocketRocket" -l"icucore" -l"system" -l"xml2" -l"z" -framework "AudioToolbox" -framework "AudioUnit" -framework "CFNetwork" -framework "CoreMIDI" -framework "CoreServices" -framework "Foundation" -framework "IOKit" -framework "Security" +OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/ASCIImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaHTTPServer" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/MIKMIDI" "-F${PODS_CONFIGURATION_BUILD_DIR}/ORSSerialPort" "-F${PODS_CONFIGURATION_BUILD_DIR}/PocketSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sentry" "-F${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.release.xcconfig b/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.release.xcconfig index 9a92f067a..ce5a5d8f1 100644 --- a/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.release.xcconfig +++ b/Pods/Target Support Files/Pods-Hammerspoon/Pods-Hammerspoon.release.xcconfig @@ -7,6 +7,7 @@ LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/../Frame LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ASCIImage" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaHTTPServer" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/MIKMIDI" "${PODS_CONFIGURATION_BUILD_DIR}/ORSSerialPort" "${PODS_CONFIGURATION_BUILD_DIR}/PocketSocket" "${PODS_CONFIGURATION_BUILD_DIR}/Sentry" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/ASCIImage" -isystem "${PODS_ROOT}/Headers/Public/CocoaAsyncSocket" -isystem "${PODS_ROOT}/Headers/Public/CocoaHTTPServer" -isystem "${PODS_ROOT}/Headers/Public/CocoaLumberjack" -isystem "${PODS_ROOT}/Headers/Public/MIKMIDI" -isystem "${PODS_ROOT}/Headers/Public/ORSSerialPort" -isystem "${PODS_ROOT}/Headers/Public/PocketSocket" -isystem "${PODS_ROOT}/Headers/Public/SocketRocket" -iframework "${PODS_ROOT}/Sparkle" OTHER_LDFLAGS = $(inherited) -ObjC -l"ASCIImage" -l"CocoaAsyncSocket" -l"CocoaHTTPServer" -l"CocoaLumberjack" -l"MIKMIDI" -l"ORSSerialPort" -l"PocketSocket" -l"Sentry" -l"SocketRocket" -l"icucore" -l"system" -l"xml2" -l"z" -framework "AudioToolbox" -framework "AudioUnit" -framework "CFNetwork" -framework "CoreMIDI" -framework "CoreServices" -framework "Foundation" -framework "IOKit" -framework "Security" -framework "Sparkle" +OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/ASCIImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaHTTPServer" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/MIKMIDI" "-F${PODS_CONFIGURATION_BUILD_DIR}/ORSSerialPort" "-F${PODS_CONFIGURATION_BUILD_DIR}/PocketSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sentry" "-F${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/Sparkle" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist b/Pods/Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist index c9e5771dd..7ec454606 100644 --- a/Pods/Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist +++ b/Pods/Target Support Files/Sentry/ResourceBundle-Sentry-Sentry-Info.plist @@ -13,7 +13,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 8.36.0 + 8.52.0 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/Sentry/Sentry-umbrella.h b/Pods/Target Support Files/Sentry/Sentry-umbrella.h index 8adefe74f..0affc85c2 100644 --- a/Pods/Target Support Files/Sentry/Sentry-umbrella.h +++ b/Pods/Target Support Files/Sentry/Sentry-umbrella.h @@ -24,10 +24,12 @@ #import "SentryError.h" #import "SentryEvent.h" #import "SentryException.h" +#import "SentryFeedbackAPI.h" #import "SentryFrame.h" #import "SentryGeo.h" #import "SentryHttpStatusCodeRange.h" #import "SentryHub.h" +#import "SentryIntegrationProtocol.h" #import "SentryMeasurementUnit.h" #import "SentryMechanism.h" #import "SentryMechanismMeta.h" @@ -35,6 +37,7 @@ #import "SentryNSError.h" #import "SentryOptions.h" #import "SentryProfilingConditionals.h" +#import "SentryReplayApi.h" #import "SentryRequest.h" #import "SentrySampleDecision.h" #import "SentrySamplingContext.h" diff --git a/Pods/Target Support Files/Sentry/Sentry.debug.xcconfig b/Pods/Target Support Files/Sentry/Sentry.debug.xcconfig index e0ac0abca..6760e9360 100644 --- a/Pods/Target Support Files/Sentry/Sentry.debug.xcconfig +++ b/Pods/Target Support Files/Sentry/Sentry.debug.xcconfig @@ -6,6 +6,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Sentry GCC_ENABLE_CPP_EXCEPTIONS = YES GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Sentry" "${PODS_ROOT}/Headers/Public" +OTHER_CFLAGS = $(inherited) -DAPPLICATION_EXTENSION_API_ONLY_$(APPLICATION_EXTENSION_API_ONLY) OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Sentry/Sentry.release.xcconfig b/Pods/Target Support Files/Sentry/Sentry.release.xcconfig index e0ac0abca..6760e9360 100644 --- a/Pods/Target Support Files/Sentry/Sentry.release.xcconfig +++ b/Pods/Target Support Files/Sentry/Sentry.release.xcconfig @@ -6,6 +6,7 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Sentry GCC_ENABLE_CPP_EXCEPTIONS = YES GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Sentry" "${PODS_ROOT}/Headers/Public" +OTHER_CFLAGS = $(inherited) -DAPPLICATION_EXTENSION_API_ONLY_$(APPLICATION_EXTENSION_API_ONLY) OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) From dcffc7cd23bbb6f330a4f04a882f8e5fafc6a913 Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Tue, 3 Jun 2025 17:16:16 -0700 Subject: [PATCH 4/8] compile fixes in streamdeck and osascript --- extensions/osascript/NSAppleEventDescriptor+Parsing.m | 2 +- extensions/streamdeck/HSStreamDeckDevice.h | 4 ++-- extensions/streamdeck/HSStreamDeckDevice.m | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/extensions/osascript/NSAppleEventDescriptor+Parsing.m b/extensions/osascript/NSAppleEventDescriptor+Parsing.m index 7b6afd711..4dee86efb 100644 --- a/extensions/osascript/NSAppleEventDescriptor+Parsing.m +++ b/extensions/osascript/NSAppleEventDescriptor+Parsing.m @@ -108,7 +108,7 @@ -(id)objectValue { if (!object) { // FIXME: Do better logging here - NSLog(@"ERROR: NSAppleEventDescriptor objectValue is nil. Given descriptorType is: %d", descType); + NSLog(@"ERROR: NSAppleEventDescriptor objectValue is nil. Given descriptorType is: %u", (unsigned int)descType); } return object; diff --git a/extensions/streamdeck/HSStreamDeckDevice.h b/extensions/streamdeck/HSStreamDeckDevice.h index ccfd0430f..a591a31a3 100644 --- a/extensions/streamdeck/HSStreamDeckDevice.h +++ b/extensions/streamdeck/HSStreamDeckDevice.h @@ -20,11 +20,11 @@ #import "streamdeck.h" -typedef enum : NSUInteger { +typedef NS_ENUM(NSUInteger, HSStreamDeckImageCodec) { STREAMDECK_CODEC_UNKNOWN, STREAMDECK_CODEC_BMP, STREAMDECK_CODEC_JPEG, -} HSStreamDeckImageCodec; +}; @interface HSStreamDeckDevice : NSObject { NSString *serialNumberCache; diff --git a/extensions/streamdeck/HSStreamDeckDevice.m b/extensions/streamdeck/HSStreamDeckDevice.m index 9ad4c9e96..248e9f312 100644 --- a/extensions/streamdeck/HSStreamDeckDevice.m +++ b/extensions/streamdeck/HSStreamDeckDevice.m @@ -421,6 +421,9 @@ - (void)setImage:(NSImage *)image forButton:(int)button { case STREAMDECK_CODEC_UNKNOWN: [LuaSkin logError:@"Unknown image codec for hs.streamdeck device"]; break; + default: + [LuaSkin logError:@"Invalid image codec value: %lu", (unsigned long)self.imageCodec]; + break; } // Writing the image to hardware is a device-specific operation, so hand it off to our subclasses @@ -536,6 +539,9 @@ - (void)setLCDImage:(NSImage *)image forEncoder:(int)encoder { case STREAMDECK_CODEC_UNKNOWN: [LuaSkin logError:@"Unknown image codec for hs.streamdeck device"]; break; + default: + [LuaSkin logError:@"Invalid image codec value: %lu", (unsigned long)self.imageCodec]; + break; } // Writing the image to hardware is a device-specific operation, so hand it off to our subclasses From f080c70d2405ab54f39acd727a40fa6eabe40aa2 Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Tue, 3 Jun 2025 17:20:59 -0700 Subject: [PATCH 5/8] compile fixes in format specifiers --- extensions/razer/HSRazerManager.m | 2 +- extensions/screen/libscreen.m | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/extensions/razer/HSRazerManager.m b/extensions/razer/HSRazerManager.m index 6c73f4586..94779911b 100644 --- a/extensions/razer/HSRazerManager.m +++ b/extensions/razer/HSRazerManager.m @@ -19,7 +19,7 @@ static void HIDcallback(void* context, IOReturn result, void* sender, IOHIDValue return; } - NSString *scancodeString = [NSString stringWithFormat:@"%d",scancode]; + NSString *scancodeString = [NSString stringWithFormat:@"%u",scancode]; [device deviceButtonPress:scancodeString pressed:pressed]; } diff --git a/extensions/screen/libscreen.m b/extensions/screen/libscreen.m index c7ee5e573..6679cfa5b 100644 --- a/extensions/screen/libscreen.m +++ b/extensions/screen/libscreen.m @@ -165,7 +165,7 @@ static int screen_currentMode(lua_State* L) { lua_pushnumber(L, mode.depth); lua_setfield(L, -2, "depth"); - lua_pushstring(L, [[NSString stringWithFormat:@"%dx%d@%.0fx %huHz %ubpp", mode.width, mode.height, (double)mode.density, mode.freq, mode.depth] UTF8String]); + lua_pushstring(L, [[NSString stringWithFormat:@"%ux%u@%.0fx %huHz %ubpp", mode.width, mode.height, (double)mode.density, mode.freq, mode.depth] UTF8String]); lua_setfield(L, -2, "desc"); return 1; @@ -225,7 +225,7 @@ static int screen_availableModes(lua_State* L) { lua_setfield(L, -2, "depth"); // Now push this mode table into the list-of-modes table - lua_setfield(L, -2, [[NSString stringWithFormat:@"%dx%d@%.0fx %huHz %ubpp", mode.width, mode.height, (double)mode.density, mode.freq, mode.depth] UTF8String]); + lua_setfield(L, -2, [[NSString stringWithFormat:@"%ux%u@%.0fx %huHz %ubpp", mode.width, mode.height, (double)mode.density, mode.freq, mode.depth] UTF8String]); } return 1; @@ -416,7 +416,7 @@ void storeInitialScreenGamma(CGDirectDisplayID display) { [originalGammas setObject:gammas forKey:[NSNumber numberWithInt:display]]; } else { - [LuaSkin logBreadcrumb:[NSString stringWithFormat:@"storeInitialScreenGamma: ERROR %i on display %i", result, display]]; + [LuaSkin logBreadcrumb:[NSString stringWithFormat:@"storeInitialScreenGamma: ERROR %i on display %u", result, display]]; } free(redTable); @@ -566,7 +566,7 @@ static int screen_gammaSet(lua_State* L) { //NSLog(@"screen_gammaSet: Fetching original gamma for display: %i", screen_id); NSDictionary *originalGamma = [originalGammas objectForKey:[NSNumber numberWithInt:screen_id]]; if (!originalGamma) { - [skin logBreadcrumb:[NSString stringWithFormat:@"screen_gammaSet: unable to fetch original gamma for display: %i", screen_id]]; + [skin logBreadcrumb:[NSString stringWithFormat:@"screen_gammaSet: unable to fetch original gamma for display: %u", screen_id]]; lua_pushboolean(L, false); return 1; } @@ -617,7 +617,7 @@ static int screen_gammaSet(lua_State* L) { free(blueTable); if (result != kCGErrorSuccess) { - [skin logBreadcrumb:[NSString stringWithFormat:@"screen_gammaSet: ERROR: %i on display %i", result, screen_id]]; + [skin logBreadcrumb:[NSString stringWithFormat:@"screen_gammaSet: ERROR: %i on display %u", result, screen_id]]; lua_pushboolean(L, false); return 1; } @@ -872,7 +872,7 @@ void screen_gammaReapply(CGDirectDisplayID display) { CGError result = CGSetDisplayTransferByTable(display, count, redTable, greenTable, blueTable); if (result != kCGErrorSuccess) { - [LuaSkin logBreadcrumb:[NSString stringWithFormat:@"screen_gammaReapply: ERROR: %i on display: %i", result, display]]; + [LuaSkin logBreadcrumb:[NSString stringWithFormat:@"screen_gammaReapply: ERROR: %i on display: %u", result, display]]; } else { //NSLog(@"screen_gammaReapply: Success"); } From 2a571c5aae87ff94fcea6e4e2fb701b44d1454de Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Tue, 3 Jun 2025 17:38:49 -0700 Subject: [PATCH 6/8] add asserts for unhandled MIKMIDICommandTYpe --- extensions/midi/libmidi.m | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions/midi/libmidi.m b/extensions/midi/libmidi.m index f2ee7bf45..c4fcecf1d 100755 --- a/extensions/midi/libmidi.m +++ b/extensions/midi/libmidi.m @@ -765,6 +765,11 @@ static int midi_callback(lua_State *L) { commandTypeString = @"systemKeepAlive"; break; } + default:{ + NSLog(@"Unknown MIKMIDICommandType"); + NSCAssert(NO, @"Unknown MIMIDICOmmandTYpe"); + break; + } }; // @@ -986,6 +991,12 @@ static int midi_callback(lua_State *L) { lua_pushboolean(L, isVirtual); lua_setfield(L, -2, "isVirtual"); break; } + default:{ + NSLog(@"Unknown MIKMIDICommandType"); + NSCAssert(NO, @"Unknown MIMIDICOmmandTYpe"); + break; + } + }; [skin protectedCallAndError:@"hs.midi callback" nargs:5 nresults:0]; From a1ce0de1e95ea49674a893ee363a1f108a54832e Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Wed, 4 Jun 2025 15:28:47 -0700 Subject: [PATCH 7/8] Correct format specifiers --- extensions/hid/libhid.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/hid/libhid.m b/extensions/hid/libhid.m index 7f1065018..11984359b 100644 --- a/extensions/hid/libhid.m +++ b/extensions/hid/libhid.m @@ -46,7 +46,7 @@ static int access_capslock(int op){ if (kr != KERN_SUCCESS) { IOServiceClose(ioc); - fprintf(stderr, "IOHIDSetModifierLockState() failed: %x\n", kr); + fprintf(stderr, "IOHIDSetModifierLockState() failed: %i\n", kr); return (int) kr; } break; @@ -55,7 +55,7 @@ static int access_capslock(int op){ if (kr != KERN_SUCCESS) { IOServiceClose(ioc); - fprintf(stderr, "IOHIDGetModifierLockState() failed: %x\n", kr); + fprintf(stderr, "IOHIDGetModifierLockState() failed: %i\n", kr); return (int) kr; } state = !state; @@ -63,7 +63,7 @@ static int access_capslock(int op){ if (kr != KERN_SUCCESS) { IOServiceClose(ioc); - fprintf(stderr, "IOHIDSetModifierLockState() failed: %x\n", kr); + fprintf(stderr, "IOHIDSetModifierLockState() failed: %i\n", kr); return (int) kr; } break; From f982bb82c1b4abd84a7719b9926e6f627c1bf356 Mon Sep 17 00:00:00 2001 From: Alexis Gallagher Date: Wed, 4 Jun 2025 15:29:02 -0700 Subject: [PATCH 8/8] Add assert for unhandled switch case with caps_lock --- extensions/hid/libhid.m | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/extensions/hid/libhid.m b/extensions/hid/libhid.m index 11984359b..915ba8f8f 100644 --- a/extensions/hid/libhid.m +++ b/extensions/hid/libhid.m @@ -76,8 +76,13 @@ static int access_capslock(int op){ return (int) kr; } break; + default: + { + NSCAssert(NO, @"Unexpected CAPS_LOCK op passed to access_capslock: %i",op); + break; + } } - + IOServiceClose(ioc); return (bool) state; }