From d68023b0885147a7304fdad07edc89b2694c3668 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Thu, 6 Nov 2025 14:07:06 +0100 Subject: [PATCH 01/19] chore: Disable SDK for widget, intent and live activities --- CHANGELOG.md | 2 + Samples/iOS-Swift/iOS-Swift.yml | 35 + .../iOS-Swift/Tools/SentryExposure.h | 4 + Sentry.xcodeproj/project.pbxproj | 8 + .../Sources/TestInfoPlistWrapper.swift | 25 + .../Sources/TestInfoPlistWrapperTests.swift | 145 ++ Sources/Sentry/SentryANRTrackingIntegration.m | 12 + Sources/Sentry/SentrySDKInternal.m | 7 + Sources/Sentry/include/SentryHub+Private.h | 1 + Sources/Swift/Helper/Dependencies.swift | 3 + .../Helper/InfoPlist/SentryInfoPlistKey.swift | 15 +- .../InfoPlist/SentryInfoPlistWrapper.swift | 7 + .../SentryInfoPlistWrapperProvider.swift | 49 +- .../Helper/SentryExtensionDetector.swift | 49 + .../Swift/Helper/SentryExtensionType.swift | 22 + .../SwiftUICrashTest/SwiftUICrashTest.yml | 2 + .../Helper/SentryExtensionDetectorTests.swift | 222 +++ .../Helper/SentryExtensionTypeTests.swift | 16 + .../SentryANRTrackingIntegrationTests.swift | 125 ++ schema/xcodegen.schema.json | 1387 +++++++++++++++++ sdk_api.json | 292 ++++ 21 files changed, 2405 insertions(+), 23 deletions(-) create mode 100644 Sources/Swift/Helper/SentryExtensionDetector.swift create mode 100644 Sources/Swift/Helper/SentryExtensionType.swift create mode 100644 Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift create mode 100644 Tests/SentryTests/Helper/SentryExtensionTypeTests.swift create mode 100644 schema/xcodegen.schema.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f52b037c1e..b4607d16cf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ If you need a precompiled XCFramework built with Xcode 15, continue using Sentry SDK 8.x.x. - Set `SentryException.type` to `nil` when `NSException` has no `reason` (#6653). The backend then can provide a proper message when there is no reason. - Rename `SentryLog.Level` and `SentryLog.Attribute` for ObjC (#6666) +- App hang tracking is now automatically disabled for Widgets, Live Activities, Intent Extensions, and Action Extensions (#6670). + These components run in separate processes or sandboxes with different execution characteristics, which can cause false positive app hang reports. ### Features diff --git a/Samples/iOS-Swift/iOS-Swift.yml b/Samples/iOS-Swift/iOS-Swift.yml index d1bcffea2d1..1325f169362 100644 --- a/Samples/iOS-Swift/iOS-Swift.yml +++ b/Samples/iOS-Swift/iOS-Swift.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: iOS-Swift include: - ../Shared/feature-flags.yml @@ -32,6 +34,7 @@ targets: - target: iOS-SwiftClip - target: SentrySampleShared/SentrySampleShared - target: iOS-Swift-ShareExtension + - target: iOS-Swift-WidgetExtension - target: Sentry/SentrySwiftLog configFiles: Debug: iOS-Swift.xcconfig @@ -107,6 +110,19 @@ targets: Release: iOS-Swift-ShareExtension.xcconfig Test: iOS-Swift-ShareExtension.xcconfig TestCI: iOS-Swift-ShareExtension.xcconfig + iOS-Swift-WidgetExtension: + type: app-extension + platform: auto + sources: + - iOS-Swift-Widget + dependencies: + - target: Sentry/Sentry + - target: SentrySampleShared/SentrySampleShared + configFiles: + Debug: iOS-Swift-WidgetExtension.xcconfig + Release: iOS-Swift-WidgetExtension.xcconfig + Test: iOS-Swift-WidgetExtension.xcconfig + TestCI: iOS-Swift-WidgetExtension.xcconfig schemes: iOS-Swift: templates: @@ -127,3 +143,22 @@ schemes: config: Debug testPlans: - path: ../../Plans/iOS-Benchmarking_Base.xctestplan + iOS-Swift-WidgetExtension: + build: + targets: + iOS-Swift: all + iOS-Swift-WidgetExtension: all + run: + config: Debug + askForAppToLaunch: true + launchAutomaticallySubstyle: 2 + executable: iOS-Swift + debugEnabled: false + environmentVariables: + _XCWidgetKind: io.sentry.sample.iOS-Swift.iOS-Swift-Widget + _XCWidgetDefaultView: timeline + _XCWidgetFamily: systemMedium + profile: + config: Release + askForAppToLaunch: true + executable: iOS-Swift diff --git a/Samples/iOS-Swift/iOS-Swift/Tools/SentryExposure.h b/Samples/iOS-Swift/iOS-Swift/Tools/SentryExposure.h index 7712f4be68e..66643ef8816 100644 --- a/Samples/iOS-Swift/iOS-Swift/Tools/SentryExposure.h +++ b/Samples/iOS-Swift/iOS-Swift/Tools/SentryExposure.h @@ -23,6 +23,8 @@ NS_ASSUME_NONNULL_BEGIN - (nullable SentryClientInternal *)getClient; +- (NSArray *)trimmedInstalledIntegrationNames; + @end @interface SentrySDKInternal : NSObject @@ -31,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN + (SentryHubInternal *)currentHub; ++ (NSArray *)trimmedInstalledIntegrationNames; + @end NS_ASSUME_NONNULL_END diff --git a/Sentry.xcodeproj/project.pbxproj b/Sentry.xcodeproj/project.pbxproj index 8d48bfba522..5f858b45491 100644 --- a/Sentry.xcodeproj/project.pbxproj +++ b/Sentry.xcodeproj/project.pbxproj @@ -786,6 +786,8 @@ D452FE6D2DDC873A00AFF56F /* SentryWatchdogTerminationAttributesProcessorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D452FE6C2DDC873900AFF56F /* SentryWatchdogTerminationAttributesProcessorTests.swift */; }; D452FE6F2DDC890A00AFF56F /* TestFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D452FE6E2DDC890A00AFF56F /* TestFileManager.swift */; }; D452FE712DDC8C4400AFF56F /* SentryWatchdogTerminationBreadcrumbProcessorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D452FE702DDC8C4400AFF56F /* SentryWatchdogTerminationBreadcrumbProcessorTests.swift */; }; + D4563FA92EBA3B73005B33E2 /* SentryExtensionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4563FA72EBA3B73005B33E2 /* SentryExtensionDetector.swift */; }; + D4563FAA2EBA3B73005B33E2 /* SentryExtensionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4563FA82EBA3B73005B33E2 /* SentryExtensionType.swift */; }; D456B4322D706BDF007068CB /* SentrySpanOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D456B4312D706BDD007068CB /* SentrySpanOperation.h */; }; D456B4362D706BF2007068CB /* SentryTraceOrigin.h in Headers */ = {isa = PBXBuildFile; fileRef = D456B4352D706BEE007068CB /* SentryTraceOrigin.h */; }; D456B4382D706BFE007068CB /* SentrySpanDataKey.h in Headers */ = {isa = PBXBuildFile; fileRef = D456B4372D706BFB007068CB /* SentrySpanDataKey.h */; }; @@ -2194,6 +2196,8 @@ D452FE702DDC8C4400AFF56F /* SentryWatchdogTerminationBreadcrumbProcessorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryWatchdogTerminationBreadcrumbProcessorTests.swift; sourceTree = ""; }; D452FE722DDC8DB700AFF56F /* TestSentryWatchdogTerminationAttributesProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestSentryWatchdogTerminationAttributesProcessor.swift; sourceTree = ""; }; D452FE742DDC8DC400AFF56F /* TestSentryWatchdogTerminationBreadcrumbProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestSentryWatchdogTerminationBreadcrumbProcessor.swift; sourceTree = ""; }; + D4563FA72EBA3B73005B33E2 /* SentryExtensionDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryExtensionDetector.swift; sourceTree = ""; }; + D4563FA82EBA3B73005B33E2 /* SentryExtensionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryExtensionType.swift; sourceTree = ""; }; D456B4312D706BDD007068CB /* SentrySpanOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SentrySpanOperation.h; path = include/SentrySpanOperation.h; sourceTree = ""; }; D456B4352D706BEE007068CB /* SentryTraceOrigin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SentryTraceOrigin.h; path = include/SentryTraceOrigin.h; sourceTree = ""; }; D456B4372D706BFB007068CB /* SentrySpanDataKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SentrySpanDataKey.h; path = include/SentrySpanDataKey.h; sourceTree = ""; }; @@ -2748,6 +2752,8 @@ FAEEC04C2E75E55A00E79CA9 /* SentrySerializationSwift.swift */, FAEEBFE92E74517800E79CA9 /* SentryFileManager.swift */, FA94E7232E6F32FA00576666 /* SentryEnvelopeItemType.swift */, + D4563FA72EBA3B73005B33E2 /* SentryExtensionDetector.swift */, + D4563FA82EBA3B73005B33E2 /* SentryExtensionType.swift */, FA458CBD2E691A6E0061B13D /* SentryProcessInfo.swift */, F4A930222E65FDAF006DA6EF /* SentryMobileProvisionParser.swift */, F4FE9DBC2E621F100014FED5 /* SentryRandom.swift */, @@ -6028,6 +6034,8 @@ 15360CED2433A15500112302 /* SentryInstallation.m in Sources */, FAAB95FF2EA301670030A2DB /* SentryWatchdogTerminationScopeObserver.swift in Sources */, D8370B6A273DF1E900F66E2D /* SentryNSURLSessionTaskSearch.m in Sources */, + D4563FA92EBA3B73005B33E2 /* SentryExtensionDetector.swift in Sources */, + D4563FAA2EBA3B73005B33E2 /* SentryExtensionType.swift in Sources */, 63FE711D20DA4C1000CDBAE8 /* SentryCrashCPU_arm64.c in Sources */, 844EDC77294144DB00C86F34 /* SentrySystemWrapper.mm in Sources */, D451ED5F2D92ECDE00C9BEA8 /* SentryReplayFrame.swift in Sources */, diff --git a/SentryTestUtils/Sources/TestInfoPlistWrapper.swift b/SentryTestUtils/Sources/TestInfoPlistWrapper.swift index 0160f2cef94..6c010b51d32 100644 --- a/SentryTestUtils/Sources/TestInfoPlistWrapper.swift +++ b/SentryTestUtils/Sources/TestInfoPlistWrapper.swift @@ -9,6 +9,9 @@ import XCTest public var getAppValueBooleanInvocations = Invocations<(String, NSErrorPointer)>() private var mockedGetAppValueBooleanReturnValue: [String: Result] = [:] + public var getAppValueDictionaryInvocations = Invocations() + private var mockedGetAppValueDictionaryReturnValue: [String: Result<[String: Any], Error>] = [:] + public init() {} public func mockGetAppValueStringReturnValue(forKey key: String, value: String) { @@ -55,4 +58,26 @@ import XCTest return false } } + + public func mockGetAppValueDictionaryReturnValue(forKey key: String, value: [String: Any]) { + mockedGetAppValueDictionaryReturnValue[key] = .success(value) + } + + public func mockGetAppValueDictionaryThrowError(forKey key: String, error: Error) { + mockedGetAppValueDictionaryReturnValue[key] = .failure(error) + } + + public func getAppValueDictionary(for key: String) throws -> [String: Any] { + getAppValueDictionaryInvocations.record(key) + guard let result = mockedGetAppValueDictionaryReturnValue[key] else { + XCTFail("TestInfoPlistWrapper: No mocked return value set for getAppValueDictionary(for:) for key: \(key)") + return [:] + } + switch result { + case .success(let value): + return value + case .failure(let error): + throw error + } + } } diff --git a/SentryTestUtilsTests/Sources/TestInfoPlistWrapperTests.swift b/SentryTestUtilsTests/Sources/TestInfoPlistWrapperTests.swift index de85b628ce5..0e9a9a90d26 100644 --- a/SentryTestUtilsTests/Sources/TestInfoPlistWrapperTests.swift +++ b/SentryTestUtilsTests/Sources/TestInfoPlistWrapperTests.swift @@ -1,3 +1,5 @@ +// swiftlint:disable file_length type_body_length + @_spi(Private) @testable import Sentry @_spi(Private) @testable import SentryTestUtils import XCTest @@ -279,4 +281,147 @@ class TestInfoPlistWrapperTests: XCTestCase { XCTAssertFalse(result2, "Should return false for key2") XCTAssertNil(error2, "Should not set error for key2") } + + // MARK: - getAppValueDictionary(for:) + + func testGetAppValueDictionary_withoutMockedValue_shouldFail() throws { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + // Don't mock any value for this key + + // -- Act & Assert -- + XCTExpectFailure("We are expecting a failure when accessing an unmocked key, as it indicates the test setup is incomplete") + _ = try sut.getAppValueDictionary(for: "unmockedKey") + } + + func testGetAppValueDictionary_withMockedValue_withSingleInvocations_shouldReturnMockedValue() throws { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + let expectedDict = ["key1": "value1", "key2": 123] as [String: Any] + sut.mockGetAppValueDictionaryReturnValue(forKey: "dictKey", value: expectedDict) + + // -- Act -- + let result = try sut.getAppValueDictionary(for: "dictKey") + + // -- Assert -- + XCTAssertEqual(result["key1"] as? String, "value1", "Should return the mocked dictionary") + XCTAssertEqual(result["key2"] as? Int, 123, "Should return the mocked dictionary") + } + + func testGetAppValueDictionary_withMockedValue_withMultipleInvocations_shouldReturnSameValue() throws { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + let expectedDict = ["test": "value"] as [String: Any] + sut.mockGetAppValueDictionaryReturnValue(forKey: "key1", value: expectedDict) + + // -- Act -- + let result1 = try sut.getAppValueDictionary(for: "key1") + let result2 = try sut.getAppValueDictionary(for: "key1") + + // -- Assert -- + XCTAssertEqual(result1["test"] as? String, "value", "First invocation should return mocked value") + XCTAssertEqual(result2["test"] as? String, "value", "Second invocation should return same mocked value") + } + + func testGetAppValueDictionary_shouldRecordInvocations() throws { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + sut.mockGetAppValueDictionaryReturnValue(forKey: "key1", value: ["a": 1]) + sut.mockGetAppValueDictionaryReturnValue(forKey: "key2", value: ["b": 2]) + sut.mockGetAppValueDictionaryReturnValue(forKey: "key3", value: ["c": 3]) + + // -- Act -- + _ = try sut.getAppValueDictionary(for: "key1") + _ = try sut.getAppValueDictionary(for: "key2") + _ = try sut.getAppValueDictionary(for: "key3") + + // -- Assert -- + XCTAssertEqual(sut.getAppValueDictionaryInvocations.count, 3, "Should record all three invocations") + XCTAssertEqual(sut.getAppValueDictionaryInvocations.invocations.element(at: 0), "key1", "First invocation should be for key1") + XCTAssertEqual(sut.getAppValueDictionaryInvocations.invocations.element(at: 1), "key2", "Second invocation should be for key2") + XCTAssertEqual(sut.getAppValueDictionaryInvocations.invocations.element(at: 2), "key3", "Third invocation should be for key3") + } + + func testGetAppValueDictionary_withDifferentKeys_shouldReturnDifferentValues() throws { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + sut.mockGetAppValueDictionaryReturnValue(forKey: "key1", value: ["value": "one"]) + sut.mockGetAppValueDictionaryReturnValue(forKey: "key2", value: ["value": "two"]) + + // -- Act -- + let result1 = try sut.getAppValueDictionary(for: "key1") + let result2 = try sut.getAppValueDictionary(for: "key2") + + // -- Assert -- + XCTAssertEqual(result1["value"] as? String, "one", "Should return 'one' for key1") + XCTAssertEqual(result2["value"] as? String, "two", "Should return 'two' for key2") + XCTAssertEqual(sut.getAppValueDictionaryInvocations.count, 2, "Should record both invocations") + } + + func testGetAppValueDictionary_withFailureResult_shouldThrowError() { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + sut.mockGetAppValueDictionaryThrowError(forKey: "key", error: SentryInfoPlistError.keyNotFound(key: "testKey")) + + // -- Act & Assert -- + XCTAssertThrowsError(try sut.getAppValueDictionary(for: "key")) { error in + guard case SentryInfoPlistError.keyNotFound(let key) = error else { + XCTFail("Expected SentryInfoPlistError.keyNotFound, got \(error)") + return + } + XCTAssertEqual(key, "testKey", "Error should contain the expected key") + } + } + + func testGetAppValueDictionary_withDifferentErrorTypes_shouldThrowCorrectError() { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + + // Test mainInfoPlistNotFound + sut.mockGetAppValueDictionaryThrowError(forKey: "key1", error: SentryInfoPlistError.mainInfoPlistNotFound) + XCTAssertThrowsError(try sut.getAppValueDictionary(for: "key1")) { error in + guard case SentryInfoPlistError.mainInfoPlistNotFound = error else { + XCTFail("Expected SentryInfoPlistError.mainInfoPlistNotFound, got \(error)") + return + } + } + + // Test unableToCastValue + sut.mockGetAppValueDictionaryThrowError(forKey: "key2", error: SentryInfoPlistError.unableToCastValue(key: "castKey", value: "not a dict", type: [String: Any].self)) + XCTAssertThrowsError(try sut.getAppValueDictionary(for: "key2")) { error in + guard case SentryInfoPlistError.unableToCastValue(let key, let value, let type) = error else { + XCTFail("Expected SentryInfoPlistError.unableToCastValue, got \(error)") + return + } + XCTAssertEqual(key, "castKey", "Error should contain the correct key") + XCTAssertEqual(value as? String, "not a dict", "Error should contain the correct value") + XCTAssertTrue(type == [String: Any].self, "Error should contain the correct type") + } + } + + func testGetAppValueDictionary_afterThrowingError_shouldRecordInvocation() { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + sut.mockGetAppValueDictionaryThrowError(forKey: "key1", error: SentryInfoPlistError.keyNotFound(key: "testKey")) + + // -- Act -- + _ = try? sut.getAppValueDictionary(for: "key1") + + // -- Assert -- + XCTAssertEqual(sut.getAppValueDictionaryInvocations.count, 1, "Should record invocation even when throwing error") + XCTAssertEqual(sut.getAppValueDictionaryInvocations.invocations.element(at: 0), "key1", "Should record the correct key") + } + + func testGetAppValueDictionary_withEmptyDictionary_shouldReturnEmptyDictionary() throws { + // -- Arrange -- + let sut = TestInfoPlistWrapper() + sut.mockGetAppValueDictionaryReturnValue(forKey: "key", value: [:]) + + // -- Act -- + let result = try sut.getAppValueDictionary(for: "key") + + // -- Assert -- + XCTAssertTrue(result.isEmpty, "Should return empty dictionary when mocked with empty dictionary") + } } +// swiftlint:enable file_length type_body_length diff --git a/Sources/Sentry/SentryANRTrackingIntegration.m b/Sources/Sentry/SentryANRTrackingIntegration.m index 40addd709b4..f4debc6acdb 100644 --- a/Sources/Sentry/SentryANRTrackingIntegration.m +++ b/Sources/Sentry/SentryANRTrackingIntegration.m @@ -43,6 +43,18 @@ - (BOOL)installWithOptions:(SentryOptions *)options return NO; } + // Disable app hang tracking for Widgets, Live Activities, and certain extensions + // where app hang detection might report false positives. These components run + // in separate processes or sandboxes with different execution characteristics. + SentryExtensionDetector *extensionDetector = SentryDependencies.extensionDetector; + if ([extensionDetector shouldDisableAppHangTracking]) { + NSString *extensionType = [extensionDetector getExtensionPointIdentifier]; + SENTRY_LOG_WARN(@"Not enabling app hang tracking for extension: %@", extensionType); + [self logWithReason:[NSString stringWithFormat:@"because it's running in an extension (%@)", + extensionType]]; + return NO; + } + #if SENTRY_HAS_UIKIT self.tracker = [SentryDependencyContainer.sharedInstance getANRTracker:options.appHangTimeoutInterval]; diff --git a/Sources/Sentry/SentrySDKInternal.m b/Sources/Sentry/SentrySDKInternal.m index bff3ca7211d..89e419e9618 100644 --- a/Sources/Sentry/SentrySDKInternal.m +++ b/Sources/Sentry/SentrySDKInternal.m @@ -778,6 +778,13 @@ + (void)stopProfiler } #endif // SENTRY_HAS_UIKIT +/** Only needed for testing. We can't use `SENTRY_TEST || SENTRY_TEST_CI` because we call this from + * the iOS-Swift sample app. */ ++ (NSArray *)trimmedInstalledIntegrationNames +{ + return [SentrySDKInternal.currentHub trimmedInstalledIntegrationNames]; +} + @end NS_ASSUME_NONNULL_END diff --git a/Sources/Sentry/include/SentryHub+Private.h b/Sources/Sentry/include/SentryHub+Private.h index c47e3c07dfc..fffd8ffc22c 100644 --- a/Sources/Sentry/include/SentryHub+Private.h +++ b/Sources/Sentry/include/SentryHub+Private.h @@ -81,6 +81,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)registerSessionListener:(id)listener; - (void)unregisterSessionListener:(id)listener; - (nullable id)getInstalledIntegration:(Class)integrationClass; +- (NSSet *)installedIntegrationNames; #if SENTRY_TARGET_REPLAY_SUPPORTED - (NSString *__nullable)getSessionReplayId; diff --git a/Sources/Swift/Helper/Dependencies.swift b/Sources/Swift/Helper/Dependencies.swift index 8f1b41eafba..3dbc5656579 100644 --- a/Sources/Swift/Helper/Dependencies.swift +++ b/Sources/Swift/Helper/Dependencies.swift @@ -8,6 +8,9 @@ @objc public static let sessionReplayEnvironmentChecker: SentrySessionReplayEnvironmentChecker = { SentrySessionReplayEnvironmentChecker(infoPlistWrapper: Dependencies.infoPlistWrapper) }() + @objc public static let extensionDetector: SentryExtensionDetector = { + SentryExtensionDetector(infoPlistWrapper: Dependencies.infoPlistWrapper) + }() @objc public static let dispatchQueueWrapper = SentryDispatchQueueWrapper() @objc public static let notificationCenterWrapper: SentryNSNotificationCenterWrapper = NotificationCenter.default @objc public static let crashWrapper = SentryCrashWrapper(processInfoWrapper: Dependencies.processInfoWrapper) diff --git a/Sources/Swift/Helper/InfoPlist/SentryInfoPlistKey.swift b/Sources/Swift/Helper/InfoPlist/SentryInfoPlistKey.swift index 10cf6607acd..f13ca9606ab 100644 --- a/Sources/Swift/Helper/InfoPlist/SentryInfoPlistKey.swift +++ b/Sources/Swift/Helper/InfoPlist/SentryInfoPlistKey.swift @@ -8,8 +8,21 @@ enum SentryInfoPlistKey: String { /// /// If `NO`, the system uses the UI design of the running OS, with no compatibility mode. Absence of the key, or NO, is the default value for apps linking against the latest SDKs. /// - /// - Warning: This key is used temporarily while reviewing and refining an app’s UI for the design in the latest SDKs (i.e. Liquid Glass). + /// - Warning: This key is used temporarily while reviewing and refining an app's UI for the design in the latest SDKs (i.e. Liquid Glass). /// /// - SeeAlso: [Apple Documentation](https://developer.apple.com/documentation/BundleResources/Information-Property-List/UIDesignRequiresCompatibility) case designRequiresCompatibility = "UIDesignRequiresCompatibility" + + /// The extension configuration dictionary for app extensions + /// + /// - SeeAlso: [Apple Documentation](https://developer.apple.com/documentation/bundleresources/information_property_list/nsextension) + case `extension` = "NSExtension" + + /// Keys within the NSExtension dictionary + enum Extension: String { + /// The extension point identifier that specifies the type of app extension + /// + /// - SeeAlso: [Apple Documentation](https://developer.apple.com/documentation/bundleresources/information_property_list/nsextension/nsextensionpointidentifier) + case pointIdentifier = "NSExtensionPointIdentifier" + } } diff --git a/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapper.swift b/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapper.swift index 3b0ed9bafd0..675133162fe 100644 --- a/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapper.swift +++ b/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapper.swift @@ -28,6 +28,13 @@ final class SentryInfoPlistWrapper: SentryInfoPlistWrapperProvider { return value } + public func getAppValueDictionary(for key: String) throws -> [String: Any] { + guard let value = try getAppValue(for: key, type: [String: Any].self) else { + throw SentryInfoPlistError.keyNotFound(key: key) + } + return value + } + // MARK: - Swift Implementation private func getAppValue(for key: String, type: T.Type) throws -> T? { diff --git a/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapperProvider.swift b/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapperProvider.swift index 0ff95929ba9..3c2a70c8541 100644 --- a/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapperProvider.swift +++ b/Sources/Swift/Helper/InfoPlist/SentryInfoPlistWrapperProvider.swift @@ -1,27 +1,32 @@ protocol SentryInfoPlistWrapperProvider { - /** - * Retrieves a value from the app's `Info.plist` file for the given key and trys to cast it to a ``String``. - * - * - Parameter key: The key for which to retrieve the value from the `Info.plist`. - * - Throws: An error if the value cannot be cast to type ``String`` or ``SentryInfoPlistError.keyNotFound`` if the key was not found or the value is `nil` - * - Returns: The value associated with the specified key cast to type ``String`` - * - Note: The return value can not be nullable, because a throwing function in Objective-C uses `nil` to indicate an error: - * - * Throwing method cannot be a member of an '@objc' protocol because it returns a value of optional type 'String?'; 'nil' indicates failure to Objective-C - */ + /// Retrieves a value from the app's `Info.plist` file for the given key and tries to cast it to a `String`. + /// + /// - Parameter key: The key for which to retrieve the value from the `Info.plist`. + /// - Throws: An error if the value cannot be cast to type `String` or `SentryInfoPlistError.keyNotFound` if the key was not found or the value is `nil` + /// - Returns: The value associated with the specified key cast to type `String` + /// - Note: The return value can not be nullable, because a throwing function in Objective-C uses `nil` to indicate an error: + /// + /// Throwing method cannot be a member of an '@objc' protocol because it returns a value of optional type 'String?'; 'nil' indicates failure to Objective-C func getAppValueString(for key: String) throws -> String - /** - * Retrieves a value from the app's `Info.plist` file for the given key and trys to cast it to a ``Bool``. - * - * - Parameters - * - key: The key for which to retrieve the value from the `Info.plist`. - * - error: A pointer to a an `NSError` to return an error value. - * - Throws: An error if the value cannot be cast to type ``String`` or ``SentryInfoPlistError.keyNotFound`` if the value is `nil` - * - Returns: The value associated with the specified key cast to type ``String`` - * - Note: This method can not use `throws` because a falsy return value would indicate an error in Objective-C: - * - * Throwing method cannot be a member of an '@objc' protocol because it returns a value of type 'Bool'; return 'Void' or a type that bridges to an Objective-C class - */ + /// Retrieves a value from the app's `Info.plist` file for the given key and tries to cast it to a `Bool`. + /// + /// - Parameters: + /// - key: The key for which to retrieve the value from the `Info.plist`. + /// - errorPtr: A pointer to an `NSError` to return an error value. + /// - Returns: The value associated with the specified key cast to type `Bool` + /// - Note: This method can not use `throws` because a falsy return value would indicate an error in Objective-C: + /// + /// Throwing method cannot be a member of an '@objc' protocol because it returns a value of type 'Bool'; return 'Void' or a type that bridges to an Objective-C class func getAppValueBoolean(for key: String, errorPtr: NSErrorPointer) -> Bool + + /// Retrieves a value from the app's `Info.plist` file for the given key and tries to cast it to a `[String: Any]` dictionary. + /// + /// - Parameter key: The key for which to retrieve the value from the `Info.plist`. + /// - Throws: An error if the value cannot be cast to type `[String: Any]` or `SentryInfoPlistError.keyNotFound` if the key was not found or the value is `nil` + /// - Returns: The value associated with the specified key cast to type `[String: Any]` + /// - Note: The return value can not be nullable, because a throwing function in Objective-C uses `nil` to indicate an error: + /// + /// Throwing method cannot be a member of an '@objc' protocol because it returns a value of optional type '[String: Any]?'; 'nil' indicates failure to Objective-C + func getAppValueDictionary(for key: String) throws -> [String: Any] } diff --git a/Sources/Swift/Helper/SentryExtensionDetector.swift b/Sources/Swift/Helper/SentryExtensionDetector.swift new file mode 100644 index 00000000000..34babea80ba --- /dev/null +++ b/Sources/Swift/Helper/SentryExtensionDetector.swift @@ -0,0 +1,49 @@ +import Foundation + +@_spi(Private) public final class SentryExtensionDetector: NSObject { + /// All extension types where app hang tracking should be disabled + private static var disabledAppHangTypes: [SentryExtensionType] { + return [.widget, .intent, .action] + } + + private let infoPlistWrapper: SentryInfoPlistWrapperProvider + + init(infoPlistWrapper: SentryInfoPlistWrapperProvider) { + self.infoPlistWrapper = infoPlistWrapper + super.init() + } + + /// Detects if the current process is running in any extension where app hang tracking should be disabled. + @objc public func shouldDisableAppHangTracking() -> Bool { + guard let extensionPointIdentifier = getExtensionPointIdentifier() else { + return false + } + return Self.disabledAppHangTypes.contains { $0.identifier == extensionPointIdentifier } + } + + /// Returns the NSExtensionPointIdentifier from the Bundle's Info.plist, if present. + @objc public func getExtensionPointIdentifier() -> String? { + do { + let extensionDict = try infoPlistWrapper.getAppValueDictionary( + for: SentryInfoPlistKey.extension.rawValue + ) + guard let pointIdentifier = extensionDict[SentryInfoPlistKey.Extension.pointIdentifier.rawValue] as? String else { + // NSExtensionPointIdentifier not found in NSExtension dictionary + return nil + } + return pointIdentifier + } catch SentryInfoPlistError.mainInfoPlistNotFound { + // Info.plist not found - not an extension + return nil + } catch SentryInfoPlistError.keyNotFound { + // NSExtension key not found - not an extension + return nil + } catch SentryInfoPlistError.unableToCastValue(let key, let value, let type) { + SentrySDKLog.error("Failed to cast NSExtension value for key '\(key)': \(value) to type \(type)") + return nil + } catch { + SentrySDKLog.error("Unexpected error reading extension info from Info.plist: \(error)") + return nil + } + } +} diff --git a/Sources/Swift/Helper/SentryExtensionType.swift b/Sources/Swift/Helper/SentryExtensionType.swift new file mode 100644 index 00000000000..070be34da7f --- /dev/null +++ b/Sources/Swift/Helper/SentryExtensionType.swift @@ -0,0 +1,22 @@ +/// Extension point identifiers for common iOS extension types +@_spi(Private) @objc +public enum SentryExtensionType: Int { + /// WidgetKit extensions (includes Widgets and Live Activities) + case widget + /// Intents extensions + case intent + /// Action extensions (share, today, etc.) + case action + + /// Returns the NSExtensionPointIdentifier string for this extension type + public var identifier: String { + switch self { + case .widget: + return "com.apple.widgetkit-extension" + case .intent: + return "com.apple.intents-service" + case .action: + return "com.apple.ui-services" + } + } +} diff --git a/TestSamples/SwiftUICrashTest/SwiftUICrashTest.yml b/TestSamples/SwiftUICrashTest/SwiftUICrashTest.yml index b95cbb5865f..6da04599440 100644 --- a/TestSamples/SwiftUICrashTest/SwiftUICrashTest.yml +++ b/TestSamples/SwiftUICrashTest/SwiftUICrashTest.yml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + name: SwiftUICrashTest createIntermediateGroups: true generateEmptyDirectories: true diff --git a/Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift b/Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift new file mode 100644 index 00000000000..b7f27ad95ca --- /dev/null +++ b/Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift @@ -0,0 +1,222 @@ +@_spi(Private) @testable import Sentry +@_spi(Private) import SentryTestUtils +import XCTest + +final class SentryExtensionDetectorTests: XCTestCase { + + private var infoPlistWrapper: TestInfoPlistWrapper! + private var sut: SentryExtensionDetector! + + override func setUp() { + super.setUp() + infoPlistWrapper = TestInfoPlistWrapper() + + // Default: NSExtension key not found (not an extension) + infoPlistWrapper.mockGetAppValueDictionaryThrowError( + forKey: SentryInfoPlistKey.extension.rawValue, + error: SentryInfoPlistError.keyNotFound(key: SentryInfoPlistKey.extension.rawValue) + ) + + sut = SentryExtensionDetector(infoPlistWrapper: infoPlistWrapper) + } + + override func tearDown() { + sut = nil + infoPlistWrapper = nil + super.tearDown() + } + + // MARK: - Extension Point Identifier Detection + + func testGetExtensionPointIdentifier_notAnExtension() { + // Arrange & Act + let extensionPointIdentifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertNil(extensionPointIdentifier, "Non-extension should return nil") + } + + func testGetExtensionPointIdentifier_widgetExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.widgetkit-extension"] + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertEqual(identifier, "com.apple.widgetkit-extension") + } + + func testGetExtensionPointIdentifier_intentExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.intents-service"] + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertEqual(identifier, "com.apple.intents-service") + } + + func testGetExtensionPointIdentifier_actionExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.ui-services"] + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertEqual(identifier, "com.apple.ui-services") + } + + // MARK: - App Hang Tracking Disable Detection + + func testShouldDisableAppHangTracking_notAnExtension() { + // Arrange & Act + let shouldDisable = sut.shouldDisableAppHangTracking() + + // Assert + XCTAssertFalse(shouldDisable, "Non-extension should not disable app hang tracking") + } + + func testShouldDisableAppHangTracking_widgetExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.widgetkit-extension"] + ) + + // Act + let shouldDisable = sut.shouldDisableAppHangTracking() + + // Assert + XCTAssertTrue(shouldDisable, "Widget extension should disable app hang tracking") + } + + func testShouldDisableAppHangTracking_intentExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.intents-service"] + ) + + // Act + let shouldDisable = sut.shouldDisableAppHangTracking() + + // Assert + XCTAssertTrue(shouldDisable, "Intent extension should disable app hang tracking") + } + + func testShouldDisableAppHangTracking_actionExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.ui-services"] + ) + + // Act + let shouldDisable = sut.shouldDisableAppHangTracking() + + // Assert + XCTAssertTrue(shouldDisable, "Action extension should disable app hang tracking") + } + + func testShouldDisableAppHangTracking_unknownExtension() { + // Arrange - extension with unknown identifier + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.unknown-extension"] + ) + + // Act + let shouldDisable = sut.shouldDisableAppHangTracking() + + // Assert + XCTAssertFalse(shouldDisable, "Unknown extension type should not disable app hang tracking") + } + + // MARK: - Error Handling Tests + + func testGetExtensionPointIdentifier_withInfoPlistNotFound_returnsNil() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryThrowError( + forKey: SentryInfoPlistKey.extension.rawValue, + error: SentryInfoPlistError.mainInfoPlistNotFound + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertNil(identifier, "Missing Info.plist should return nil") + } + + func testGetExtensionPointIdentifier_withKeyNotFound_returnsNil() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryThrowError( + forKey: SentryInfoPlistKey.extension.rawValue, + error: SentryInfoPlistError.keyNotFound(key: SentryInfoPlistKey.extension.rawValue) + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertNil(identifier, "Missing NSExtension key should return nil") + } + + func testGetExtensionPointIdentifier_withUnableToCast_returnsNil() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryThrowError( + forKey: SentryInfoPlistKey.extension.rawValue, + error: SentryInfoPlistError.unableToCastValue( + key: SentryInfoPlistKey.extension.rawValue, + value: "not a dictionary", + type: [String: Any].self + ) + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertNil(identifier, "Cast error should return nil") + } + + func testGetExtensionPointIdentifier_withMissingPointIdentifier_returnsNil() { + // Arrange - NSExtension exists but NSExtensionPointIdentifier is missing + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: [:] // Empty dictionary + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertNil(identifier, "Missing NSExtensionPointIdentifier in dictionary should return nil") + } + + func testGetExtensionPointIdentifier_withWrongTypePointIdentifier_returnsNil() { + // Arrange - NSExtensionPointIdentifier exists but is wrong type + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": 123] // Integer instead of String + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertNil(identifier, "Wrong type for NSExtensionPointIdentifier should return nil") + } +} diff --git a/Tests/SentryTests/Helper/SentryExtensionTypeTests.swift b/Tests/SentryTests/Helper/SentryExtensionTypeTests.swift new file mode 100644 index 00000000000..fe779bac362 --- /dev/null +++ b/Tests/SentryTests/Helper/SentryExtensionTypeTests.swift @@ -0,0 +1,16 @@ +@_spi(Private) @testable import Sentry +import XCTest + +final class SentryExtensionTypeTests: XCTestCase { + func testWidget_shouldReturnExpectedIdentifier() { + XCTAssertEqual(SentryExtensionType.widget.identifier, "com.apple.widgetkit-extension") + } + + func testIntent_shouldReturnExpectedIdentifier() { + XCTAssertEqual(SentryExtensionType.intent.identifier, "com.apple.intents-service") + } + + func testAction_shouldReturnExpectedIdentifier() { + XCTAssertEqual(SentryExtensionType.action.identifier, "com.apple.ui-services") + } +} diff --git a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift index dd9729621e3..a444408da17 100644 --- a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift +++ b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift @@ -722,6 +722,131 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { XCTAssertFalse(Event().isAppHangEvent) } + func testInstall_notRunningInExtension_shouldInstall() { + // Arrange + let mockInfoPlist = TestInfoPlistWrapper() + mockInfoPlist.mockGetAppValueDictionaryThrowError( + forKey: SentryInfoPlistKey.extension.rawValue, + error: SentryInfoPlistError.keyNotFound(key: SentryInfoPlistKey.extension.rawValue) + ) + Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) + + let options = Options() + options.dsn = SentryANRTrackingIntegrationTests.dsn + options.enableAppHangTracking = true + options.appHangTimeoutInterval = 2.0 + + crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() + + // Act + let result = sut.install(with: options) + + // Assert + XCTAssertTrue(result, "Should install when not running in an extension") + XCTAssertNotNil(Dynamic(sut).tracker.asAnyObject, "Tracker should be initialized") + } + + func testInstall_runningInWidgetExtension_shouldNotInstall() { + // Arrange + let mockInfoPlist = TestInfoPlistWrapper() + mockInfoPlist.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.widgetkit-extension"] + ) + Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) + + let options = Options() + options.dsn = SentryANRTrackingIntegrationTests.dsn + options.enableAppHangTracking = true + options.appHangTimeoutInterval = 2.0 + + crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() + + // Act + let result = sut.install(with: options) + + // Assert + XCTAssertFalse(result, "Should not install when running in a Widget extension") + XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") + } + + func testInstall_runningInIntentExtension_shouldNotInstall() { + // Arrange + let mockInfoPlist = TestInfoPlistWrapper() + mockInfoPlist.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.intents-service"] + ) + Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) + + let options = Options() + options.dsn = SentryANRTrackingIntegrationTests.dsn + options.enableAppHangTracking = true + options.appHangTimeoutInterval = 2.0 + + crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() + + // Act + let result = sut.install(with: options) + + // Assert + XCTAssertFalse(result, "Should not install when running in an Intent extension") + XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") + } + + func testInstall_runningInActionExtension_shouldNotInstall() { + // Arrange + let mockInfoPlist = TestInfoPlistWrapper() + mockInfoPlist.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.ui-services"] + ) + Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) + + let options = Options() + options.dsn = SentryANRTrackingIntegrationTests.dsn + options.enableAppHangTracking = true + options.appHangTimeoutInterval = 2.0 + + crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() + + // Act + let result = sut.install(with: options) + + // Assert + XCTAssertFalse(result, "Should not install when running in an Action extension") + XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") + } + + func testInstall_runningInUnknownExtension_shouldInstall() { + // Arrange + let mockInfoPlist = TestInfoPlistWrapper() + mockInfoPlist.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.unknown-extension"] + ) + Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) + + let options = Options() + options.dsn = SentryANRTrackingIntegrationTests.dsn + options.enableAppHangTracking = true + options.appHangTimeoutInterval = 2.0 + + crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() + + // Act + let result = sut.install(with: options) + + // Assert + XCTAssertTrue(result, "Should install when running in an unknown extension type") + XCTAssertNotNil(Dynamic(sut).tracker.asAnyObject, "Tracker should be initialized") + } + private func givenInitializedTracker(isBeingTraced: Bool = false, crashedLastLaunch: Bool = false) { givenSdkWithHub() diff --git a/schema/xcodegen.schema.json b/schema/xcodegen.schema.json new file mode 100644 index 00000000000..d7899cbe379 --- /dev/null +++ b/schema/xcodegen.schema.json @@ -0,0 +1,1387 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://xcodegen.github.io/XcodeGen/schema.json", + "title": "XcodeGen Project Spec", + "description": "Schema for XcodeGen project specification files", + "type": "object", + "required": ["name"], + "properties": { + "name": { + "type": "string", + "description": "Name of the generated project" + }, + "include": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "relativePaths": { + "type": "boolean" + }, + "enable": { + "type": "boolean" + } + }, + "required": ["path"] + } + ] + } + } + ], + "description": "One or more paths to other specs" + }, + "createIntermediateGroups": { + "type": "boolean", + "description": "If true, intermediate groups will be created for every path component" + }, + "generateEmptyDirectories": { + "type": "boolean", + "description": "Generate empty directories in the project" + }, + "options": { + "type": "object", + "properties": { + "minimumXcodeGenVersion": { + "type": "string" + }, + "carthageBuildPath": { + "type": "string" + }, + "carthageExecutablePath": { + "type": "string" + }, + "createIntermediateGroups": { + "type": "boolean" + }, + "bundleIdPrefix": { + "type": "string" + }, + "settingPresets": { + "type": "string", + "enum": ["all", "none", "project", "targets"] + }, + "developmentLanguage": { + "type": "string" + }, + "xcodeVersion": { + "type": "string" + }, + "deploymentTarget": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "transitivelyLinkDependencies": { + "type": "boolean" + }, + "groupSortPosition": { + "type": "string", + "enum": ["top", "bottom", "none"] + }, + "generateEmptyDirectories": { + "type": "boolean" + }, + "schemePathPrefix": { + "type": "string" + }, + "usesTabs": { + "type": "boolean" + }, + "indentWidth": { + "type": "integer" + }, + "tabWidth": { + "type": "integer" + } + } + }, + "attributes": { + "type": "object", + "additionalProperties": true, + "description": "PBXProject attributes" + }, + "breakpoints": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "breakpoints": { + "type": "array", + "items": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "continueAfterRunningActions": { + "type": "boolean" + }, + "actions": { + "type": "array", + "items": { + "type": "object" + } + } + } + } + } + } + } + }, + "configs": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": ["debug", "release"] + }, + "description": "Project build configurations" + }, + "configFiles": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": ".xcconfig files per config" + }, + "settings": { + "$ref": "#/definitions/Settings", + "description": "Project specific settings" + }, + "settingGroups": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": true + } + }, + "targets": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Target" + } + }, + "fileGroups": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of paths to add to the root of the project" + }, + "schemes": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Scheme" + } + }, + "schemeTemplates": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Scheme" + } + }, + "targetTemplates": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Target" + } + }, + "packages": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/definitions/RemotePackage" + }, + { + "$ref": "#/definitions/LocalPackage" + } + ] + } + }, + "projectReferences": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ProjectReference" + } + } + }, + "definitions": { + "Target": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "application", + "application.on-demand-install-capable", + "app-extension", + "bundle", + "bundle.ui-testing", + "bundle.unit-test", + "command-line-tool", + "framework", + "framework.static", + "instruments-package", + "library.dynamic", + "library.static", + "oc-unit-test-bundle", + "sticker-pack-extension", + "tv-app-extension", + "watch-app", + "watchkit-extension", + "watchkit2-extension", + "xpc-service" + ] + }, + "platform": { + "oneOf": [ + { + "type": "string", + "enum": ["auto", "iOS", "macOS", "tvOS", "watchOS", "visionOS"] + }, + { + "type": "array", + "items": { + "type": "string", + "enum": ["iOS", "macOS", "tvOS", "watchOS", "visionOS"] + } + } + ] + }, + "supportedDestinations": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "sources": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/TargetSource" + } + ] + } + } + ] + }, + "dependencies": { + "type": "array", + "items": { + "$ref": "#/definitions/Dependency" + } + }, + "configFiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "plist": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": true + } + }, + "required": ["path"] + } + ] + }, + "buildToolPlugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "plugin": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "required": ["plugin"] + } + }, + "preBuildScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "postBuildScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "preCompileScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "postCompileScripts": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildScript" + } + }, + "buildRules": { + "type": "array", + "items": { + "$ref": "#/definitions/BuildRule" + } + }, + "scheme": { + "$ref": "#/definitions/TargetScheme" + }, + "legacy": { + "$ref": "#/definitions/LegacyTarget" + }, + "template": { + "type": "string" + }, + "templateAttributes": { + "type": "object", + "additionalProperties": true + }, + "settings": { + "$ref": "#/definitions/Settings" + } + }, + "additionalProperties": false + }, + "TargetSource": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "name": { + "type": "string" + }, + "createIntermediateGroups": { + "type": "boolean" + }, + "excludes": { + "type": "array", + "items": { + "type": "string" + } + }, + "includes": { + "type": "array", + "items": { + "type": "string" + } + }, + "compilerFlags": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerVisibility": { + "type": "string", + "enum": ["public", "private", "project"] + }, + "type": { + "type": "string", + "enum": ["file", "folder", "group"] + } + }, + "required": ["path"] + }, + "Dependency": { + "oneOf": [ + { + "type": "object", + "properties": { + "target": { + "type": "string" + }, + "embed": { + "type": "boolean" + }, + "codeSign": { + "type": "boolean" + }, + "removeHeaders": { + "type": "boolean" + }, + "link": { + "type": "boolean" + }, + "weak": { + "type": "boolean" + }, + "platforms": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["target"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "package": { + "type": "string" + }, + "product": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": ["package"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "sdk": { + "type": "string" + } + }, + "required": ["sdk"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "carthage": { + "type": "string" + }, + "findFrameworks": { + "type": "boolean" + }, + "linkType": { + "type": "string", + "enum": ["dynamic", "static"] + } + }, + "required": ["carthage"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "framework": { + "type": "string" + }, + "embed": { + "type": "boolean" + }, + "codeSign": { + "type": "boolean" + }, + "weak": { + "type": "boolean" + } + }, + "required": ["framework"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "git": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "commit": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "submodules": { + "type": "boolean" + } + }, + "required": ["git"], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "xctest": { + "type": "boolean" + } + }, + "required": ["xctest"], + "additionalProperties": false + } + ] + }, + "BuildScript": { + "type": "object", + "properties": { + "script": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "name": { + "type": "string" + }, + "shell": { + "type": "string" + }, + "inputFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "outputFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "inputFileLists": { + "type": "array", + "items": { + "type": "string" + } + }, + "outputFileLists": { + "type": "array", + "items": { + "type": "string" + } + }, + "showEnvVars": { + "type": "boolean" + }, + "basedOnDependencyAnalysis": { + "type": "boolean" + }, + "runOnlyWhenInstalling": { + "type": "boolean" + } + }, + "required": ["script"] + }, + "BuildRule": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "filePattern": { + "type": "string" + }, + "fileType": { + "type": "string" + }, + "script": { + "type": "string" + }, + "outputFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "outputFilesCompilerFlags": { + "type": "array", + "items": { + "type": "string" + } + }, + "compilerSpec": { + "type": "string" + } + } + }, + "TargetScheme": { + "type": "object", + "properties": { + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + }, + "gatherCoverageData": { + "type": "boolean" + }, + "coverageTargets": { + "type": "array", + "items": { + "type": "string" + } + }, + "preActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "postActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "testTargets": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/TestableTargetReference" + } + ] + } + }, + "testPlans": { + "type": "array", + "items": { + "$ref": "#/definitions/TestPlan" + } + } + } + }, + "LegacyTarget": { + "type": "object", + "properties": { + "toolPath": { + "type": "string" + }, + "passBuildSettingsInEnvironment": { + "type": "boolean" + }, + "buildArgumentsString": { + "type": "string" + }, + "buildWorkingDirectory": { + "type": "string" + } + }, + "required": ["toolPath"] + }, + "Scheme": { + "type": "object", + "properties": { + "templates": { + "type": "array", + "items": { + "type": "string" + } + }, + "templateAttributes": { + "type": "object", + "additionalProperties": true + }, + "build": { + "$ref": "#/definitions/Build" + }, + "run": { + "$ref": "#/definitions/RunAction" + }, + "test": { + "$ref": "#/definitions/TestAction" + }, + "profile": { + "$ref": "#/definitions/ProfileAction" + }, + "analyze": { + "$ref": "#/definitions/AnalyzeAction" + }, + "archive": { + "$ref": "#/definitions/ArchiveAction" + }, + "shared": { + "type": "boolean" + }, + "orderHint": { + "type": "integer" + }, + "isShown": { + "type": "boolean" + } + } + }, + "Build": { + "type": "object", + "properties": { + "targets": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string", + "enum": ["all", "test", "run", "profile", "analyze", "archive"] + }, + { + "type": "array", + "items": { + "type": "string", + "enum": ["all", "test", "run", "profile", "analyze", "archive"] + } + } + ] + } + }, + "parallelizeBuild": { + "type": "boolean" + }, + "buildImplicitDependencies": { + "type": "boolean" + }, + "preActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "postActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + } + } + }, + "ExecutionAction": { + "type": "object", + "properties": { + "script": { + "type": "string" + }, + "name": { + "type": "string" + }, + "actionType": { + "type": "string", + "enum": ["shellScriptAction"] + }, + "shell": { + "type": "string" + }, + "target": { + "type": "string" + } + }, + "required": ["script"] + }, + "RunAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "executable": { + "type": "string" + }, + "askForAppToLaunch": { + "type": "boolean" + }, + "launchAutomaticallySubstyle": { + "type": "integer" + }, + "debugEnabled": { + "type": "boolean" + }, + "storeKitConfigurationFileReference": { + "type": "string" + }, + "locationScenarioReference": { + "type": "string" + }, + "enableGPUFrameCaptureMode": { + "type": "integer", + "enum": [0, 1, 2] + }, + "enableAddressSanitizer": { + "type": "boolean" + }, + "enableThreadSanitizer": { + "type": "boolean" + }, + "enableUBSanitizer": { + "type": "boolean" + }, + "stopOnEveryMainThreadCheckerIssue": { + "type": "boolean" + }, + "stopOnEveryUBSanitizerIssue": { + "type": "boolean" + }, + "disableMainThreadChecker": { + "type": "boolean" + }, + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + } + } + } + ] + }, + "TestAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "targets": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/TestableTargetReference" + } + ] + } + }, + "gatherCoverageData": { + "type": "boolean" + }, + "coverageTargets": { + "type": "array", + "items": { + "type": "string" + } + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "location": { + "type": "string" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "testPlans": { + "type": "array", + "items": { + "$ref": "#/definitions/TestPlan" + } + }, + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + } + } + } + ] + }, + "TestableTargetReference": { + "oneOf": [ + { + "type": "object", + "properties": { + "target": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["target"] + }, + { + "type": "object", + "properties": { + "package": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["package"] + }, + { + "type": "object", + "properties": { + "local": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["local"] + }, + { + "type": "object", + "properties": { + "project": { + "type": "string" + }, + "parallelizable": { + "type": "boolean" + }, + "randomExecutionOrder": { + "type": "boolean" + }, + "skipped": { + "type": "boolean" + }, + "skippedTests": { + "type": "array", + "items": { + "type": "string" + } + }, + "selectedTests": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["project"] + } + ] + }, + "TestPlan": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "defaultPlan": { + "type": "boolean" + } + }, + "required": ["path"] + }, + "ProfileAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "executable": { + "type": "string" + }, + "askForAppToLaunch": { + "type": "boolean" + }, + "commandLineArguments": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "environmentVariables": { + "oneOf": [ + { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentVariable" + } + } + ] + } + } + } + ] + }, + "AnalyzeAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + } + ] + }, + "ArchiveAction": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/CommonBuildAction" + }, + { + "type": "object", + "properties": { + "customArchiveName": { + "type": "string" + }, + "revealArchiveInOrganizer": { + "type": "boolean" + } + } + } + ] + }, + "CommonBuildAction": { + "type": "object", + "properties": { + "config": { + "type": "string" + }, + "preActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + }, + "postActions": { + "type": "array", + "items": { + "$ref": "#/definitions/ExecutionAction" + } + } + } + }, + "EnvironmentVariable": { + "type": "object", + "properties": { + "variable": { + "type": "string" + }, + "value": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + } + }, + "required": ["variable", "value"] + }, + "RemotePackage": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri" + }, + "version": { + "type": "string" + }, + "majorVersion": { + "type": "string" + }, + "minorVersion": { + "type": "string" + }, + "exactVersion": { + "type": "string" + }, + "from": { + "type": "string" + }, + "minVersion": { + "type": "string" + }, + "maxVersion": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "revision": { + "type": "string" + }, + "github": { + "type": "string" + } + }, + "required": ["url"] + }, + "LocalPackage": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "group": { + "type": "string" + }, + "excludeFromProject": { + "type": "boolean" + } + }, + "required": ["path"] + }, + "ProjectReference": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": ["path"] + }, + "Settings": { + "type": "object", + "properties": { + "configs": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + } + }, + "description": "Per-configuration build settings" + }, + "base": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "description": "Base build settings applied to all configurations" + } + }, + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "description": "Build settings that can include base settings and per-configuration settings" + } + } +} diff --git a/sdk_api.json b/sdk_api.json index df857cc9c00..6cae44b0759 100644 --- a/sdk_api.json +++ b/sdk_api.json @@ -25903,6 +25903,298 @@ "isLet": true, "hasStorage": true }, + { + "kind": "TypeDecl", + "name": "SentryExtensionType", + "printedName": "SentryExtensionType", + "children": [ + { + "kind": "Constructor", + "name": "init", + "printedName": "init(rawValue:)", + "children": [ + { + "kind": "TypeNominal", + "name": "Optional", + "printedName": "Sentry.SentryExtensionType?", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + } + ], + "usr": "s:Sq" + }, + { + "kind": "TypeNominal", + "name": "Int", + "printedName": "Swift.Int", + "usr": "s:Si" + } + ], + "declKind": "Constructor", + "usr": "s:So19SentryExtensionTypeV8rawValueABSgSi_tcfc", + "mangledName": "$sSo19SentryExtensionTypeV8rawValueABSgSi_tcfc", + "moduleName": "Sentry", + "implicit": true, + "init_kind": "Designated" + }, + { + "kind": "Var", + "name": "rawValue", + "printedName": "rawValue", + "children": [ + { + "kind": "TypeNominal", + "name": "Int", + "printedName": "Swift.Int", + "usr": "s:Si" + } + ], + "declKind": "Var", + "usr": "s:So19SentryExtensionTypeV8rawValueSivp", + "mangledName": "$sSo19SentryExtensionTypeV8rawValueSivp", + "moduleName": "Sentry", + "implicit": true, + "accessors": [ + { + "kind": "Accessor", + "name": "Get", + "printedName": "Get()", + "children": [ + { + "kind": "TypeNominal", + "name": "Int", + "printedName": "Swift.Int", + "usr": "s:Si" + } + ], + "declKind": "Accessor", + "usr": "s:So19SentryExtensionTypeV8rawValueSivg", + "mangledName": "$sSo19SentryExtensionTypeV8rawValueSivg", + "moduleName": "Sentry", + "implicit": true, + "accessorKind": "get" + } + ] + }, + { + "kind": "TypeAlias", + "name": "RawValue", + "printedName": "RawValue", + "children": [ + { + "kind": "TypeNominal", + "name": "Int", + "printedName": "Swift.Int", + "usr": "s:Si" + } + ], + "declKind": "TypeAlias", + "usr": "s:So19SentryExtensionTypeV8RawValuea", + "mangledName": "$sSo19SentryExtensionTypeV8RawValuea", + "moduleName": "Sentry", + "implicit": true + }, + { + "kind": "Var", + "name": "widget", + "printedName": "widget", + "children": [ + { + "kind": "TypeFunc", + "name": "Function", + "printedName": "(Sentry.SentryExtensionType.Type) -> Sentry.SentryExtensionType", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + }, + { + "kind": "TypeNominal", + "name": "Metatype", + "printedName": "Sentry.SentryExtensionType.Type", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + } + ] + } + ] + } + ], + "declKind": "EnumElement", + "usr": "c:@M@Sentry@E@SentryExtensionType@SentryExtensionTypeWidget", + "moduleName": "Sentry", + "declAttributes": [ + "ObjC" + ] + }, + { + "kind": "Var", + "name": "intent", + "printedName": "intent", + "children": [ + { + "kind": "TypeFunc", + "name": "Function", + "printedName": "(Sentry.SentryExtensionType.Type) -> Sentry.SentryExtensionType", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + }, + { + "kind": "TypeNominal", + "name": "Metatype", + "printedName": "Sentry.SentryExtensionType.Type", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + } + ] + } + ] + } + ], + "declKind": "EnumElement", + "usr": "c:@M@Sentry@E@SentryExtensionType@SentryExtensionTypeIntent", + "moduleName": "Sentry", + "declAttributes": [ + "ObjC" + ] + }, + { + "kind": "Var", + "name": "action", + "printedName": "action", + "children": [ + { + "kind": "TypeFunc", + "name": "Function", + "printedName": "(Sentry.SentryExtensionType.Type) -> Sentry.SentryExtensionType", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + }, + { + "kind": "TypeNominal", + "name": "Metatype", + "printedName": "Sentry.SentryExtensionType.Type", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + } + ] + } + ] + } + ], + "declKind": "EnumElement", + "usr": "c:@M@Sentry@E@SentryExtensionType@SentryExtensionTypeAction", + "moduleName": "Sentry", + "declAttributes": [ + "ObjC" + ] + } + ], + "declKind": "Enum", + "usr": "c:@M@Sentry@E@SentryExtensionType", + "moduleName": "Sentry", + "objc_name": "SentryExtensionType", + "declAttributes": [ + "SynthesizedProtocol", + "ObjC", + "SynthesizedProtocol", + "Sendable", + "Dynamic" + ], + "enumRawTypeName": "Int", + "conformances": [ + { + "kind": "Conformance", + "name": "Copyable", + "printedName": "Copyable", + "usr": "s:s8CopyableP", + "mangledName": "$ss8CopyableP" + }, + { + "kind": "Conformance", + "name": "Escapable", + "printedName": "Escapable", + "usr": "s:s9EscapableP", + "mangledName": "$ss9EscapableP" + }, + { + "kind": "Conformance", + "name": "RawRepresentable", + "printedName": "RawRepresentable", + "children": [ + { + "kind": "TypeWitness", + "name": "RawValue", + "printedName": "RawValue", + "children": [ + { + "kind": "TypeNameAlias", + "name": "RawValue", + "printedName": "Sentry.SentryExtensionType.RawValue", + "children": [ + { + "kind": "TypeNominal", + "name": "Int", + "printedName": "Swift.Int", + "usr": "s:Si" + } + ] + } + ] + } + ], + "usr": "s:SY", + "mangledName": "$sSY" + }, + { + "kind": "Conformance", + "name": "Sendable", + "printedName": "Sendable", + "usr": "s:s8SendableP", + "mangledName": "$ss8SendableP" + }, + { + "kind": "Conformance", + "name": "Equatable", + "printedName": "Equatable", + "usr": "s:SQ", + "mangledName": "$sSQ" + }, + { + "kind": "Conformance", + "name": "Hashable", + "printedName": "Hashable", + "usr": "s:SH", + "mangledName": "$sSH" + } + ] + }, { "kind": "TypeDecl", "name": "SentryFeedbackAPI", From f8693fbf7611b0332dc1733b5daa07552fa90c60 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Thu, 6 Nov 2025 15:10:22 +0100 Subject: [PATCH 02/19] add sample for widgets, widgets control and live activities --- Makefile | 1 + Samples/iOS-Swift/iOS-Swift.yml | 33 -- .../Shared/Data/LiveActivityAttributes.swift | 16 + .../Shared/Headers/SentryExposure.h | 20 + .../iOS-Swift-Widget-Bridging-Header.h | 2 + ...S-SwiftUI-Widgets-WidgetExtension.xcconfig | 29 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 ++ .../Resources/Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + .../Resources/Info.plist | 27 + .../Sources/LiveActivityConfiguration.swift | 84 +++ .../SampleConfigurationAppIntent.swift | 7 + .../Sources/SampleWidget.swift | 74 +++ .../Sources/SampleWidgetBundle.swift | 11 + .../Sources/SampleWidgetControl.swift | 78 +++ .../iOS-SwiftUI-Widgets.xcconfig | 30 + .../project.pbxproj | 560 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/WorkspaceSettings.xcsettings | 10 + .../xcschemes/iOS-SwiftUI-Widgets.xcscheme | 107 ++++ .../iOS-SwiftUI-Widgets.yml | 50 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/100.png | Bin 0 -> 2098 bytes .../AppIcon.appiconset/1024.png | Bin 0 -> 66066 bytes .../AppIcon.appiconset/114.png | Bin 0 -> 2336 bytes .../AppIcon.appiconset/120.png | Bin 0 -> 2487 bytes .../AppIcon.appiconset/128.png | Bin 0 -> 2600 bytes .../AppIcon.appiconset/144.png | Bin 0 -> 3105 bytes .../AppIcon.appiconset/152.png | Bin 0 -> 3232 bytes .../Assets.xcassets/AppIcon.appiconset/16.png | Bin 0 -> 385 bytes .../AppIcon.appiconset/167.png | Bin 0 -> 3656 bytes .../AppIcon.appiconset/180.png | Bin 0 -> 6603 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 0 -> 513 bytes .../AppIcon.appiconset/256.png | Bin 0 -> 12513 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 0 -> 711 bytes .../Assets.xcassets/AppIcon.appiconset/32.png | Bin 0 -> 768 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 0 -> 925 bytes .../Assets.xcassets/AppIcon.appiconset/50.png | Bin 0 -> 1127 bytes .../AppIcon.appiconset/512.png | Bin 0 -> 26050 bytes .../Assets.xcassets/AppIcon.appiconset/57.png | Bin 0 -> 1176 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 0 -> 1245 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 0 -> 1271 bytes .../Assets.xcassets/AppIcon.appiconset/64.png | Bin 0 -> 1358 bytes .../Assets.xcassets/AppIcon.appiconset/72.png | Bin 0 -> 1481 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 0 -> 1617 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 0 -> 1678 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 0 -> 1807 bytes .../AppIcon.appiconset/Contents.json | 218 +++++++ .../Resources/Assets.xcassets/Contents.json | 6 + .../Resources/Entitlements.entitlements | 12 + .../iOS-SwiftUI-Widgets/Resources/Info.plist | 6 + .../Sources/ContentView.swift | 11 + .../Sources/LiveActivityView.swift | 158 +++++ .../iOS-SwiftUI-Widgets/Sources/MainApp.swift | 10 + Sentry.xcworkspace/contents.xcworkspacedata | 3 + schema/xcodegen.schema.json | 13 + 57 files changed, 1624 insertions(+), 33 deletions(-) create mode 100644 Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h create mode 100644 Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleConfigurationAppIntent.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/100.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/1024.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/114.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/120.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/128.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/144.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/152.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/16.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/167.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/180.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/20.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/256.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/29.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/32.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/40.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/50.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/512.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/57.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/58.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/60.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/64.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/72.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/76.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/80.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/87.png create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift diff --git a/Makefile b/Makefile index 302ea0981e5..3e33e601bc1 100644 --- a/Makefile +++ b/Makefile @@ -190,6 +190,7 @@ xcode-ci: xcodegen --spec Samples/iOS-Swift/iOS-Swift.yml xcodegen --spec Samples/iOS-Swift6/iOS-Swift6.yml xcodegen --spec Samples/iOS-SwiftUI/iOS-SwiftUI.yml + xcodegen --spec Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml xcodegen --spec Samples/iOS15-SwiftUI/iOS15-SwiftUI.yml xcodegen --spec Samples/macOS-SwiftUI/macOS-SwiftUI.yml xcodegen --spec Samples/macOS-Swift/macOS-Swift.yml diff --git a/Samples/iOS-Swift/iOS-Swift.yml b/Samples/iOS-Swift/iOS-Swift.yml index 1325f169362..e7c777921fe 100644 --- a/Samples/iOS-Swift/iOS-Swift.yml +++ b/Samples/iOS-Swift/iOS-Swift.yml @@ -34,7 +34,6 @@ targets: - target: iOS-SwiftClip - target: SentrySampleShared/SentrySampleShared - target: iOS-Swift-ShareExtension - - target: iOS-Swift-WidgetExtension - target: Sentry/SentrySwiftLog configFiles: Debug: iOS-Swift.xcconfig @@ -110,19 +109,6 @@ targets: Release: iOS-Swift-ShareExtension.xcconfig Test: iOS-Swift-ShareExtension.xcconfig TestCI: iOS-Swift-ShareExtension.xcconfig - iOS-Swift-WidgetExtension: - type: app-extension - platform: auto - sources: - - iOS-Swift-Widget - dependencies: - - target: Sentry/Sentry - - target: SentrySampleShared/SentrySampleShared - configFiles: - Debug: iOS-Swift-WidgetExtension.xcconfig - Release: iOS-Swift-WidgetExtension.xcconfig - Test: iOS-Swift-WidgetExtension.xcconfig - TestCI: iOS-Swift-WidgetExtension.xcconfig schemes: iOS-Swift: templates: @@ -143,22 +129,3 @@ schemes: config: Debug testPlans: - path: ../../Plans/iOS-Benchmarking_Base.xctestplan - iOS-Swift-WidgetExtension: - build: - targets: - iOS-Swift: all - iOS-Swift-WidgetExtension: all - run: - config: Debug - askForAppToLaunch: true - launchAutomaticallySubstyle: 2 - executable: iOS-Swift - debugEnabled: false - environmentVariables: - _XCWidgetKind: io.sentry.sample.iOS-Swift.iOS-Swift-Widget - _XCWidgetDefaultView: timeline - _XCWidgetFamily: systemMedium - profile: - config: Release - askForAppToLaunch: true - executable: iOS-Swift diff --git a/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift b/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift new file mode 100644 index 00000000000..74944ef4d41 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift @@ -0,0 +1,16 @@ +import Foundation + +#if canImport(ActivityKit) + +import ActivityKit + +struct LiveActivityAttributes: ActivityAttributes { + struct ContentState: Codable & Hashable { + let anrTrackingStatus: String // "Enabled" or "Disabled" + let timestamp: Date + } + + let id: String +} + +#endif diff --git a/Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h new file mode 100644 index 00000000000..9fe3467e51c --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h @@ -0,0 +1,20 @@ +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface SentryHubInternal : NSObject + +- (NSArray *)trimmedInstalledIntegrationNames; + +@end + +@interface SentrySDKInternal : NSObject + +//+ (SentryHubInternal *)currentHub; + ++ (NSArray *)trimmedInstalledIntegrationNames; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h new file mode 100644 index 00000000000..99ea01c7b10 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h @@ -0,0 +1,2 @@ +#import "SentryExposure.h" +#import diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig new file mode 100644 index 00000000000..2e3572b9757 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig @@ -0,0 +1,29 @@ +#include "../Shared/Config/_Common.xcconfig" + +PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sentry-cocoa.samples.iOS-SwiftUI-Widgets.Widget +INFOPLIST_FILE = iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist + +GENERATE_INFOPLIST_FILE = NO + +IPHONEOS_DEPLOYMENT_TARGET = 18.0 +TARGETED_DEVICE_FAMILY = 1,2 + +SKIP_INSTALL = YES +SWIFT_EMIT_LOC_STRINGS = YES + +CODE_SIGN_STYLE = Manual + +SWIFT_OBJC_BRIDGING_HEADER = Shared/Headers/iOS-Swift-Widget-Bridging-Header.h + +SUPPORTED_PLATFORMS = iphoneos iphonesimulator +SUPPORTS_MACCATALYST = NO + +ENABLE_USER_SCRIPT_SANDBOXING = YES + +// Asset Catalog +ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES +ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor +ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground + +// Swift Settings +SWIFT_VERSION = 5.0 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000000..0afb3cf0eec --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors": [ + { + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..c70a5bff185 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images": [ + { + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "tinted" + } + ], + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/Contents.json new file mode 100644 index 00000000000..74d6a722cf3 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 00000000000..0afb3cf0eec --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors": [ + { + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist new file mode 100644 index 00000000000..9e7ecf658af --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist @@ -0,0 +1,27 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift new file mode 100644 index 00000000000..3560c1c218f --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift @@ -0,0 +1,84 @@ +import ActivityKit +import Sentry +import SwiftUI +import WidgetKit + +struct LiveActivityConfiguration: Widget { + + init() { + setupSentrySDK() + } + + var body: some WidgetConfiguration { + ActivityConfiguration(for: LiveActivityAttributes.self) { context in + // Lock screen/banner UI + VStack(alignment: .leading, spacing: 8) { + Text("Sentry") + .font(.headline) + + Text("ANR Tracking:") + .font(.caption2) + Text(context.state.anrTrackingStatus == "Enabled" ? "❌ Enabled" : "✅ Disabled") + .font(.caption) + .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) + .bold() + + Text(context.state.timestamp, style: .time) + .font(.caption2) + } + .padding() + .activityBackgroundTint(Color.blue.opacity(0.1)) + } dynamicIsland: { context in + DynamicIsland { + // Expanded view when tapped + DynamicIslandExpandedRegion(.leading) { + VStack(alignment: .leading, spacing: 4) { + Text("Sentry") + .font(.headline) + Text("ANR Tracking") + .font(.caption2) + } + } + DynamicIslandExpandedRegion(.trailing) { + VStack(alignment: .trailing, spacing: 4) { + Text(context.state.anrTrackingStatus == "Enabled" ? "❌ Enabled" : "✅ Disabled") + .font(.caption) + .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) + .bold() + Text(context.state.timestamp, style: .time) + .font(.caption2) + } + } + DynamicIslandExpandedRegion(.bottom) { + Text("ANR tracking is \(context.state.anrTrackingStatus.lowercased()) in Live Activities") + .font(.caption) + .multilineTextAlignment(.center) + } + } compactLeading: { + // Compact leading - show icon + Image(systemName: context.state.anrTrackingStatus == "Enabled" ? "exclamationmark.triangle.fill" : "checkmark.circle.fill") + .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) + } compactTrailing: { + // Compact trailing - show status text + Text(context.state.anrTrackingStatus == "Enabled" ? "ANR" : "OK") + .font(.caption2) + .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) + } minimal: { + // Minimal view - just icon + Image(systemName: context.state.anrTrackingStatus == "Enabled" ? "exclamationmark.triangle.fill" : "checkmark.circle.fill") + .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) + } + } + } + + private func setupSentrySDK() { + guard !SentrySDK.isEnabled else { + return + } + SentrySDK.start { options in + options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" + options.debug = true + options.enableAppHangTracking = true + } + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleConfigurationAppIntent.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleConfigurationAppIntent.swift new file mode 100644 index 00000000000..cc265900ed9 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleConfigurationAppIntent.swift @@ -0,0 +1,7 @@ +import AppIntents +import WidgetKit + +struct SampleConfigurationAppIntent: WidgetConfigurationIntent { + static var title: LocalizedStringResource { "Configuration" } + static var description: IntentDescription { "This is a Sentry widget." } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift new file mode 100644 index 00000000000..aa6f0cbf3c7 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift @@ -0,0 +1,74 @@ +@_spi(Private) @testable import Sentry +import SwiftUI +import WidgetKit + +struct SampleWidget: Widget { + let kind: String = "SampleWidget" + + var body: some WidgetConfiguration { + AppIntentConfiguration(kind: kind, intent: SampleConfigurationAppIntent.self, provider: Provider()) { entry in + SampleWidgetEntryView(entry: entry) + .containerBackground(.fill.tertiary, for: .widget) + } + } +} + +fileprivate struct SampleWidgetEntryView: View { + var entry: Provider.Entry + + var body: some View { + let anrInstalled = SentrySDK.isEnabled && + SentrySDKInternal.trimmedInstalledIntegrationNames() + .contains("ANRTracking") + + VStack(spacing: 8) { + Text("Sentry") + .font(.headline) + + Text("ANR Tracking:") + .font(.caption2) + Text(anrInstalled ? "❌ Enabled" : "✅ Disabled") + .font(.caption) + .foregroundColor(anrInstalled ? .red : .green) + .bold() + + Text(entry.date, style: .time) + .font(.caption2) + } + } +} + +private struct Provider: AppIntentTimelineProvider { + func placeholder(in context: Context) -> SimpleEntry { + SimpleEntry(date: Date(), configuration: SampleConfigurationAppIntent()) + } + + func snapshot(for configuration: SampleConfigurationAppIntent, in context: Context) async -> SimpleEntry { + setupSentrySDK() + + return SimpleEntry(date: Date(), configuration: configuration) + } + + func timeline(for configuration: SampleConfigurationAppIntent, in context: Context) async -> Timeline { + setupSentrySDK() + + let entry = SimpleEntry(date: Date(), configuration: configuration) + return Timeline(entries: [entry], policy: .atEnd) + } + + private func setupSentrySDK() { + guard !SentrySDK.isEnabled else { + return + } + SentrySDK.start { options in + options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" + options.debug = true + options.enableAppHangTracking = true + } + } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + let configuration: SampleConfigurationAppIntent +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift new file mode 100644 index 00000000000..0353d5cf882 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift @@ -0,0 +1,11 @@ +import SwiftUI +import WidgetKit + +@main +struct SampleWidgetBundle: WidgetBundle { + var body: some Widget { + SampleWidget() + SampleWidgetControl() + LiveActivityConfiguration() + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift new file mode 100644 index 00000000000..d9f4dfc370a --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift @@ -0,0 +1,78 @@ +import AppIntents +import Sentry +import SwiftUI +import WidgetKit + +struct SampleWidgetControl: ControlWidget { + static let kind: String = "SampleWidgetControl" + + init() { + setupSentrySDK() + } + + private func setupSentrySDK() { + guard !SentrySDK.isEnabled else { + return + } + SentrySDK.start { options in + options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" + options.debug = true + options.enableAppHangTracking = true + } + } + + var body: some ControlWidgetConfiguration { + AppIntentControlConfiguration( + kind: Self.kind, + provider: Provider() + ) { value in + ControlWidgetButton( + action: RefreshStatusIntent() + ) { + Label("ANR Tracking", systemImage: value.isOn ? "checkmark.circle.fill" : "xmark.circle.fill") + } + } + .displayName("Sentry ANR") + .description("Refresh ANR status") + } +} + +extension SampleWidgetControl { + struct Value { + var isOn: Bool + } + + struct Provider: AppIntentControlValueProvider { + func previewValue(configuration: ANRConfiguration) -> Value { + Value(isOn: true) // Preview shows checkmark (ANR disabled, which is good) + } + + func currentValue(configuration: ANRConfiguration) async throws -> Value { + // Check if ANR tracking is installed + let anrInstalled = SentrySDK.isEnabled && + SentrySDKInternal.trimmedInstalledIntegrationNames() + .contains("ANRTracking") + + // isOn = true means ANR is disabled (good for widgets) + // isOn = false means ANR is enabled (bad for widgets) + return Value(isOn: !anrInstalled) + } + } +} + +struct ANRConfiguration: ControlConfigurationIntent { + static var title: LocalizedStringResource { "ANR Status" } + static var description: IntentDescription { "Configure ANR tracking status" } +} + +struct RefreshStatusIntent: AppIntent { + static let title: LocalizedStringResource = "Refresh Status" + + init() {} + + func perform() async throws -> some IntentResult { + // Trigger widget refresh to show updated status + await WidgetCenter.shared.reloadTimelines(ofKind: SampleWidgetControl.kind) + return .result() + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig new file mode 100644 index 00000000000..8080bd2f6fc --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig @@ -0,0 +1,30 @@ +#include "../Shared/Config/_Common.xcconfig" + +PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sentry-cocoa.samples.iOS-SwiftUI-Widgets +INFOPLIST_FILE = iOS-SwiftUI-Widgets/Resources/Info.plist +CODE_SIGN_ENTITLEMENTS = iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements + +GENERATE_INFOPLIST_FILE = YES +INFOPLIST_KEY_NSSupportsLiveActivities = YES +INFOPLIST_KEY_NSSupportsLiveActivitiesFrequentUpdates = YES +INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES +INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES +INFOPLIST_KEY_UILaunchScreen_Generation = YES +INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight +INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + +IPHONEOS_DEPLOYMENT_TARGET = 18.0 +TARGETED_DEVICE_FAMILY = 1,2 + +CODE_SIGN_STYLE = Manual + +SUPPORTED_PLATFORMS = iphoneos iphonesimulator +SUPPORTS_MACCATALYST = NO + +SWIFT_EMIT_LOC_STRINGS = YES +SWIFT_VERSION = 5.0 + +SWIFT_OBJC_BRIDGING_HEADER = Shared/Headers/iOS-Swift-Widget-Bridging-Header.h + +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon +ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..6291e89df75 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj @@ -0,0 +1,560 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */; }; + 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; + 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */; }; + 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */; }; + 69E32D769D5ADB4C398A9F10 /* LiveActivityConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB90A09085EE86C6FFA7538 /* LiveActivityConfiguration.swift */; }; + 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA164E21124BB974CA55E4A /* MainApp.swift */; }; + 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */; }; + AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */; }; + C851C32E71DD591EBA710757 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043F374A027EDE446D99A7D5 /* ContentView.swift */; }; + CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B88304703D152A6C3A6249F8 /* Assets.xcassets */; }; + CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */; }; + D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; + DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 206F31F59F2C041805232A2F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D6B98D3A58C262EE28C50B9E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5A1C22273766A4B9F99FB9F6; + remoteInfo = "iOS-SwiftUI-Widgets-WidgetExtension"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets-WidgetExtension.xcconfig"; sourceTree = ""; }; + 043F374A027EDE446D99A7D5 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidget.swift; sourceTree = ""; }; + 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets.xcconfig"; sourceTree = ""; }; + 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsObjC.xcconfig; sourceTree = ""; }; + 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AssetCatalog.xcconfig; sourceTree = ""; }; + 1C10E740433EC0862705BD2B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 1E1192AED22950F7264B3282 /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; + 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetBundle.swift; sourceTree = ""; }; + 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-SwiftUI-Widgets.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarnings.xcconfig; sourceTree = ""; }; + 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangLanguage.xcconfig; sourceTree = ""; }; + 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetControl.swift; sourceTree = ""; }; + 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityAttributes.swift; sourceTree = ""; }; + 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; + 51774442E9250743D901AE0A /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; + 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; + 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsCpp.xcconfig; sourceTree = ""; }; + 5C379869BA6B600711B514AA /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; }; + 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; }; + 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; + 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-Swift-Widget-Bridging-Header.h"; sourceTree = ""; }; + 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = BuildOptions.xcconfig; sourceTree = ""; }; + 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangAnalyzer.xcconfig; sourceTree = ""; }; + 963761122A7CD280F6EC496C /* SentryExposure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryExposure.h; sourceTree = ""; }; + 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangCppLanguage.xcconfig; sourceTree = ""; }; + 9CB90A09085EE86C6FFA7538 /* LiveActivityConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityConfiguration.swift; sourceTree = ""; }; + B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleConfigurationAppIntent.swift; sourceTree = ""; }; + B88304703D152A6C3A6249F8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "iOS-SwiftUI-Widgets.yml"; sourceTree = ""; }; + C7A32DBA6D6A3A3014F75EBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangPreprocessing.xcconfig; sourceTree = ""; }; + CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-SwiftUI-Widgets-WidgetExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityView.swift; sourceTree = ""; }; + DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SearchPaths.xcconfig; sourceTree = ""; }; + DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Swift.xcconfig; sourceTree = ""; }; + E4689ECE0E21A2872542D677 /* Linking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Linking.xcconfig; sourceTree = ""; }; + EDA164E21124BB974CA55E4A /* MainApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainApp.swift; sourceTree = ""; }; + F081F749B3F69ED90E1641EE /* _Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = _Common.xcconfig; sourceTree = ""; }; + F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangModules.xcconfig; sourceTree = ""; }; + FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangObjCLanguage.xcconfig; sourceTree = ""; }; + FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeGeneration.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 12412823A76950EA3A6F4A1E /* Config */ = { + isa = PBXGroup; + children = ( + F081F749B3F69ED90E1641EE /* _Common.xcconfig */, + 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */, + 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */, + 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */, + 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */, + 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */, + 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */, + F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */, + FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */, + CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */, + 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */, + 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */, + 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */, + FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */, + 5C379869BA6B600711B514AA /* Deployment.xcconfig */, + E4689ECE0E21A2872542D677 /* Linking.xcconfig */, + 51774442E9250743D901AE0A /* Localization.xcconfig */, + 1E1192AED22950F7264B3282 /* Metal.xcconfig */, + 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */, + DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */, + 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */, + DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */, + ); + name = Config; + path = ../Shared/Config; + sourceTree = ""; + }; + 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */ = { + isa = PBXGroup; + children = ( + F351AB0C79B4F4A26405F7B8 /* Resources */, + 37F2198026D3702138A1C8FA /* Sources */, + ); + path = "iOS-SwiftUI-Widgets"; + sourceTree = ""; + }; + 37F2198026D3702138A1C8FA /* Sources */ = { + isa = PBXGroup; + children = ( + 043F374A027EDE446D99A7D5 /* ContentView.swift */, + D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */, + EDA164E21124BB974CA55E4A /* MainApp.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 5BCF46669C95D0C5AA64EB32 /* Headers */ = { + isa = PBXGroup; + children = ( + 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */, + 963761122A7CD280F6EC496C /* SentryExposure.h */, + ); + path = Headers; + sourceTree = ""; + }; + 64610524F65A780DF9BFB212 /* Products */ = { + isa = PBXGroup; + children = ( + CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */, + 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */, + ); + name = Products; + sourceTree = ""; + }; + 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */ = { + isa = PBXGroup; + children = ( + 8F7F6649D6F4D4D09A89EDCF /* Resources */, + 784318D35811F9E6AA983341 /* Sources */, + ); + path = "iOS-SwiftUI-Widgets-WidgetExtension"; + sourceTree = ""; + }; + 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */ = { + isa = PBXGroup; + children = ( + 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */, + 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */, + ); + name = "iOS-SwiftUI-Widgets"; + path = .; + sourceTree = ""; + }; + 784318D35811F9E6AA983341 /* Sources */ = { + isa = PBXGroup; + children = ( + 9CB90A09085EE86C6FFA7538 /* LiveActivityConfiguration.swift */, + B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */, + 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */, + 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */, + 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 8F7F6649D6F4D4D09A89EDCF /* Resources */ = { + isa = PBXGroup; + children = ( + DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */, + C7A32DBA6D6A3A3014F75EBF /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; + 97261E177AEFD1FBF9AFD26C /* Data */ = { + isa = PBXGroup; + children = ( + 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */, + ); + path = Data; + sourceTree = ""; + }; + B067CD4E68396FF941842D6F /* Shared */ = { + isa = PBXGroup; + children = ( + 97261E177AEFD1FBF9AFD26C /* Data */, + 5BCF46669C95D0C5AA64EB32 /* Headers */, + ); + path = Shared; + sourceTree = ""; + }; + B881B0C8A980D4462DB07732 = { + isa = PBXGroup; + children = ( + B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */, + 12412823A76950EA3A6F4A1E /* Config */, + 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */, + 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */, + 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */, + B067CD4E68396FF941842D6F /* Shared */, + 64610524F65A780DF9BFB212 /* Products */, + ); + sourceTree = ""; + }; + F351AB0C79B4F4A26405F7B8 /* Resources */ = { + isa = PBXGroup; + children = ( + B88304703D152A6C3A6249F8 /* Assets.xcassets */, + 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */, + 1C10E740433EC0862705BD2B /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */; + buildPhases = ( + 79071996082F166983FE9D74 /* Sources */, + B70BBFEAC3F6528B1EBF1FF7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "iOS-SwiftUI-Widgets-WidgetExtension"; + packageProductDependencies = ( + ); + productName = "iOS-SwiftUI-Widgets-WidgetExtension"; + productReference = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */ = { + isa = PBXNativeTarget; + buildConfigurationList = 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */; + buildPhases = ( + DC38EC959ED2BB986CE38BD2 /* Sources */, + 769D4ACB4830B4AE8EE3EF73 /* Resources */, + 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + A2F9A537196C85E11DA332B6 /* PBXTargetDependency */, + ); + name = "iOS-SwiftUI-Widgets"; + packageProductDependencies = ( + ); + productName = "iOS-SwiftUI-Widgets"; + productReference = 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D6B98D3A58C262EE28C50B9E /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + 5A1C22273766A4B9F99FB9F6 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + 8E239B450D0DE382D706B6B7 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = B881B0C8A980D4462DB07732; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */, + 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 769D4ACB4830B4AE8EE3EF73 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B70BBFEAC3F6528B1EBF1FF7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 79071996082F166983FE9D74 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */, + 69E32D769D5ADB4C398A9F10 /* LiveActivityConfiguration.swift in Sources */, + 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */, + AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */, + 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */, + 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DC38EC959ED2BB986CE38BD2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C851C32E71DD591EBA710757 /* ContentView.swift in Sources */, + D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */, + CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */, + 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A2F9A537196C85E11DA332B6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */; + targetProxy = 206F31F59F2C041805232A2F /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 180D348244D8D9212C67AE1A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; + }; + name = Release; + }; + 1B9F865ECE37130BDBB5A023 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; + }; + name = Debug; + }; + 221CEBB496C7E9ADB264FBDE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; + }; + name = Release; + }; + 6CA1E23D2E331683FA217276 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 761A2113671B4BD4CF6F2759 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 9CE8FF7BC1499AAC7538B778 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6CA1E23D2E331683FA217276 /* Debug */, + 761A2113671B4BD4CF6F2759 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1B9F865ECE37130BDBB5A023 /* Debug */, + 180D348244D8D9212C67AE1A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9CE8FF7BC1499AAC7538B778 /* Debug */, + 221CEBB496C7E9ADB264FBDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = D6B98D3A58C262EE28C50B9E /* Project object */; +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..919434a6254 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000000..280eff1f10b --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + BuildSystemType + Latest + DerivedDataLocationStyle + Default + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme new file mode 100644 index 00000000000..fea510db15a --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml new file mode 100644 index 00000000000..6caaaaae4c7 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml @@ -0,0 +1,50 @@ +# yaml-language-server: $schema=../../schema/xcodegen.schema.json + +name: iOS-SwiftUI-Widgets +include: + - ../Shared/feature-flags.yml +createIntermediateGroups: true +generateEmptyDirectories: true +configs: + Debug: debug + Release: release +fileGroups: + - ../Shared/Config + - iOS-SwiftUI-Widgets.yml +options: + bundleIdPrefix: io.sentry.sentry-cocoa.samples +targets: + iOS-SwiftUI-Widgets: + type: application + platform: iOS + deploymentTarget: "18.0" + sources: + - iOS-SwiftUI-Widgets + - Shared + dependencies: + - target: iOS-SwiftUI-Widgets-WidgetExtension + configFiles: + Debug: iOS-SwiftUI-Widgets.xcconfig + Release: iOS-SwiftUI-Widgets.xcconfig + iOS-SwiftUI-Widgets-WidgetExtension: + type: app-extension + platform: iOS + deploymentTarget: "18.0" + sources: + - iOS-SwiftUI-Widgets-WidgetExtension + - Shared + configFiles: + Debug: iOS-SwiftUI-Widgets-WidgetExtension.xcconfig + Release: iOS-SwiftUI-Widgets-WidgetExtension.xcconfig +schemes: + iOS-SwiftUI-Widgets: + build: + targets: + iOS-SwiftUI-Widgets: all + iOS-SwiftUI-Widgets-WidgetExtension: all + run: + config: Debug + profile: + config: Release + archive: + config: Release diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000000..0afb3cf0eec --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors": [ + { + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/100.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/100.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f56ef0988fc469bd9728238e15b1f2eb4f4848 GIT binary patch literal 2098 zcmV-22+jA2P)0aLIE?ZMXsDWL@pElI&c zTMY`0U^LXkNNnQ4SUGqQl@kZS1aGZgYrfBH^4OiRp(}@}qfhd!Jvgt$(i9nP|K-qMnhD0FcNnm;TU$b~~$=v_* zL8H@+k8LoWJ37qz^=r!;Bydk{t05Ps=FR1~8wOCCFTmK_{j%xp+Y?xn+}W_N8s!lKaz=4)zj)|DJ!L!;GChTD6?Te30bZTnWSP^xU$Hb7viV6xH|95);|E<{}u zW3!nyTb|f#W`5SW~vt|4of>yuMZ4j!31GI)(u zVU<9rdR6C+r_Jee?|ZG+!GSYo@#fE&d$iWM)B)k@Ro52IdDo@TACCbC5Bq*)x4e^eM9@w7a+rQX}MGZflv@(A&0m;d&8R8C4xis7TV$yDfJzw zn_Ek_bLBOmfT;tLJUE>3_^BCdgp{-a4EPnP38MlAO?57{KoX(DuM7^1liK171&}}c zWFfQQx!PDL?Z7zdfnbtY*??jztK)wkDB9~>l>>o*q<(;^;`&0N$};dvRoA&H1p>jG z9h>nwM@0$K7mC(8S7kub8&3#755Bj@z?QqNGN5R!b5#a}%ATd+EC)rJ)l(+0$~spi zKwRgm;8T!exK4_2P$Xp$jdiX{fKVGxX;Xz$hpsca92Ch$mbN-qa3HRFRT_%qj4ri1 zh`wC4D)_SQt`F4Ixq<_s&R21cTmpsK_mFHxX{vJt1wyT4L{{(@6Q^d#jNAo%f zt);6H=H;# z!bMM1H9%6)t@6NjOMyTrhYr-)J#v@%0XQz1wj4wpRnTt&K78(G1CNcPBG zj-E1I+$(F;J(BF5^IsCPC)JAPcEN#QaO5RO{%kL3x|}Xm;^5xl);;mYQD`~sC*NX!=IN-YA3micN)sX(COc&7u|uw*Ni(-clvlwbJvhl|z&6BI;g zUJ)`3E)_^~EeI+-Qhzu1t{)c(QOPE!SvIrf^Lj&`cO8AT1MN!#Lajo{t{oLUaa!W* z7iWUFRwV2(>Niv-5>;~j76M|M z6tyiYSs{5G?=w%mo#~qLT~svZ
  • as8cSIN^(#jd2Dj?1a0=2OWaY2KoEf$qMMA&aC(Uusmd7`X-;4eQBoKkfPia>&iS~gGwB9l|FRuM=rQOgF3KxA?X)+z!CCTiJ05r|Aq!CFNi z!9*<^C<2kmDOjrrB$%jW14SS*IR$GKfdmt^Y@i54CZ}MnB9LIBmJJkv$mA5PRRj`D c)Utv81GjmKFGOzKH2?qr07*qoM6N<$f^PT7$N&HU literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/1024.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ec579f52045c1dade4f54623d4bd1aafd3d4fc GIT binary patch literal 66066 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 A?f?J) literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/114.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/114.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0ecf3e8be184ba25c7095181af248d433da972 GIT binary patch literal 2336 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 literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/128.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/128.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd4ea41b6d6f65764bc5e223f95cff5157e48ce GIT binary patch literal 2600 zcmbW3`8O2$8^=GhGDMijnwfIVH20#&SYzzMNQ$mCl$|UiYZ%N}!fk}em8MA|jmtEa z3Ds8%H;paZSW=NCL<%9??m71_`2O%b?{nVIIq%mw@1LG52YV|q5qS{+fY=FZbH|@b z{da_sKld{u?@jKJZPZ34NAG$rq$sjBbkXrr&x<X1OXxDaCPyvEP+2YuI*k(h`Lf1n8jD7%uB z1(=H3&H`LjeP<5|iJ5`)`C+y|V5f0LN>-;ai~;G0qn68c7?JuubbEV!_|Oe5fXD-w zP$XwBqu~cdwz%ns7LcQs3R(XbrHK45s^0KvKkpX5D(ma?4?*_2@a~*{QOTwGgxA-6 zv-49A$|=8FTTFi45VKZdyFbYnVFwmALaJ{V#6(MBR3HGgTUf?V-?0&w+G)%ex<rr!4WnK?gq&bQu*bK#3NytvpeA3yrFcRh9>ayRwvAgC?dJB=}% zHszg`UN|#`pE2F7kX%@1a5*-C``()i7|T4y($rLvR@e@VeB12z>uN-}Nsd(kC@m@0 zG|SC%jAMIDoNq{4o<6>7HO)HO@9*i#Gt@`2U_dX4GX0u}d$OCHb8^zTwN^03dt-D~ zqS{PW3E&qdqgQ&rX!%W))%AHCIRCq>G|&kf)2xnfC=dyM&qDb9ki9iF=b`n~62X3K zwr34P0E|i8m+8|K;X6NzvPX9x%5Z=>;zzLZz9(Kc9kB^B-~iDS_!nuGb!k1)sP>PMgxs@MtfG9)N+I zs>@i}R&U>OGt%z2bdIKdmOzSupl_82{cz|vTO*{vbcSn(X$=}K3SOJN!L$V2V7#j zgB$V1iiPo$s2RoyrtE?`lJnfn~SdL2Pd4ZbZn6l4q>JB%){S8sVmzm zzg^*JpZmrjkw)l>x`Er6Z~7^XfJw8xy;FbK69pg1IdI=@(;c@g1qvc>25!|m8KdB? zx9P6`I{gz9T^nzlw;g1y)_Zj6!me!RJpHDcnK&UpXl9{;Y3Yi(?9-W>=)?!;SRpVp zag`Q^esgGmE#P4XQ7urgX#EPJsAK?}jLY4$^lX`SjZ(KU6tvvIASR{_!vJY}+af~) zl@qPD?y{e)N?LOpU7^3lEmzsU69XMdeYjEA(MLTS2)JW&c65y@fh1mW@)A@7)OsA* zmyCv&yi$C%*iB=c=5;hKe@y&&c-Ln1&F3B*+Nao$pm7prx1jPF5+0pJ`X)mV67+J+ zDDq)V3}SwQ8QkMVP&t*EDL$3yEaw+gLoXX$+x0+zk6YRr(KZ;yZ?T296(3z6 zH9skgjx3f>OJq4;JW)oHl4o_8qa~TafhqSL(NSWc1YXtN`+kzO-=O@{pEcR{6Z=Yx z?;*H#hJAKY`09O^BiJ?2o*>*W>@j&^#$sXlg;U-(UkS27%K4@)+Hg-m%0D=8yeYAG zTh=UZIPb9_?b=Z(NMxV~%A5@~^E;W)O7L1nf~q0A8K=VGyvhjsfbzVg?_U@;;*SSV zEijVLvpL1U%*+rC6r)q(nqT}*RqkEW!HTFnm%J`p3ndDt2v}no&nNM6hfXysniC@o zHOa1(?q16>00r+e-FxrlFUpBiZMuJdzX3JXgXuImP*{31`~kL*@UuOSy)B?3&1H7&?otW#+&);cuH(=~p+`mBHaKKhI} zwVWUPW4OK6B>!RXn7U;{@#qUFtkIWYg-~TOR9Of2E%nN=xx1@E1R=1vLs*cD*~`t= zGbVkojznQct(g+?1aI3bXFY_d54W!=sotPg6Q(1-SZ9v?UY@8znXEZy6HzNgErO)Ux#R}Q4ukH))I%R?S zb?$i3->`6S#$%?&HWU9>w_wg5IMA

    !k7r9i6wQ@5so6v0uI1T}HCZTm6Od~OF$ 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 N(ZE#ynXXIBe*l0er!N2i literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/152.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 0000000000000000000000000000000000000000..646e1d8ae12e028d0033e3a9ff98fde790886db2 GIT binary patch literal 3232 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 literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/29.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000000000000000000000000000000000000..740e807d6da5fb376fe218bafc4694e4c7d1c940 GIT binary patch literal 711 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 j82|e=UCux)^ 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 literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/64.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/64.png new file mode 100644 index 0000000000000000000000000000000000000000..3380f4f1539c8d0290583cc06635b1ca7ab51e0a GIT binary patch literal 1358 zcmV-U1+n^xP)t`I0_&!V*G)^!vGfi7*vR0 zG@gmkNMd0G3JXPPv=B_NgV18W!&zqE&F;=+ca{)ls>|)(?0esQ?|VPDX-i8>OKcsl zGy{NPfC&Mk0qa-;nGr#g1xyw&S-@lglLb}*fge-9*yO~w#FO)O=d$datW~grtxg(j ziFUG=qhmIQkDVxB(U!{4K?uDLxO=OYJsF5g9X(ePVYSyUgbG5a0D$&oXB#XB)6+L3 zJ})dRTHp0Oy%}magbF~_rB*ii`K#q@tfw*Y8Q=4jw`V8g--khk&;a=GZk*L$xoi1! z^mqYlYF&=`Yc+S+*!v0VTHF0vw*O#$82*PNg7fo>tgNVk&CbjvoC5Vn-gK~xjO7r( z_oZhVtWemRxtaAnyJ=n5i9{$2=!y-q?%1&9M|o8ttEeip`K5A?4j{AxfYZh4g9TVy zGB>f&c!$)N6On56XXbC>8rT6AfDJmAb^s9fh=0Bya1c7#fpbq8b z=d#$NsH;Cz5ZwR^0vN3TAm=0Z^Hp4Wgk7yKbF~{Gb23t6-GdStwSlgs4FEV^b+N@( z|O%q?b`h-vb;B2^etCzicVebOnKtKphjxV>&SUUQI zzyUzoLz*iti71_{8xv^rq@zy=6abO7Ft(}XvQ+FSy#az#{omZ!X=6>$eL`RW(0ZRA zKT2MdzI0I#oGL%;d-8C#wmu;+0BGtG9Y*SlHdiL~`Gfth*}b+tTh4#b6HRJ@boL2> z06>cu)cd@q=icFjWvPr-ezHahd+6#D0s%l)?}NICUvb(4CeRb6IUmlB#M_g!Lsy^R z8vtsUIOvd7gEA13dIpE75KW6g^a;KJ5bJ#mI{Js~Ei6tLhKogztjkkTdm3ser@wI`B-YD+lr%wnB02o0*kWF`KD9~nzW(22ZNi}nLu^?ptFy9*-h_i~y)6&@<6-HTM zBc?N%l8Z%;8@(x8+&W7qAW{YZ<0?MicdFXF=t)7MVkbH#3lr{45dSBn1b~-_al_n- zBQBic+>f3d4JEfZfT~Tt8Ia0+9}n}QxyTaABwFxzwZLM?IF-`A0Z^&b+)@=iMKKIy z`|S zXH=UIk(v}VsuQ#W6dh6lobIP;qY?l>O{64FYQ?w;ligck3H?f4axve4N%%$xXFtFZu@y@1pRHnf!*wOd!3Sr$^a}6 zIAXRJ8I+#z|E912z;oK#>y+OuPzFHE@e{(VUKIpXeBz%V02G-(WzpXv1n664*e82O zR?2Udqzr(H!E5Or1Auv5-n=evUY9qo%daKX4%$|e1xyw&S-@n0b)5zN0h_xceN>aM QDgXcg07*qoM6N<$g3w)TB>(^b literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/72.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/72.png new file mode 100644 index 0000000000000000000000000000000000000000..aa040b9cca1d12079b868bee2f8e26881a8548c2 GIT binary patch literal 1481 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 P00000NkvXXu0mjfw>1v; literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/80.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 0000000000000000000000000000000000000000..39aa9562485bfd3a294994bef6236cb1a57b4b9f GIT binary patch literal 1678 zcmai#dpy$%1IB;5w0AEDxt}94sj*5Ewnj%dz&vABSkPeRZ}VG!ADLuv$Qj_Q-r=6WJ(w$ zS!`#BJv@|Bsx!M_fa-B1u>PgqEX#MO8x7Tbpz3gX!Y=Ciaxlj7PkYU^k&KIm??pGq z6W+7A;|ZPoS8P0j{zLrwYFBr+IbE`~wbhYPP$nz}OwV+(azK@bx`Ba$AmD4DL+whr zeo`nyyQ==Q%jv8OpPL~jdEm>ca~puHb7I2#|2>!O|>KJid!L*FyG&szW3+ux0R zckQL2ie#?Y_hTAuUDN)^O#NN(IVq>DKcDAfNCB?L8Cy?LX)eAYUXE$oR41q$twW=cBjo(6 zq;@_s8J&C7?>Ch|QfWQ7n`*qAJ||%?w-{iNaDtf-ab>S}5840Xxskrf(Q`J~w?+b) z^*e(^UxcEr>G&p|9t~5x==pboy}V<$AK6q7)%Y85y3i+j8FUI+lz~VKR@DzmZZ-~M zv3vIJC3lgD6_$(MnSr1dVKa~CSz{CBW}J>@iCK|n)GPXut(Gw2FADh&Opu6L;z;U^ z%eQM6BdB>lDJ8=+ z_S4sQj+unavmRPUeBT_K>Reo4!Gl=pAztSu_Gh2mlLxgSb(|X|(byv8{LLmf;P2xc z5``FmFBw!8DIaWNZY*&KL@82j5`JW7Z14k(+_e`Fz)7T$3I_s{uWZ zfdaDfh|hDgtfqpK^P0<~L+XdJm+KxoB^7xaX)Bu^Hc>^u0?#4@Syca9gLVX-hadN% zqb*7oLG|5e->~iY{4VpR56ddM<__y)NyLaa6Fiaz5NcH|D;hEV)1k`3g zX9CsoTAnAeh6pbg_&>YxqPcL_;&D^_xyCaxB}qe}BB*rKIO5nVm_whV`=}$89mkM> zTC#qyWGhz@Nz!BCnB5~ooMK4$c4vnpD!o=wjRbKZ#WC=pODv8l8RlNn-8|A;{nTuJ zsu=7QIb^If<{|nQog6Prpiy1;Z<{JiP@n&Q-%~>nEouJ`e@43d26G_R`pHPjo`$e8v|p zzs3%`e1)Yhe2fYqt6?54ZJ3x}usATHhnrp_F&=FZ-j=Yh>q5oSXBYF#jI3`;g z=B!F<((M`|rC!g9o^n9apXWR(aL{6E`=ZedEL+Q}vd784uBXbt>wditCV~5njcnGo zsxxdjjuOW$S43RTw$O(T5HQjL^H#F~Do--~jh|WW-dJr3JLXhsgDX7}M$Hdq!Ae(# z^OUOV$ubI3TP^7J`IRTzVm8Pu?o}yq4NQF#Ftg)5uz2|7#Lk-J4+=A7a9U@MHQ zJps*k(RXiow0qBDg~n`@E9Y8Xk)1P@eLAZj)sfYq1%bOs@F~?V`U=%A`BW|?RbZ?c z2CH=Gx3r~@N#)pushl1*=&$J-b0!vD7x)Y?3!?C`5K;V>k=D<(Dv?v*+FPMmw5Txz zVDp+tHhExvxaz$56f8UQ;K5)j{<%B3Oq&(N@8t34GQgvP#vNqOrGWAi;j*}$AFmBs z;g+F$w3s8mMo@0|;orKx#G#g>!I~O=18sU5vv4f%6`=QT98pE#|1lQ2ftIn+7hQgS SQn3FsfXjKJL*sYBH~s;53lx$7 literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/87.png b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 0000000000000000000000000000000000000000..9806fc0eacf3349400bf2e90f7e37db52da03589 GIT binary patch literal 1807 zcmV+q2k`ibP)OmEDEC>0d+*Qtbmh`4U7xx61jAcx&D7b|N}IN9 zP(;)C&|WJSK!9r@@cLQb}z3n-O|p{qreae?Rz#y7vsx(o%hF9{v0()OY7Lhl@CicpGoqnzqvT#hTLtpwp3o({%Ia-|G4! z?&1Yi*(!xwR7nN(?`|2emT+Z*t`x51A7EKSb@AHP28N5h01QE;n^3-f< zQ-IF_=!*+AC*QX3{o&MVsLFTn1}-4NTR2ghpug^>eOy<-l0Q*}@8A_&07mRQb80f> z8)Q+iFTO*ma1j%KpTE75q--&iGt6B9;|1-0v%hlRp)|O06C6t%CkLI~tws+(I-qn3 z5!}lu+jl4pu4J;H5-=T+OMvkmBstURL)E@RDR8A7R8%P(I=YYccD0D*tOVG$#g%q| z-_4!1h9#HU+SaEOxSW5GoESjioJ>-p1lZ<)aiy81@0h}aRGMk~4r*|v`v>tQY}zoG4jZ}iHk(0Sh3}vSmy3^*3C``P zu-r^)%#*0N??|W1-i8Hfe{U**B*4;fPo6|olsWGTUPZaw{R5X>6{jqdWymEen-a_P z9SVnQD!ptc3{v8efJyyLD@00&8h3pQhl?eHgflieDH`CW2a#TmRLgSewQVfQy6>O@ zH?j^LoSZmmN{3>Va`SR z4(f0t6(d=3Ck)cVaCNDqUM`ei7x>xPkBx~vPdVpWDWG2=aG^BY#bfm00Gl=o+|rd^ zMzSyF^W!h)jVxTRtY!fk?^_65+&@_S?-BJLY$s%PsbxL>=F}@y4&0{2Wavb5fDM|jfj7r5oajgdu>oXWF=5NS@_?<`!^pByt6TrL6F_Ve7saB+^SW4TIzdth!W zoHcId@hYU)n+q;C0oTM4pNMO1nnjVxiXrPQb>$FIJh{j-n2Q}|9^1r?)}u2 zeOE;y7H)6ani36GRs8oA5?sXRhlyVgVK8n^c~)g^xLJiN?tlbMa-#h-nnCWEB>zTW(DU{f7p#ni~pyl zv~kOe4FN4A=K2K6*SS2i$}QuC1h|Tn1Ka>tk$~dRLAe30A_2vrgK`60MFNUL2jvF1 xiUbsg4$2L16$vN~9h4j3DiTl}Iw)5W?qlIipGQvozuW)-002ovPDHLkV1iPXZxR3i literal 0 HcmV?d00001 diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..1e5e3b49d7a --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,218 @@ +{ + "images": [ + { + "filename": "40.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" + }, + { + "filename": "60.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" + }, + { + "filename": "29.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" + }, + { + "filename": "58.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" + }, + { + "filename": "87.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" + }, + { + "filename": "80.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" + }, + { + "filename": "120.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" + }, + { + "filename": "57.png", + "idiom": "iphone", + "scale": "1x", + "size": "57x57" + }, + { + "filename": "114.png", + "idiom": "iphone", + "scale": "2x", + "size": "57x57" + }, + { + "filename": "120.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" + }, + { + "filename": "180.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" + }, + { + "filename": "20.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" + }, + { + "filename": "40.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" + }, + { + "filename": "29.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" + }, + { + "filename": "58.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" + }, + { + "filename": "40.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" + }, + { + "filename": "80.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" + }, + { + "filename": "50.png", + "idiom": "ipad", + "scale": "1x", + "size": "50x50" + }, + { + "filename": "100.png", + "idiom": "ipad", + "scale": "2x", + "size": "50x50" + }, + { + "filename": "72.png", + "idiom": "ipad", + "scale": "1x", + "size": "72x72" + }, + { + "filename": "144.png", + "idiom": "ipad", + "scale": "2x", + "size": "72x72" + }, + { + "filename": "76.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" + }, + { + "filename": "152.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" + }, + { + "filename": "167.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" + }, + { + "filename": "1024.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" + }, + { + "filename": "16.png", + "idiom": "mac", + "scale": "1x", + "size": "16x16" + }, + { + "filename": "32.png", + "idiom": "mac", + "scale": "2x", + "size": "16x16" + }, + { + "filename": "32.png", + "idiom": "mac", + "scale": "1x", + "size": "32x32" + }, + { + "filename": "64.png", + "idiom": "mac", + "scale": "2x", + "size": "32x32" + }, + { + "filename": "128.png", + "idiom": "mac", + "scale": "1x", + "size": "128x128" + }, + { + "filename": "256.png", + "idiom": "mac", + "scale": "2x", + "size": "128x128" + }, + { + "filename": "256.png", + "idiom": "mac", + "scale": "1x", + "size": "256x256" + }, + { + "filename": "512.png", + "idiom": "mac", + "scale": "2x", + "size": "256x256" + }, + { + "filename": "512.png", + "idiom": "mac", + "scale": "1x", + "size": "512x512" + }, + { + "filename": "1024.png", + "idiom": "mac", + "scale": "2x", + "size": "512x512" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/Contents.json new file mode 100644 index 00000000000..74d6a722cf3 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements new file mode 100644 index 00000000000..129b0e02f9b --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements @@ -0,0 +1,12 @@ + + + + + aps-environment + development + com.apple.developer.usernotifications.time-sensitive + + com.apple.security.application-groups + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist new file mode 100644 index 00000000000..6631ffa6f24 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift new file mode 100644 index 00000000000..02eca25afd0 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift @@ -0,0 +1,11 @@ +import SwiftUI + +struct ContentView: View { + var body: some View { + LiveActivityView() + } +} + +#Preview { + ContentView() +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift new file mode 100644 index 00000000000..fc9e8d2c200 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift @@ -0,0 +1,158 @@ +import ActivityKit +@_spi(Private) @testable import Sentry +import SwiftUI +import UserNotifications + +struct LiveActivityView: View { + @StateObject private var viewModel = LiveActivityViewModel() + + var body: some View { + VStack(spacing: 20) { + Text("Live Activity Test") + .font(.title) + + if viewModel.isActivityActive { + VStack(spacing: 10) { + Text("Live Activity is running") + .font(.headline) + .foregroundColor(.green) + + Text("It will end automatically in 10 seconds") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() + .background(Color.green.opacity(0.1)) + .cornerRadius(10) + } else { + Button("Start Live Activity") { + viewModel.startLiveActivity() + } + .buttonStyle(.borderedProminent) + } + + if let errorMessage = viewModel.errorMessage { + Text(errorMessage) + .foregroundColor(.red) + .font(.caption) + .padding() + } + } + .padding() + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color(UIColor.systemBackground)) + .onAppear { + viewModel.setupSentrySDK() + } + } +} + +@MainActor +final class LiveActivityViewModel: ObservableObject { + @Published var isActivityActive = false + @Published var errorMessage: String? + + private var currentActivity: Activity? + + func setupSentrySDK() { + guard !SentrySDK.isEnabled else { + return + } + SentrySDK.start { options in + options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" + options.debug = true + options.enableAppHangTracking = true + } + } + + func startLiveActivity() { + Task { + // Request notification permissions if needed + let center = UNUserNotificationCenter.current() + let settings = await center.notificationSettings() + + if settings.authorizationStatus == .notDetermined { + do { + let granted = try await center.requestAuthorization(options: [.alert, .sound, .badge, .providesAppNotificationSettings]) + if !granted { + self.errorMessage = "Notification permissions are required for Live Activities." + return + } + } catch { + self.errorMessage = "Failed to request notification permissions: \(error.localizedDescription)" + return + } + } else if settings.authorizationStatus == .denied { + self.errorMessage = "Notification permissions are denied. Please enable notifications in Settings." + return + } + + // Check if Live Activities are enabled + let authInfo = ActivityAuthorizationInfo() + guard authInfo.areActivitiesEnabled else { + self.errorMessage = "Live Activities are not enabled. Please enable them in Settings." + return + } + + do { + // Check ANR tracking status + let anrInstalled = SentrySDK.isEnabled && + SentrySDKInternal.trimmedInstalledIntegrationNames() + .contains("ANRTracking") + + let anrStatus = anrInstalled ? "Enabled" : "Disabled" + + let attributes = LiveActivityAttributes(id: UUID().uuidString) + let initialState = LiveActivityAttributes.ContentState( + anrTrackingStatus: anrStatus, + timestamp: Date() + ) + + let activity = try Activity.request( + attributes: attributes, + content: .init(state: initialState, staleDate: nil), + pushType: .token + ) + + self.currentActivity = activity + self.isActivityActive = true + self.errorMessage = nil + + // Auto-end after 10 seconds + Task { + try? await Task.sleep(for: .seconds(10)) + await self.endLiveActivity() + } + } catch { + self.errorMessage = "Failed to start Live Activity: \(error.localizedDescription)" + } + } + } + + func endLiveActivity() async { + guard let activity = currentActivity else { + return + } + + // Check ANR tracking status again for final state + let anrInstalled = SentrySDK.isEnabled && + SentrySDKInternal.trimmedInstalledIntegrationNames() + .contains("ANRTracking") + + let anrStatus = anrInstalled ? "Enabled" : "Disabled" + + let finalState = LiveActivityAttributes.ContentState( + anrTrackingStatus: anrStatus, + timestamp: Date() + ) + await activity.end( + ActivityContent(state: finalState, staleDate: nil), + dismissalPolicy: .immediate + ) + + await MainActor.run { + self.currentActivity = nil + self.isActivityActive = false + } + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift new file mode 100644 index 00000000000..52d9de4dd7b --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift @@ -0,0 +1,10 @@ +import SwiftUI + +@main +struct MainApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/Sentry.xcworkspace/contents.xcworkspacedata b/Sentry.xcworkspace/contents.xcworkspacedata index df84c70c570..514724c3092 100644 --- a/Sentry.xcworkspace/contents.xcworkspacedata +++ b/Sentry.xcworkspace/contents.xcworkspacedata @@ -43,6 +43,9 @@ + + diff --git a/schema/xcodegen.schema.json b/schema/xcodegen.schema.json index d7899cbe379..73bbbd7bbd6 100644 --- a/schema/xcodegen.schema.json +++ b/schema/xcodegen.schema.json @@ -278,6 +278,19 @@ } ] }, + "deploymentTarget": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + ] + }, "sources": { "oneOf": [ { From c2d4e47e203c52c2d19e698a42bde4cf7c94ecda Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 10:52:33 +0100 Subject: [PATCH 03/19] WIP --- .gitignore | 2 +- .../Base.lproj/MainInterface.storyboard | 26 + .../iOS-Swift/IntentsUIExtension/Info.plist | 20 + .../IntentViewController.swift | 36 + .../iOS-Swift-ActionExtension.xcconfig | 20 + .../Resources/Info.plist | 49 + .../Sources/ActionViewController.swift | 88 + .../iOS-Swift-IntentExtension.xcconfig | 20 + .../Resources/Info.plist | 48 + .../Sources/IntentHandler.swift | 115 + .../iOS-Swift-ShareExtension.xcconfig | 3 + .../Base.lproj/MainInterface.storyboard | 0 .../{ => Resources}/Info.plist | 0 .../{ => Sources}/ShareViewController.swift | 0 .../iOS-Swift.xcodeproj/project.pbxproj | 2078 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../iOS-Swift-ActionExtension.xcscheme | 108 + .../iOS-Swift-IntentExtension.xcscheme | 108 + .../iOS-Swift-ShareExtension.xcscheme | 108 + .../xcshareddata/xcschemes/iOS-Swift.xcscheme | 429 ++++ Samples/iOS-Swift/iOS-Swift.yml | 43 + Samples/iOS-Swift/iOS-Swift/Info.plist | 4 + .../iOS-Swift/iOS-Swift.entitlements | 2 + Sources/Sentry/SentryBaseIntegration.m | 10 +- fastlane/Fastfile | 40 +- fastlane/Matchfile | 2 +- 26 files changed, 3353 insertions(+), 13 deletions(-) create mode 100644 Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard create mode 100644 Samples/iOS-Swift/IntentsUIExtension/Info.plist create mode 100644 Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift create mode 100644 Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig create mode 100644 Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Info.plist create mode 100644 Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift create mode 100644 Samples/iOS-Swift/iOS-Swift-IntentExtension.xcconfig create mode 100644 Samples/iOS-Swift/iOS-Swift-IntentExtension/Resources/Info.plist create mode 100644 Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift rename Samples/iOS-Swift/iOS-Swift-ShareExtension/{ => Resources}/Base.lproj/MainInterface.storyboard (100%) rename Samples/iOS-Swift/iOS-Swift-ShareExtension/{ => Resources}/Info.plist (100%) rename Samples/iOS-Swift/iOS-Swift-ShareExtension/{ => Sources}/ShareViewController.swift (100%) create mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj create mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme create mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme create mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme create mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme diff --git a/.gitignore b/.gitignore index 9e3ff1c66ae..e63093178ea 100644 --- a/.gitignore +++ b/.gitignore @@ -84,7 +84,7 @@ Cartfile.resolved Samples/SessionReplay-CameraTest/SessionReplay-CameraTest.xcodeproj Samples/iOS-ObjectiveC/iOS-ObjectiveC.xcodeproj -Samples/iOS-Swift/iOS-Swift.xcodeproj +#Samples/iOS-Swift/iOS-Swift.xcodeproj Samples/iOS-Swift6/iOS-Swift6.xcodeproj Samples/iOS-SwiftUI/iOS-SwiftUI.xcodeproj Samples/iOS15-SwiftUI/iOS15-SwiftUI.xcodeproj diff --git a/Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard b/Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard new file mode 100644 index 00000000000..e6c64fcfc14 --- /dev/null +++ b/Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-Swift/IntentsUIExtension/Info.plist b/Samples/iOS-Swift/IntentsUIExtension/Info.plist new file mode 100644 index 00000000000..739fbdc5a7b --- /dev/null +++ b/Samples/iOS-Swift/IntentsUIExtension/Info.plist @@ -0,0 +1,20 @@ + + + + + NSExtension + + NSExtensionAttributes + + IntentsSupported + + INSendMessageIntent + + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.intents-ui-service + + + diff --git a/Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift b/Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift new file mode 100644 index 00000000000..23ddc06150b --- /dev/null +++ b/Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift @@ -0,0 +1,36 @@ +// +// IntentViewController.swift +// IntentsUIExtension +// +// Created by Philip Niedertscheider on 07.11.25. +// + +import IntentsUI + +// As an example, this extension's Info.plist has been configured to handle interactions for INSendMessageIntent. +// You will want to replace this or add other intents as appropriate. +// The intents whose interactions you wish to handle must be declared in the extension's Info.plist. + +// You can test this example integration by saying things to Siri like: +// "Send a message using " + +class IntentViewController: UIViewController, INUIHostedViewControlling { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + // MARK: - INUIHostedViewControlling + + // Prepare your view controller for the interaction to handle. + func configureView(for parameters: Set, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set, CGSize) -> Void) { + // Do configuration here, including preparing views and calculating a desired size for presentation. + completion(true, parameters, self.desiredSize) + } + + var desiredSize: CGSize { + return self.extensionContext!.hostedViewMaximumAllowedSize + } + +} diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig b/Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig new file mode 100644 index 00000000000..701eed0f9d9 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig @@ -0,0 +1,20 @@ +#include "../Shared/Config/_Common.xcconfig" + +PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sample.iOS-Swift.ActionExtension +INFOPLIST_FILE = iOS-Swift-ActionExtension/Info.plist + +PROVISIONING_PROFILE_SPECIFIER_Debug = match Development io.sentry.sample.iOS-Swift.ActionExtension +PROVISIONING_PROFILE_SPECIFIER_Test = match Development io.sentry.sample.iOS-Swift.ActionExtension +PROVISIONING_PROFILE_SPECIFIER_TestCI = match Development io.sentry.sample.iOS-Swift.ActionExtension +PROVISIONING_PROFILE_SPECIFIER_Release = match AppStore io.sentry.sample.iOS-Swift.ActionExtension +PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*] = $(PROVISIONING_PROFILE_SPECIFIER_$(CONFIGURATION)) +PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*] = + +CODE_SIGN_STYLE = Manual + +SUPPORTED_PLATFORMS = iphoneos iphonesimulator + +SWIFT_OBJC_BRIDGING_HEADER = iOS-Swift/Tools/iOS-Swift-Bridging-Header.h + +// Runtime search paths for app extensions to find frameworks in parent app +LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @executable_path/../../Frameworks diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Info.plist b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Info.plist new file mode 100644 index 00000000000..b201ce3b033 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + $(PRODUCT_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + GIT_BRANCH + <branch> + GIT_COMMIT_HASH + <sha> + GIT_STATUS_CLEAN + <status> + NSExtension + + NSExtensionPointIdentifier + com.apple.ui-services + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).ActionViewController + NSExtensionAttributes + + NSExtensionActivationRule + + NSExtensionActivationSupportsText + + NSExtensionActivationSupportsWebURLWithMaxCount + 1 + NSExtensionActivationSupportsImageWithMaxCount + 1 + + + + + diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift new file mode 100644 index 00000000000..d003df1d875 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift @@ -0,0 +1,88 @@ +import Sentry +@_spi(Private) @testable import Sentry +import SentrySampleShared +import UIKit +import UniformTypeIdentifiers + +class ActionViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Setup view first + view.backgroundColor = .systemBackground + + // Setup Sentry SDK + setupSentrySDK() + + // Display ANR status + setupStatusLabel() + } + + private func setupSentrySDK() { + SentrySDKWrapper.shared.startSentry() + + // Small delay to ensure SDK is initialized + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + self.checkANRStatus() + } + } + + private func checkANRStatus() { + // Verify ANR tracking is disabled + var anrInstalled = false + if SentrySDK.isEnabled { + let integrationNames = SentrySDKInternal.trimmedInstalledIntegrationNames() + anrInstalled = integrationNames.contains("ANRTracking") + } + + if anrInstalled { + print("❌ ERROR: ANR tracking should be disabled in Action Extension but it's enabled!") + } else { + print("✅ ANR tracking is correctly disabled in Action Extension") + } + + // Update label if view is still loaded + if view.window != nil { + updateStatusLabel(anrInstalled: anrInstalled) + } + } + + private func setupStatusLabel() { + // Initial check - might show "checking..." if SDK not ready + var anrInstalled = false + if SentrySDK.isEnabled { + let integrationNames = SentrySDKInternal.trimmedInstalledIntegrationNames() + anrInstalled = integrationNames.contains("ANRTracking") + } + + updateStatusLabel(anrInstalled: anrInstalled) + } + + private func updateStatusLabel(anrInstalled: Bool) { + // Remove existing label if any + view.subviews.forEach { $0.removeFromSuperview() } + + let statusLabel = UILabel() + statusLabel.text = anrInstalled ? "❌ ANR Enabled (ERROR!)" : "✅ ANR Disabled" + statusLabel.textColor = anrInstalled ? .red : .green + statusLabel.font = .systemFont(ofSize: 24, weight: .bold) + statusLabel.textAlignment = .center + statusLabel.numberOfLines = 0 + statusLabel.translatesAutoresizingMaskIntoConstraints = false + + view.addSubview(statusLabel) + NSLayoutConstraint.activate([ + statusLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor), + statusLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor), + statusLabel.leadingAnchor.constraint(greaterThanOrEqualTo: view.leadingAnchor, constant: 20), + statusLabel.trailingAnchor.constraint(lessThanOrEqualTo: view.trailingAnchor, constant: -20) + ]) + } + + @IBAction func done() { + SentrySDK.capture(message: "iOS-Swift-ActionExtension: done called") + let returnItems = extensionContext?.inputItems as? [NSExtensionItem] ?? [] + extensionContext?.completeRequest(returningItems: returnItems, completionHandler: nil) + } +} diff --git a/Samples/iOS-Swift/iOS-Swift-IntentExtension.xcconfig b/Samples/iOS-Swift/iOS-Swift-IntentExtension.xcconfig new file mode 100644 index 00000000000..4f037e1bbc2 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift-IntentExtension.xcconfig @@ -0,0 +1,20 @@ +#include "../Shared/Config/_Common.xcconfig" + +PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sample.iOS-Swift.IntentExtension +INFOPLIST_FILE = iOS-Swift-IntentExtension/Resources/Info.plist + +PROVISIONING_PROFILE_SPECIFIER_Debug = match Development io.sentry.sample.iOS-Swift.IntentExtension +PROVISIONING_PROFILE_SPECIFIER_Test = match Development io.sentry.sample.iOS-Swift.IntentExtension +PROVISIONING_PROFILE_SPECIFIER_TestCI = match Development io.sentry.sample.iOS-Swift.IntentExtension +PROVISIONING_PROFILE_SPECIFIER_Release = match AppStore io.sentry.sample.iOS-Swift.IntentExtension +PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*] = $(PROVISIONING_PROFILE_SPECIFIER_$(CONFIGURATION)) +PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*] = + +CODE_SIGN_STYLE = Manual + +SUPPORTED_PLATFORMS = iphoneos iphonesimulator + +SWIFT_OBJC_BRIDGING_HEADER = iOS-Swift/Tools/iOS-Swift-Bridging-Header.h + +// Runtime search paths for app extensions to find frameworks in parent app +LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @executable_path/../../Frameworks diff --git a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Resources/Info.plist b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Resources/Info.plist new file mode 100644 index 00000000000..5a16ea5f567 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Resources/Info.plist @@ -0,0 +1,48 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + $(PRODUCT_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + GIT_BRANCH + <branch> + GIT_COMMIT_HASH + <sha> + GIT_STATUS_CLEAN + <status> + NSExtension + + NSExtensionAttributes + + IntentsRestrictedWhileLocked + + IntentsSupported + + INSendMessageIntent + INSearchForMessagesIntent + INSetMessageAttributeIntent + + + NSExtensionPointIdentifier + com.apple.intents-service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).IntentHandler + + + diff --git a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift new file mode 100644 index 00000000000..dc82e03d4a3 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift @@ -0,0 +1,115 @@ +import Intents +import Sentry +@_spi(Private) @testable import Sentry +import SentrySampleShared + +class IntentHandler: INExtension, INSendMessageIntentHandling { + + private static var hasSetupSentry = false + + override init() { + super.init() + print("🔵 IntentHandler.init() called") + setupSentrySDK() + } + + private func setupSentrySDK() { + // Only setup once per process + guard !Self.hasSetupSentry else { + return + } + Self.hasSetupSentry = true + + print("🔵 IntentHandler.setupSentrySDK() called") + SentrySDKWrapper.shared.startSentry() + + // Small delay to ensure SDK is initialized + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + self.checkANRStatus() + } + } + + private func checkANRStatus() { + // Verify ANR tracking is disabled + var anrInstalled = false + if SentrySDK.isEnabled { + let integrationNames = SentrySDKInternal.trimmedInstalledIntegrationNames() + anrInstalled = integrationNames.contains("ANRTracking") + } + + if anrInstalled { + print("❌ ERROR: ANR tracking should be disabled in Intent Extension but it's enabled!") + } else { + print("✅ ANR tracking is correctly disabled in Intent Extension") + } + } + + override func handler(for intent: INIntent) -> Any { + print("🔵 IntentHandler.handler(for intent:) called with intent: \(type(of: intent))") + // Ensure Sentry is setup when handler is requested + setupSentrySDK() + return self + } + + // MARK: - INSendMessageIntentHandling + + // Implement resolution methods to provide additional information about your intent (optional). + func resolveRecipients(for intent: INSendMessageIntent, with completion: @escaping ([INSendMessageRecipientResolutionResult]) -> Void) { + if let recipients = intent.recipients { + // If no recipients were provided we'll need to prompt for a value. + if recipients.count == 0 { + completion([INSendMessageRecipientResolutionResult.needsValue()]) + return + } + + var resolutionResults = [INSendMessageRecipientResolutionResult]() + for recipient in recipients { + let matchingContacts = [recipient] // Implement your contact matching logic here to create an array of matching contacts + switch matchingContacts.count { + case 2 ... Int.max: + // We need Siri's help to ask user to pick one from the matches. + resolutionResults += [INSendMessageRecipientResolutionResult.disambiguation(with: matchingContacts)] + + case 1: + // We have exactly one matching contact + resolutionResults += [INSendMessageRecipientResolutionResult.success(with: recipient)] + + case 0: + // We have no contacts matching the description provided + resolutionResults += [INSendMessageRecipientResolutionResult.unsupported()] + + default: + break + } + } + completion(resolutionResults) + } else { + completion([INSendMessageRecipientResolutionResult.needsValue()]) + } + } + + func resolveContent(for intent: INSendMessageIntent, with completion: @escaping (INStringResolutionResult) -> Void) { + if let text = intent.content, !text.isEmpty { + completion(INStringResolutionResult.success(with: text)) + } else { + completion(INStringResolutionResult.needsValue()) + } + } + + // Once resolution is completed, perform validation on the intent and provide confirmation (optional). + func confirm(intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) { + // Verify user is authenticated and your app is ready to send a message. + let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self)) + let response = INSendMessageIntentResponse(code: .ready, userActivity: userActivity) + completion(response) + } + + // Handle the completed intent (required). + func handle(intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) { + print("🔵 IntentHandler.handle(intent:) called") + SentrySDK.capture(message: "iOS-Swift-IntentExtension: handle intent called") + let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self)) + let response = INSendMessageIntentResponse(code: .success, userActivity: userActivity) + completion(response) + } +} diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig b/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig index ccdf55160e8..5ebb89969e5 100644 --- a/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig +++ b/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig @@ -13,3 +13,6 @@ PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*] = CODE_SIGN_STYLE = Manual SUPPORTED_PLATFORMS = iphoneos iphonesimulator + +// Runtime search paths for app extensions to find frameworks in parent app +LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @executable_path/../../Frameworks diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Base.lproj/MainInterface.storyboard b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Resources/Base.lproj/MainInterface.storyboard similarity index 100% rename from Samples/iOS-Swift/iOS-Swift-ShareExtension/Base.lproj/MainInterface.storyboard rename to Samples/iOS-Swift/iOS-Swift-ShareExtension/Resources/Base.lproj/MainInterface.storyboard diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Info.plist b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Resources/Info.plist similarity index 100% rename from Samples/iOS-Swift/iOS-Swift-ShareExtension/Info.plist rename to Samples/iOS-Swift/iOS-Swift-ShareExtension/Resources/Info.plist diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension/ShareViewController.swift b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift similarity index 100% rename from Samples/iOS-Swift/iOS-Swift-ShareExtension/ShareViewController.swift rename to Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..bd20dbc8592 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj @@ -0,0 +1,2078 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 70; + objects = { + +/* Begin PBXBuildFile section */ + 022500679EC17AFCA83097C9 /* EnergyConsumer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75600452DD4B93E1E0355F08 /* EnergyConsumer.swift */; }; + 10B1F4E91D817FB352EBE1DC /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB925B776381501478AB32A1 /* WebViewController.swift */; }; + 131F936B2E6D6ED14B6A5301 /* SRRedactSampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A507F02EE543D8EAE51253 /* SRRedactSampleViewController.swift */; }; + 1336182701E13D2606D4FFEB /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; + 1908FB96F24AF84C4BF3459C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E702320CD964146FB4A53460 /* Main.storyboard */; }; + 1A2D51F9C195CAE4881B37CB /* PermissionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CE4A1607B6636E7F9D1049F /* PermissionsViewController.swift */; }; + 1C06B72E1AC6FFC9EE5B2EA6 /* XCTest+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CB9F8DFDCCF7FBEF4819B9 /* XCTest+Delay.swift */; }; + 1DEFDFE0596A8656263440AA /* ProjectProposal.pdf in Resources */ = {isa = PBXBuildFile; fileRef = B363B5FE6C5D8037994CF501 /* ProjectProposal.pdf */; }; + 1ECA47ADFB44EDFB74AC08F2 /* SplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB15DB1B86AFA85242911AF5 /* SplitViewController.swift */; }; + 1FAB3D63BF53BDCE25C6A56F /* SentryData.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = FA6FCAF423D635FDA9DBBFC1 /* SentryData.xcdatamodeld */; }; + 2082C929EDEBA2B486D0C5D0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3134BF0471477E94C9886A4F /* AppDelegate.swift */; }; + 21558F7BAEDF9DD8CA8EEF7A /* TriggerAppHang.swift in Sources */ = {isa = PBXBuildFile; fileRef = D265E2EDD00C60F7F5B6B888 /* TriggerAppHang.swift */; }; + 25686484B5CCB63FBB658069 /* UIEventBreadcrumbTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A5B13F49927E3AD638263E7 /* UIEventBreadcrumbTests.swift */; }; + 2682F19C24704715F14FE9B8 /* ReplaceContentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC08BFF2EC8DF341033195E4 /* ReplaceContentViewController.swift */; }; + 2D1D4103B2B025276E4956B5 /* iOS-SwiftClip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 2E37B5254D7597BD8B6169B9 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; + 2F40754B43CBBBCA710076A9 /* SessionReplayUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32ECFAF2EE13BB90EAC1BEF6 /* SessionReplayUITests.swift */; }; + 2FCE6F02F09EC77C3AD49997 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; + 321C268EEECA1E6EC1685AB7 /* ProfilingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5305DB7675BCC04CEE052B5C /* ProfilingViewController.swift */; }; + 3645DEA0D5FA2CD732CD0A7F /* CoreDataViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E9AEE9AA451F75F7DB63AA /* CoreDataViewController.swift */; }; + 3719A55526158ED00F37538F /* PageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D765E5E52128E3F6B9D0146C /* PageViewController.swift */; }; + 3B9B8103032661B496038958 /* CppCode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E159B651EB7692A2C7E74B /* CppCode.cpp */; }; + 3C1454FE7043D31D22E2454F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 62B078E53E402797EE060833 /* LaunchScreen.storyboard */; }; + 3EA6818452916656DD894623 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111D68433FFABCFE3119006C /* ViewController.swift */; }; + 46F7775D6A86784793887076 /* ViewLifecycleTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D82593E08C9EEE14439FEB1D /* ViewLifecycleTestViewController.swift */; }; + 4A6288CAA3E47ADBC98E03A2 /* SentrySwiftLog.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 4F6AA26561C2DEBAC1F428BD /* InfoForBreadcrumbController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */; }; + 51183F4C696186DB42BD8484 /* SentryBenchmarking.mm in Sources */ = {isa = PBXBuildFile; fileRef = 77E8D04AD50CA1647ACBF553 /* SentryBenchmarking.mm */; }; + 51A85B15CAD3953FE3556C04 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 51DE8527F5BE077F8DA9418F /* NSObject+SentryAppSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */; }; + 521D00C7E7EF3B0AD4633167 /* SentrySampleUITestShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; }; + 53581AA5D1FD2F734A163752 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 55DB9EEC221DF519072BE0B3 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 55E86406E580D92EA33438FC /* ProfilingNetworkScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */; }; + 55F607BA16B254E78EB63132 /* MetricKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */; }; + 58DF542F78921F4880ECAE94 /* SentrySwiftLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */; }; + 5BB2BE14330C47B96FFD11FC /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; + 5CF2C5A14A89516BD01B1028 /* TopViewControllerInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A1935AC3E350D80A199728D /* TopViewControllerInspector.swift */; }; + 5D2281140DE120DF5FAFCA46 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 63077CC6E384663E06B7A1D7 /* SentryVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */; }; + 658BD4C7B5E66786A5D70C2F /* iOS-Swift-ShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 67BEBED634D92F2B1591DA05 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 67D83B8F6B8B36C3153AD166 /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; + 6AD61205E0EF9D834B7049C5 /* UIEventBreadcrumbsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */; }; + 6F370012A1C84FDF6A82BD8D /* TransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BBBC9883318840251690D58 /* TransactionsViewController.swift */; }; + 6FABFFDB1B26F2A135D9304C /* ProfilingUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 551550B87A4D1AE259A27A3F /* ProfilingUITests.swift */; }; + 78F6F743686DBEACC4D34679 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; + 794FF69C305368C6D432AAF0 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 7B6DC5B01ABEB99144644E87 /* DiskWriteException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */; }; + 7BD39BA8DA56883832D7171C /* ActionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC535DA5D6DB09218CA168DA /* ActionViewController.swift */; }; + 7D9AEC24B1E6A3E9EDE7E463 /* BenchmarkingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F561960FD13128F6785A21A7 /* BenchmarkingViewController.swift */; }; + 7F70072A4CC02F1A7F5AD352 /* ErrorsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */; }; + 811D0E72F3EC4835AC2DEAEE /* Tongariro.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 2694665D127C4B4B62B2DCC3 /* Tongariro.jpg */; }; + 83D57C0C11EE555BAD15D65D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8813728C87CB00CBB907AF8D /* Main.storyboard */; }; + 846570ED1077949BE6404BA5 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; + 85EAE34F771673A771ED6860 /* NibViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */; }; + 864CDDF55D447714ECD8113B /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 8AD86CC5980E52382B4CB190 /* ViewLifecycleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94FAA087A715E1C000463EB /* ViewLifecycleUITests.swift */; }; + 8CF15B29406C6DE9B7E23453 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1629F8166CE76494F9B01D8F /* IntentHandler.swift */; }; + 8EFBF7F312296D36BD7A65D8 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; + 907F36A87BA875ADDD9EE77D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 37FB718FAF4DE8DD3FA44C14 /* LaunchScreen.storyboard */; }; + 945ADF884F4CE322E96F7609 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A069618DFB86210BA92797 /* SceneDelegate.swift */; }; + 9992CC67FEEFCD5C449647F5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B77039FF4008016404245CD /* AppDelegate.swift */; }; + 9F633516A435CF3A80629711 /* iOS-Swift-ActionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 9FA845DB84D1CD64F65F09C3 /* SentrySampleUITestShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A134CD1F5B1EF57310E0D28A /* ProfilingCPUWork.swift in Sources */ = {isa = PBXBuildFile; fileRef = F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */; }; + A33B7315864168745B888AAA /* UserFeedbackUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */; }; + A36F7529967DF4650B2A30F4 /* ExtraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F167D91DC443457E9459B25A /* ExtraViewController.swift */; }; + A7BABE45A57F6086EA714391 /* TopViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */; }; + B353F36AAE7165D1185D6D59 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3BD87A2B62E1BC3E57D6159 /* MainInterface.storyboard */; }; + B53B2B2FAFE59E3F16442710 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 985DCC5D72E703B5070AE77A /* Assets.xcassets */; }; + B88DCA642A478D48BE5F33FC /* SentryPDFViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */; }; + BB881433D04369350EAF28EE /* UITestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6757896C15DC45A3721E0E4 /* UITestHelpers.swift */; }; + BEB39C50554F955B9C0ED4CC /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FD176B4441601AB5FEAF11 /* ShareViewController.swift */; }; + C8685E311CFD471F959409E0 /* TableViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = FEEA62485E8E4A953DCA6466 /* TableViewController.xib */; }; + CB071CF3620376DE56A74E5A /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091E029BF7040895247FB10B /* TableViewController.swift */; }; + CC7669CB4839913CA07942FC /* BaseUITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */; }; + D48891782EBDFA5800054D46 /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + D8D43AE7F1763F285823DE04 /* SentrySampleUITestShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + DEC8E471E76504FF0FC3A813 /* Sample.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = B8D34DA3392FA270D53C12EF /* Sample.mp4 */; }; + DFC067DA37586FB5C3845AE6 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + E19537E24AC87FA8FB614976 /* Sentry.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E9AC8007BD56C0BEC1CDEA8D /* LaunchUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */; }; + E9EA0697CF31EE5674B3B172 /* LoremIpsumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */; }; + EC069813F2C25A4E597ACB4C /* SentrySDKPerformanceBenchmarkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 734953962E0C95C1D03532C6 /* SentrySDKPerformanceBenchmarkTests.m */; }; + EC3DCFEA537525E12B4BFAB3 /* CppWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 78091604E5DA43126BC9F195 /* CppWrapper.mm */; }; + F2EB8945FE8410AC4013F1D3 /* Sentry.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F43644B26FE87149146D3A94 /* SentrySampleUITestShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; }; + F47EE1EDBE1652A95F4F38D0 /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; + F8CBB74BDDC9BDF32A0B53C2 /* TraceTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F46879D621F90A7655C615F /* TraceTestViewController.swift */; }; + FC64935CE5594AB36C745561 /* NibViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AC0B967B60BC739056BD34 /* NibViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 03BA5422F1491741DA3647F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + 04CE818424E4CFEDFC8500F4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + 10A231A271C7F2919AB6621D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + 1B88005472B5B3754024AD7E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 9241AC122EBA38CB00E611ED; + remoteInfo = SentrySwiftLog; + }; + 28D99B7E8D5D8A3FEF039435 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 2; + remoteGlobalIDString = 63AA759B1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + 3794B0D55C8C4C1EED674F88 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + 4AC768F9036A08D866F138F7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + 57429C308B31F557BC7F076D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 2; + remoteGlobalIDString = 431A3FE213391C00C3CE66D2; + remoteInfo = SentrySampleShared; + }; + 75965192E3621CC601EFF76B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; + proxyType = 1; + remoteGlobalIDString = C97FF7E8B34B54F1E1DA596E; + remoteInfo = "iOS-Swift-ShareExtension"; + }; + 775F3A04C531E62306E14BB7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + 785078A2EEA4E27293734411 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + 9552257639CAECB7DF7594E3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5B05A31890F168B2E9851B98; + remoteInfo = "iOS-Swift-ActionExtension"; + }; + 9AA1C80EDE26555EB9D13AA5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = 6B366C32DB86ECAEC77565BA; + remoteInfo = SentrySampleUITestShared; + }; + 9D37C5F7AF5F567F9441DD93 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + AD07460C7C7038E387A15BF7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; + proxyType = 1; + remoteGlobalIDString = CE5CCA44021F9D3D46E8199B; + remoteInfo = "iOS-SwiftClip"; + }; + AE2CD83FC639C0D7FDEBF4E0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 2; + remoteGlobalIDString = 9241AC132EBA38CB00E611ED; + remoteInfo = SentrySwiftLog; + }; + C14383D4B38A48B66866B652 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 2; + remoteGlobalIDString = FECE0CBB64265856A9532559; + remoteInfo = SentrySampleUITestShared; + }; + D1E006385DDD8804E84EC0DC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = 6B366C32DB86ECAEC77565BA; + remoteInfo = SentrySampleUITestShared; + }; + D48891792EBDFA5800054D46 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5DB3F50F9D50D2F2419F11F3; + remoteInfo = "iOS-Swift-IntentExtension"; + }; + DA6BA1590AD71A7A6A923C4B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + E19C531E2112D2306BFFA92E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + F5CD4DB6DC0E2D28F5163B58 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C811907AC373AB60E906542E /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 1E892FF43C4C1BAABA62B967 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + E19537E24AC87FA8FB614976 /* Sentry.framework in Embed Frameworks */, + 864CDDF55D447714ECD8113B /* SentrySampleShared.framework in Embed Frameworks */, + 4A6288CAA3E47ADBC98E03A2 /* SentrySwiftLog.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 6A1AE036BB6A28D42ECD9C87 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 9FA845DB84D1CD64F65F09C3 /* SentrySampleUITestShared.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 838A53713992FAAB18255E51 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + D8D43AE7F1763F285823DE04 /* SentrySampleUITestShared.framework in Embed Frameworks */, + 794FF69C305368C6D432AAF0 /* SentrySampleShared.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + E3DBF0DDB16F30F09AE629F3 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + D48891782EBDFA5800054D46 /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */, + 658BD4C7B5E66786A5D70C2F /* iOS-Swift-ShareExtension.appex in Embed Foundation Extensions */, + 9F633516A435CF3A80629711 /* iOS-Swift-ActionExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + E81D4A427BB760A73A4A7D14 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F2EB8945FE8410AC4013F1D3 /* Sentry.framework in Embed Frameworks */, + 55DB9EEC221DF519072BE0B3 /* SentrySampleShared.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + EFE086EEA5B2C24063CE1F69 /* Embed App Clips */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/AppClips"; + dstSubfolderSpec = 16; + files = ( + 2D1D4103B2B025276E4956B5 /* iOS-SwiftClip.app in Embed App Clips */, + ); + name = "Embed App Clips"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 091E029BF7040895247FB10B /* TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = ""; }; + 09CB9F8DFDCCF7FBEF4819B9 /* XCTest+Delay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTest+Delay.swift"; sourceTree = ""; }; + 0A1935AC3E350D80A199728D /* TopViewControllerInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewControllerInspector.swift; sourceTree = ""; }; + 0B512FE8722AD00B68A822BE /* iOS-Swift-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-Swift-Bridging-Header.h"; sourceTree = ""; }; + 0B74D0352DBEB7A383B09A1A /* iOS-Swift.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "iOS-Swift.yml"; sourceTree = ""; }; + 111D68433FFABCFE3119006C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchUITests.swift; sourceTree = ""; }; + 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftClip.xcconfig"; sourceTree = ""; }; + 1629F8166CE76494F9B01D8F /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; + 191E19F619E741E73E835E47 /* BuildOptions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = BuildOptions.xcconfig; sourceTree = ""; }; + 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "iOS-Swift-ShareExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "iOS-Swift-IntentExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E3F3B596C5D113BE83B2428 /* ClangCppLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangCppLanguage.xcconfig; sourceTree = ""; }; + 2026796F32A57B6F4F468797 /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; }; + 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-IntentExtension.xcconfig"; sourceTree = ""; }; + 2627DF3E963067EEA58BAE88 /* Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Swift.xcconfig; sourceTree = ""; }; + 2694665D127C4B4B62B2DCC3 /* Tongariro.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Tongariro.jpg; sourceTree = ""; }; + 2704901D44B9B108F1B42904 /* NSObject+SentryAppSetup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+SentryAppSetup.h"; sourceTree = ""; }; + 27A507F02EE543D8EAE51253 /* SRRedactSampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SRRedactSampleViewController.swift; sourceTree = ""; }; + 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryPDFViewController.swift; sourceTree = ""; }; + 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiskWriteException.swift; sourceTree = ""; }; + 2CE4A1607B6636E7F9D1049F /* PermissionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionsViewController.swift; sourceTree = ""; }; + 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SampleAssets.xcassets; sourceTree = ""; }; + 3134BF0471477E94C9886A4F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 328DE61B3CAEB67D00E916F0 /* iOS_SwiftClip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOS_SwiftClip.entitlements; sourceTree = ""; }; + 32ECFAF2EE13BB90EAC1BEF6 /* SessionReplayUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionReplayUITests.swift; sourceTree = ""; }; + 34E9AEE9AA451F75F7DB63AA /* CoreDataViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataViewController.swift; sourceTree = ""; }; + 3589A0CF9BB424480A9B7323 /* Sample.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Sample.xcconfig; sourceTree = ""; }; + 3A5B13F49927E3AD638263E7 /* UIEventBreadcrumbTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEventBreadcrumbTests.swift; sourceTree = ""; }; + 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3CCD9ACD51F4FD1F18406815 /* ClangObjCLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangObjCLanguage.xcconfig; sourceTree = ""; }; + 3EDA1112F32AFA3C38DCB341 /* _Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = _Common.xcconfig; sourceTree = ""; }; + 3F640261ED8F2221C4FDBD1F /* iOS-Swift.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "iOS-Swift.entitlements"; sourceTree = ""; }; + 438A5FECE8C2A2E5F63EE2F0 /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; + 4516D984EA4343F20D13AE5E /* ClangLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangLanguage.xcconfig; sourceTree = ""; }; + 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-ActionExtension.xcconfig"; sourceTree = ""; }; + 4B77039FF4008016404245CD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 4D6A40C9633EAECD3B8E0C67 /* iOS-Swift_Base.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "iOS-Swift_Base.xctestplan"; sourceTree = ""; }; + 5305DB7675BCC04CEE052B5C /* ProfilingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingViewController.swift; sourceTree = ""; }; + 551550B87A4D1AE259A27A3F /* ProfilingUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingUITests.swift; sourceTree = ""; }; + 58879E907B39D86CB12A4F4C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift.xcconfig"; sourceTree = ""; }; + 5F0230BC4622C791FBEA4976 /* iOS-Benchmarking_Base.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "iOS-Benchmarking_Base.xctestplan"; sourceTree = ""; }; + 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NibViewController.xib; sourceTree = ""; }; + 63A069618DFB86210BA92797 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iOS-Swift-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Benchmarking.xcconfig"; sourceTree = ""; }; + 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryVideoViewController.swift; sourceTree = ""; }; + 6960C6B2C93BD6A655026C18 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 734953962E0C95C1D03532C6 /* SentrySDKPerformanceBenchmarkTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentrySDKPerformanceBenchmarkTests.m; sourceTree = ""; }; + 75600452DD4B93E1E0355F08 /* EnergyConsumer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnergyConsumer.swift; sourceTree = ""; }; + 77E8D04AD50CA1647ACBF553 /* SentryBenchmarking.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SentryBenchmarking.mm; sourceTree = ""; }; + 78091604E5DA43126BC9F195 /* CppWrapper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CppWrapper.mm; sourceTree = ""; }; + 7BBBC9883318840251690D58 /* TransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionsViewController.swift; sourceTree = ""; }; + 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseUITest.swift; sourceTree = ""; }; + 7F46879D621F90A7655C615F /* TraceTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TraceTestViewController.swift; sourceTree = ""; }; + 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorsViewController.swift; sourceTree = ""; }; + 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewControllerTests.swift; sourceTree = ""; }; + 82187F5842E4AF261FF7A79B /* ClangWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarnings.xcconfig; sourceTree = ""; }; + 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingNetworkScanner.swift; sourceTree = ""; }; + 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS-SwiftClip.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8676CFD056BB0C02B05026F8 /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; }; + 884173CDEBFCB5BCA30755D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 884F6DC27D1D6479DE82A19C /* SearchPaths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SearchPaths.xcconfig; sourceTree = ""; }; + 888CD837181BB01EDC8C69A1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 89700FC1B6E2F322734C4681 /* Linking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Linking.xcconfig; sourceTree = ""; }; + 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-ShareExtension.xcconfig"; sourceTree = ""; }; + 8B4DF0C116D93A28F939AAEF /* ClangModules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangModules.xcconfig; sourceTree = ""; }; + 8FE6B9D12582A2EEA684917F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "iOS-Swift-ActionExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 919455E53FC420C8ED9F8790 /* ClangWarningsObjC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsObjC.xcconfig; sourceTree = ""; }; + 972DD7CBB48B45181873FE3E /* ClangPreprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangPreprocessing.xcconfig; sourceTree = ""; }; + 9736CB8B27AB4F265767C4AF /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; + 985DCC5D72E703B5070AE77A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A1F9EDDC06DDABBA4DB04A3D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + A4568D77EB0E9357D64D0B1F /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; + A4FCD86C1D07412A120BF869 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + A6CFF1E7A99769E83BA0E317 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserFeedbackUITests.swift; sourceTree = ""; }; + A8768C166771E0D49A7057B6 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; + A904FB635EC0E4E513103D85 /* CppWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CppWrapper.h; sourceTree = ""; }; + A92E0DC9A242AE1C8D55FE4E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+SentryAppSetup.m"; sourceTree = ""; }; + B363B5FE6C5D8037994CF501 /* ProjectProposal.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = ProjectProposal.pdf; sourceTree = ""; }; + B8D34DA3392FA270D53C12EF /* Sample.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = Sample.mp4; sourceTree = ""; }; + BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricKitManager.swift; sourceTree = ""; }; + BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-UITests.xcconfig"; sourceTree = ""; }; + C06597CE87CAE662AD88887C /* ClangAnalyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangAnalyzer.xcconfig; sourceTree = ""; }; + C398D285363886FF54084E2B /* ClangWarningsCpp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsCpp.xcconfig; sourceTree = ""; }; + C3E159B651EB7692A2C7E74B /* CppCode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CppCode.cpp; sourceTree = ""; }; + C811907AC373AB60E906542E /* Sentry */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sentry; path = ../../Sentry.xcodeproj; sourceTree = ""; }; + C94FAA087A715E1C000463EB /* ViewLifecycleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewLifecycleUITests.swift; sourceTree = ""; }; + D265E2EDD00C60F7F5B6B888 /* TriggerAppHang.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TriggerAppHang.swift; sourceTree = ""; }; + D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SentrySampleShared; path = ../SentrySampleShared/SentrySampleShared.xcodeproj; sourceTree = ""; }; + D46A7072778733E46E720E52 /* CppCode.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = CppCode.hpp; sourceTree = ""; }; + D48891362EBDF97E00054D46 /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; + D48891412EBDF97F00054D46 /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = System/Library/Frameworks/IntentsUI.framework; sourceTree = SDKROOT; }; + D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEventBreadcrumbsController.swift; sourceTree = ""; }; + D5AC0B967B60BC739056BD34 /* NibViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NibViewController.swift; sourceTree = ""; }; + D765E5E52128E3F6B9D0146C /* PageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageViewController.swift; sourceTree = ""; }; + D80A83A9FD1BECA60D8DAAF8 /* SentryExposure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryExposure.h; sourceTree = ""; }; + D81C678605E1A38F19B5A024 /* CodeGeneration.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeGeneration.xcconfig; sourceTree = ""; }; + D82593E08C9EEE14439FEB1D /* ViewLifecycleTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewLifecycleTestViewController.swift; sourceTree = ""; }; + D9FD176B4441601AB5FEAF11 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; + E312023EF6ACB33ED0305DFC /* SentryBenchmarking.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryBenchmarking.h; sourceTree = ""; }; + E405B26D12528D3D4D0F5ECD /* Person.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Person.xcdatamodel; sourceTree = ""; }; + E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoForBreadcrumbController.swift; sourceTree = ""; }; + E5D662D2A5DE3813AAE19A12 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EB15DB1B86AFA85242911AF5 /* SplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitViewController.swift; sourceTree = ""; }; + EB925B776381501478AB32A1 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; + EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoremIpsumViewController.swift; sourceTree = ""; }; + EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iOS-Benchmarking.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + EFD16BCAD9B26BEB540196C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + F167D91DC443457E9459B25A /* ExtraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraViewController.swift; sourceTree = ""; }; + F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingCPUWork.swift; sourceTree = ""; }; + F561960FD13128F6785A21A7 /* BenchmarkingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkingViewController.swift; sourceTree = ""; }; + F6757896C15DC45A3721E0E4 /* UITestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestHelpers.swift; sourceTree = ""; }; + F938A0625B5B6F20402224EE /* AssetCatalog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AssetCatalog.xcconfig; sourceTree = ""; }; + F94A74A23ED1C3E0778D26AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + FC08BFF2EC8DF341033195E4 /* ReplaceContentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplaceContentViewController.swift; sourceTree = ""; }; + FC535DA5D6DB09218CA168DA /* ActionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionViewController.swift; sourceTree = ""; }; + FEEA62485E8E4A953DCA6466 /* TableViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TableViewController.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + D48891382EBDF97F00054D46 /* IE */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = IE; sourceTree = ""; }; + D48891432EBDF97F00054D46 /* IEUI */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = IEUI; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + 792421530B8177491C99E802 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 53581AA5D1FD2F734A163752 /* Sentry.framework in Frameworks */, + 846570ED1077949BE6404BA5 /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9269256468354F4625283B9E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5D2281140DE120DF5FAFCA46 /* Sentry.framework in Frameworks */, + 2E37B5254D7597BD8B6169B9 /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 95627446A8F36FA0893C4AA7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 521D00C7E7EF3B0AD4633167 /* SentrySampleUITestShared.framework in Frameworks */, + 78F6F743686DBEACC4D34679 /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A6ED93B0446BB19B57BE0C57 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 67BEBED634D92F2B1591DA05 /* Sentry.framework in Frameworks */, + 2FCE6F02F09EC77C3AD49997 /* SentrySampleShared.framework in Frameworks */, + 58DF542F78921F4880ECAE94 /* SentrySwiftLog.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA23A23651FE7A89FA828CE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F43644B26FE87149146D3A94 /* SentrySampleUITestShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DD026EF5271F4C553C9626F5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DFC067DA37586FB5C3845AE6 /* Sentry.framework in Frameworks */, + 8EFBF7F312296D36BD7A65D8 /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F582AE8252B2E02839C7365F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 51A85B15CAD3953FE3556C04 /* Sentry.framework in Frameworks */, + 1336182701E13D2606D4FFEB /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 06619803D06AFF4B14100FAB /* Products */ = { + isa = PBXGroup; + children = ( + 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */, + AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */, + ); + name = Products; + sourceTree = ""; + }; + 0D24C59349E6F2D92B327248 /* Products */ = { + isa = PBXGroup; + children = ( + 0F6BBB6AA617495A3083BF7A /* Sentry.framework */, + 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */, + ); + name = Products; + sourceTree = ""; + }; + 14E8B9BA6F996DBFE2FEB910 /* Tools */ = { + isa = PBXGroup; + children = ( + C3E159B651EB7692A2C7E74B /* CppCode.cpp */, + D46A7072778733E46E720E52 /* CppCode.hpp */, + A904FB635EC0E4E513103D85 /* CppWrapper.h */, + 78091604E5DA43126BC9F195 /* CppWrapper.mm */, + 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */, + 75600452DD4B93E1E0355F08 /* EnergyConsumer.swift */, + 0B512FE8722AD00B68A822BE /* iOS-Swift-Bridging-Header.h */, + BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */, + E312023EF6ACB33ED0305DFC /* SentryBenchmarking.h */, + 77E8D04AD50CA1647ACBF553 /* SentryBenchmarking.mm */, + D80A83A9FD1BECA60D8DAAF8 /* SentryExposure.h */, + 0A1935AC3E350D80A199728D /* TopViewControllerInspector.swift */, + D265E2EDD00C60F7F5B6B888 /* TriggerAppHang.swift */, + ); + path = Tools; + sourceTree = ""; + }; + 1DCC93DE3A98FAA1D60573A7 /* iOS-Swift */ = { + isa = PBXGroup; + children = ( + 4B77039FF4008016404245CD /* AppDelegate.swift */, + 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */, + F167D91DC443457E9459B25A /* ExtraViewController.swift */, + 884173CDEBFCB5BCA30755D8 /* Info.plist */, + 3F640261ED8F2221C4FDBD1F /* iOS-Swift.entitlements */, + 62B078E53E402797EE060833 /* LaunchScreen.storyboard */, + E702320CD964146FB4A53460 /* Main.storyboard */, + B363B5FE6C5D8037994CF501 /* ProjectProposal.pdf */, + B8D34DA3392FA270D53C12EF /* Sample.mp4 */, + 3589A0CF9BB424480A9B7323 /* Sample.xcconfig */, + FA6FCAF423D635FDA9DBBFC1 /* SentryData.xcdatamodeld */, + 2694665D127C4B4B62B2DCC3 /* Tongariro.jpg */, + 7BBBC9883318840251690D58 /* TransactionsViewController.swift */, + DC3B49050E8865F0B7DCAD5D /* Profiling */, + 14E8B9BA6F996DBFE2FEB910 /* Tools */, + F9540EC35C5925E94F45B382 /* ViewControllers */, + ); + path = "iOS-Swift"; + sourceTree = ""; + }; + 1F0588298FB9165C608372B6 /* iOS-Swift */ = { + isa = PBXGroup; + children = ( + 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */, + 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */, + 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */, + 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */, + BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */, + 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */, + 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */, + ); + name = "iOS-Swift"; + path = .; + sourceTree = ""; + }; + 433F312156F4B503E2C22D3D /* iOS-Swift-UITests */ = { + isa = PBXGroup; + children = ( + 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */, + A92E0DC9A242AE1C8D55FE4E /* Info.plist */, + 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */, + 551550B87A4D1AE259A27A3F /* ProfilingUITests.swift */, + 32ECFAF2EE13BB90EAC1BEF6 /* SessionReplayUITests.swift */, + 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */, + 3A5B13F49927E3AD638263E7 /* UIEventBreadcrumbTests.swift */, + F6757896C15DC45A3721E0E4 /* UITestHelpers.swift */, + A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */, + C94FAA087A715E1C000463EB /* ViewLifecycleUITests.swift */, + 09CB9F8DFDCCF7FBEF4819B9 /* XCTest+Delay.swift */, + ); + path = "iOS-Swift-UITests"; + sourceTree = ""; + }; + 530A144D78039C529394F66A /* iOS-Swift-ShareExtension */ = { + isa = PBXGroup; + children = ( + D48890E42EBDF38700054D46 /* Resources */, + D48890E32EBDF37B00054D46 /* Sources */, + ); + path = "iOS-Swift-ShareExtension"; + sourceTree = ""; + }; + 53941E696F63F4E24A3A6B38 /* Products */ = { + isa = PBXGroup; + children = ( + EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */, + 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */, + 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */, + 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */, + 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */, + 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */, + 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */, + ); + name = Products; + sourceTree = ""; + }; + 5BB62199924124F92B26CEB3 /* Config */ = { + isa = PBXGroup; + children = ( + 3EDA1112F32AFA3C38DCB341 /* _Common.xcconfig */, + 8676CFD056BB0C02B05026F8 /* Architectures.xcconfig */, + F938A0625B5B6F20402224EE /* AssetCatalog.xcconfig */, + 191E19F619E741E73E835E47 /* BuildOptions.xcconfig */, + C06597CE87CAE662AD88887C /* ClangAnalyzer.xcconfig */, + 1E3F3B596C5D113BE83B2428 /* ClangCppLanguage.xcconfig */, + 4516D984EA4343F20D13AE5E /* ClangLanguage.xcconfig */, + 8B4DF0C116D93A28F939AAEF /* ClangModules.xcconfig */, + 3CCD9ACD51F4FD1F18406815 /* ClangObjCLanguage.xcconfig */, + 972DD7CBB48B45181873FE3E /* ClangPreprocessing.xcconfig */, + 82187F5842E4AF261FF7A79B /* ClangWarnings.xcconfig */, + C398D285363886FF54084E2B /* ClangWarningsCpp.xcconfig */, + 919455E53FC420C8ED9F8790 /* ClangWarningsObjC.xcconfig */, + D81C678605E1A38F19B5A024 /* CodeGeneration.xcconfig */, + 2026796F32A57B6F4F468797 /* Deployment.xcconfig */, + 89700FC1B6E2F322734C4681 /* Linking.xcconfig */, + 438A5FECE8C2A2E5F63EE2F0 /* Localization.xcconfig */, + 9736CB8B27AB4F265767C4AF /* Metal.xcconfig */, + A8768C166771E0D49A7057B6 /* Packaging.xcconfig */, + 884F6DC27D1D6479DE82A19C /* SearchPaths.xcconfig */, + A4568D77EB0E9357D64D0B1F /* Signing.xcconfig */, + 2627DF3E963067EEA58BAE88 /* Swift.xcconfig */, + ); + name = Config; + path = ../Shared/Config; + sourceTree = ""; + }; + 5D37403FC0B005B14A3BAE3B /* Projects */ = { + isa = PBXGroup; + children = ( + C811907AC373AB60E906542E /* Sentry */, + D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */, + ); + name = Projects; + sourceTree = ""; + }; + 6ECEBFFC5098DEDAE506F622 /* iOS-Benchmarking */ = { + isa = PBXGroup; + children = ( + EFD16BCAD9B26BEB540196C3 /* Info.plist */, + 734953962E0C95C1D03532C6 /* SentrySDKPerformanceBenchmarkTests.m */, + ); + path = "iOS-Benchmarking"; + sourceTree = ""; + }; + 87339914655042F1BBE52163 /* Plans */ = { + isa = PBXGroup; + children = ( + 5F0230BC4622C791FBEA4976 /* iOS-Benchmarking_Base.xctestplan */, + 4D6A40C9633EAECD3B8E0C67 /* iOS-Swift_Base.xctestplan */, + ); + name = Plans; + path = ../../Plans; + sourceTree = ""; + }; + 9D75FD88C0E38876C1D4BBC7 = { + isa = PBXGroup; + children = ( + 0B74D0352DBEB7A383B09A1A /* iOS-Swift.yml */, + 5BB62199924124F92B26CEB3 /* Config */, + 6ECEBFFC5098DEDAE506F622 /* iOS-Benchmarking */, + 1DCC93DE3A98FAA1D60573A7 /* iOS-Swift */, + 1F0588298FB9165C608372B6 /* iOS-Swift */, + E1C30EC84D3648E5D2AA6090 /* iOS-Swift-ActionExtension */, + B1F08350D217FF6B7A06EE44 /* iOS-Swift-IntentExtension */, + 530A144D78039C529394F66A /* iOS-Swift-ShareExtension */, + 433F312156F4B503E2C22D3D /* iOS-Swift-UITests */, + EC3C812AAD487544954AED5D /* iOS-SwiftClip */, + 87339914655042F1BBE52163 /* Plans */, + CC80618C88F712CCC9C11AC2 /* Shared */, + D48891382EBDF97F00054D46 /* IE */, + D48891432EBDF97F00054D46 /* IEUI */, + D48891352EBDF97E00054D46 /* Frameworks */, + 53941E696F63F4E24A3A6B38 /* Products */, + 5D37403FC0B005B14A3BAE3B /* Projects */, + ); + sourceTree = ""; + }; + B1F08350D217FF6B7A06EE44 /* iOS-Swift-IntentExtension */ = { + isa = PBXGroup; + children = ( + D48890E52EBDF38E00054D46 /* Resources */, + D48890E22EBDF37700054D46 /* Sources */, + ); + path = "iOS-Swift-IntentExtension"; + sourceTree = ""; + }; + CC80618C88F712CCC9C11AC2 /* Shared */ = { + isa = PBXGroup; + children = ( + 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */, + ); + name = Shared; + path = ../Shared; + sourceTree = ""; + }; + D48890C92EBDF37100054D46 /* Sources */ = { + isa = PBXGroup; + children = ( + FC535DA5D6DB09218CA168DA /* ActionViewController.swift */, + ); + path = Sources; + sourceTree = ""; + }; + D48890E22EBDF37700054D46 /* Sources */ = { + isa = PBXGroup; + children = ( + 1629F8166CE76494F9B01D8F /* IntentHandler.swift */, + ); + path = Sources; + sourceTree = ""; + }; + D48890E32EBDF37B00054D46 /* Sources */ = { + isa = PBXGroup; + children = ( + D9FD176B4441601AB5FEAF11 /* ShareViewController.swift */, + ); + path = Sources; + sourceTree = ""; + }; + D48890E42EBDF38700054D46 /* Resources */ = { + isa = PBXGroup; + children = ( + 8FE6B9D12582A2EEA684917F /* Info.plist */, + E3BD87A2B62E1BC3E57D6159 /* MainInterface.storyboard */, + ); + path = Resources; + sourceTree = ""; + }; + D48890E52EBDF38E00054D46 /* Resources */ = { + isa = PBXGroup; + children = ( + E5D662D2A5DE3813AAE19A12 /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; + D48890E62EBDF39300054D46 /* Resources */ = { + isa = PBXGroup; + children = ( + 888CD837181BB01EDC8C69A1 /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; + D48891352EBDF97E00054D46 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D48891362EBDF97E00054D46 /* Intents.framework */, + D48891412EBDF97F00054D46 /* IntentsUI.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + DC3B49050E8865F0B7DCAD5D /* Profiling */ = { + isa = PBXGroup; + children = ( + F561960FD13128F6785A21A7 /* BenchmarkingViewController.swift */, + 2704901D44B9B108F1B42904 /* NSObject+SentryAppSetup.h */, + B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */, + F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */, + 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */, + 5305DB7675BCC04CEE052B5C /* ProfilingViewController.swift */, + ); + path = Profiling; + sourceTree = ""; + }; + E1C30EC84D3648E5D2AA6090 /* iOS-Swift-ActionExtension */ = { + isa = PBXGroup; + children = ( + D48890E62EBDF39300054D46 /* Resources */, + D48890C92EBDF37100054D46 /* Sources */, + ); + path = "iOS-Swift-ActionExtension"; + sourceTree = ""; + }; + EC3C812AAD487544954AED5D /* iOS-SwiftClip */ = { + isa = PBXGroup; + children = ( + 3134BF0471477E94C9886A4F /* AppDelegate.swift */, + 985DCC5D72E703B5070AE77A /* Assets.xcassets */, + A1F9EDDC06DDABBA4DB04A3D /* Info.plist */, + 328DE61B3CAEB67D00E916F0 /* iOS_SwiftClip.entitlements */, + 37FB718FAF4DE8DD3FA44C14 /* LaunchScreen.storyboard */, + 8813728C87CB00CBB907AF8D /* Main.storyboard */, + 63A069618DFB86210BA92797 /* SceneDelegate.swift */, + 111D68433FFABCFE3119006C /* ViewController.swift */, + ); + path = "iOS-SwiftClip"; + sourceTree = ""; + }; + F9540EC35C5925E94F45B382 /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 34E9AEE9AA451F75F7DB63AA /* CoreDataViewController.swift */, + E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */, + EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */, + D5AC0B967B60BC739056BD34 /* NibViewController.swift */, + 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */, + D765E5E52128E3F6B9D0146C /* PageViewController.swift */, + 2CE4A1607B6636E7F9D1049F /* PermissionsViewController.swift */, + FC08BFF2EC8DF341033195E4 /* ReplaceContentViewController.swift */, + 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */, + 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */, + EB15DB1B86AFA85242911AF5 /* SplitViewController.swift */, + 27A507F02EE543D8EAE51253 /* SRRedactSampleViewController.swift */, + 091E029BF7040895247FB10B /* TableViewController.swift */, + FEEA62485E8E4A953DCA6466 /* TableViewController.xib */, + 7F46879D621F90A7655C615F /* TraceTestViewController.swift */, + D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */, + D82593E08C9EEE14439FEB1D /* ViewLifecycleTestViewController.swift */, + EB925B776381501478AB32A1 /* WebViewController.swift */, + ); + path = ViewControllers; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0217293F044A3AEED8E37A25 /* iOS-Swift-UITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 05AF3816B4C29EBF970365A6 /* Build configuration list for PBXNativeTarget "iOS-Swift-UITests" */; + buildPhases = ( + E314EC5A65FC77B725C2C065 /* Sources */, + 95627446A8F36FA0893C4AA7 /* Frameworks */, + 838A53713992FAAB18255E51 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + C8D081DB21037550990DD833 /* PBXTargetDependency */, + 34983C58FB741BCAC4C9C524 /* PBXTargetDependency */, + ); + name = "iOS-Swift-UITests"; + packageProductDependencies = ( + ); + productName = "iOS-Swift-UITests"; + productReference = 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 5B05A31890F168B2E9851B98 /* iOS-Swift-ActionExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8333F40D783D1FE5CA8D3C42 /* Build configuration list for PBXNativeTarget "iOS-Swift-ActionExtension" */; + buildPhases = ( + 77FD74323B1D3675E998E895 /* Sources */, + 9269256468354F4625283B9E /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AEE4597AC7E15080557A2942 /* PBXTargetDependency */, + 2D7D11D434971D3FC80A1BDD /* PBXTargetDependency */, + ); + name = "iOS-Swift-ActionExtension"; + packageProductDependencies = ( + ); + productName = "iOS-Swift-ActionExtension"; + productReference = 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = E8C9FFFB0089D54158DD2186 /* Build configuration list for PBXNativeTarget "iOS-Swift-IntentExtension" */; + buildPhases = ( + F2A322C0858D476A56DE85D8 /* Sources */, + 792421530B8177491C99E802 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + AB0E2453795562ED9191BAF4 /* PBXTargetDependency */, + 2EA099CC97C081E5C6439B77 /* PBXTargetDependency */, + ); + name = "iOS-Swift-IntentExtension"; + packageProductDependencies = ( + ); + productName = "iOS-Swift-IntentExtension"; + productReference = 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 6C5B85CBF6AE4AA020E28E5F /* iOS-Swift */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1F756FBE7E9904EAF8AAE794 /* Build configuration list for PBXNativeTarget "iOS-Swift" */; + buildPhases = ( + 71AAA8240D9D3698E33D85D9 /* Sources */, + 20FF642156567BFEA0E2CD6B /* Inject Git Information into Info.plist */, + F49F0FAB7F3E54358343FA90 /* Resources */, + A6ED93B0446BB19B57BE0C57 /* Frameworks */, + E3DBF0DDB16F30F09AE629F3 /* Embed Foundation Extensions */, + EFE086EEA5B2C24063CE1F69 /* Embed App Clips */, + 1E892FF43C4C1BAABA62B967 /* Embed Frameworks */, + B407E0E35A22B7C9EA3039A9 /* Reset Git Fields in Info.plist */, + ); + buildRules = ( + ); + dependencies = ( + 9C2E65AC9E01CF415B661B3F /* PBXTargetDependency */, + B2244FCCBB452CE123C3DE37 /* PBXTargetDependency */, + EC1A2A52557D0A7B4A3E5719 /* PBXTargetDependency */, + 0F77B63056CDE5F11DB7B308 /* PBXTargetDependency */, + 8DE49BBCA6E0FA936BDFF05F /* PBXTargetDependency */, + 79FB95E9457D617F3FAA2559 /* PBXTargetDependency */, + D488917A2EBDFA5800054D46 /* PBXTargetDependency */, + ); + name = "iOS-Swift"; + packageProductDependencies = ( + ); + productName = "iOS-Swift"; + productReference = 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */; + productType = "com.apple.product-type.application"; + }; + C97FF7E8B34B54F1E1DA596E /* iOS-Swift-ShareExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7C57D8C98BDDFD260E351845 /* Build configuration list for PBXNativeTarget "iOS-Swift-ShareExtension" */; + buildPhases = ( + EBDB5AB820D90EE8A13EEBDD /* Sources */, + 6816BC22E70CE418B3AE5BF2 /* Resources */, + DD026EF5271F4C553C9626F5 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F2854F7C5A5C66775ED37569 /* PBXTargetDependency */, + 2C80E4272103ACF479F01069 /* PBXTargetDependency */, + ); + name = "iOS-Swift-ShareExtension"; + packageProductDependencies = ( + ); + productName = "iOS-Swift-ShareExtension"; + productReference = 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + CE5CCA44021F9D3D46E8199B /* iOS-SwiftClip */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3F6AFD503E452D66859993DB /* Build configuration list for PBXNativeTarget "iOS-SwiftClip" */; + buildPhases = ( + A88E48AED3D876A26108EA40 /* Sources */, + 86F786099D42E71942DA7091 /* Inject Git Information into Info.plist */, + 56FA4488924EFB980066D4E4 /* Resources */, + F582AE8252B2E02839C7365F /* Frameworks */, + E81D4A427BB760A73A4A7D14 /* Embed Frameworks */, + B32244D41EA4D13C4C8072F0 /* Reset Git Fields in Info.plist */, + ); + buildRules = ( + ); + dependencies = ( + FBA1B347B47514CFF2F45BD3 /* PBXTargetDependency */, + 8D8992681BC508C7B3BD1E24 /* PBXTargetDependency */, + ); + name = "iOS-SwiftClip"; + packageProductDependencies = ( + ); + productName = "iOS-SwiftClip"; + productReference = 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */; + productType = "com.apple.product-type.application.on-demand-install-capable"; + }; + E7C8F9BC5364F0980E0B827C /* iOS-Benchmarking */ = { + isa = PBXNativeTarget; + buildConfigurationList = 591AC781E512BDAEE308665C /* Build configuration list for PBXNativeTarget "iOS-Benchmarking" */; + buildPhases = ( + 7AD278228CC7578BC3D2E960 /* Sources */, + 550476FA58FCB49169F8CE18 /* Resources */, + AA23A23651FE7A89FA828CE2 /* Frameworks */, + 6A1AE036BB6A28D42ECD9C87 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 51D0CA2A94B53DD17EAF27AC /* PBXTargetDependency */, + ); + name = "iOS-Benchmarking"; + packageProductDependencies = ( + ); + productName = "iOS-Benchmarking"; + productReference = EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3A77435E8E76EAE86C6ABE7F /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 2610; + LastUpgradeCheck = 1430; + TargetAttributes = { + 0217293F044A3AEED8E37A25 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + 5B05A31890F168B2E9851B98 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + 5DB3F50F9D50D2F2419F11F3 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + 6C5B85CBF6AE4AA020E28E5F = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + C97FF7E8B34B54F1E1DA596E = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + CE5CCA44021F9D3D46E8199B = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + E7C8F9BC5364F0980E0B827C = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 8F88BD7F2CAFDFA26054C0F1 /* Build configuration list for PBXProject "iOS-Swift" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = 9D75FD88C0E38876C1D4BBC7; + minimizedProjectReferenceProxies = 1; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 0D24C59349E6F2D92B327248 /* Products */; + ProjectRef = C811907AC373AB60E906542E /* Sentry */; + }, + { + ProductGroup = 06619803D06AFF4B14100FAB /* Products */; + ProjectRef = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; + }, + ); + projectRoot = ""; + targets = ( + E7C8F9BC5364F0980E0B827C /* iOS-Benchmarking */, + 6C5B85CBF6AE4AA020E28E5F /* iOS-Swift */, + 5B05A31890F168B2E9851B98 /* iOS-Swift-ActionExtension */, + 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */, + C97FF7E8B34B54F1E1DA596E /* iOS-Swift-ShareExtension */, + 0217293F044A3AEED8E37A25 /* iOS-Swift-UITests */, + CE5CCA44021F9D3D46E8199B /* iOS-SwiftClip */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SentrySampleShared.framework; + remoteRef = 57429C308B31F557BC7F076D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 0F6BBB6AA617495A3083BF7A /* Sentry.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Sentry.framework; + remoteRef = 28D99B7E8D5D8A3FEF039435 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SentrySwiftLog.framework; + remoteRef = AE2CD83FC639C0D7FDEBF4E0 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SentrySampleUITestShared.framework; + remoteRef = C14383D4B38A48B66866B652 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 550476FA58FCB49169F8CE18 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5BB2BE14330C47B96FFD11FC /* SampleAssets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 56FA4488924EFB980066D4E4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B53B2B2FAFE59E3F16442710 /* Assets.xcassets in Resources */, + 907F36A87BA875ADDD9EE77D /* LaunchScreen.storyboard in Resources */, + 83D57C0C11EE555BAD15D65D /* Main.storyboard in Resources */, + F47EE1EDBE1652A95F4F38D0 /* SampleAssets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6816BC22E70CE418B3AE5BF2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B353F36AAE7165D1185D6D59 /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F49F0FAB7F3E54358343FA90 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3C1454FE7043D31D22E2454F /* LaunchScreen.storyboard in Resources */, + 1908FB96F24AF84C4BF3459C /* Main.storyboard in Resources */, + 85EAE34F771673A771ED6860 /* NibViewController.xib in Resources */, + 1DEFDFE0596A8656263440AA /* ProjectProposal.pdf in Resources */, + DEC8E471E76504FF0FC3A813 /* Sample.mp4 in Resources */, + 67D83B8F6B8B36C3153AD166 /* SampleAssets.xcassets in Resources */, + C8685E311CFD471F959409E0 /* TableViewController.xib in Resources */, + 811D0E72F3EC4835AC2DEAEE /* Tongariro.jpg in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 20FF642156567BFEA0E2CD6B /* Inject Git Information into Info.plist */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Inject Git Information into Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "../Shared/inject-git-info.sh"; + }; + 86F786099D42E71942DA7091 /* Inject Git Information into Info.plist */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Inject Git Information into Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "../Shared/inject-git-info.sh"; + }; + B32244D41EA4D13C4C8072F0 /* Reset Git Fields in Info.plist */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Reset Git Fields in Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "../Shared/reset-git-info.sh"; + }; + B407E0E35A22B7C9EA3039A9 /* Reset Git Fields in Info.plist */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Reset Git Fields in Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "../Shared/reset-git-info.sh"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 71AAA8240D9D3698E33D85D9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9992CC67FEEFCD5C449647F5 /* AppDelegate.swift in Sources */, + 7D9AEC24B1E6A3E9EDE7E463 /* BenchmarkingViewController.swift in Sources */, + 3645DEA0D5FA2CD732CD0A7F /* CoreDataViewController.swift in Sources */, + 3B9B8103032661B496038958 /* CppCode.cpp in Sources */, + EC3DCFEA537525E12B4BFAB3 /* CppWrapper.mm in Sources */, + 7B6DC5B01ABEB99144644E87 /* DiskWriteException.swift in Sources */, + 022500679EC17AFCA83097C9 /* EnergyConsumer.swift in Sources */, + 7F70072A4CC02F1A7F5AD352 /* ErrorsViewController.swift in Sources */, + A36F7529967DF4650B2A30F4 /* ExtraViewController.swift in Sources */, + 4F6AA26561C2DEBAC1F428BD /* InfoForBreadcrumbController.swift in Sources */, + E9EA0697CF31EE5674B3B172 /* LoremIpsumViewController.swift in Sources */, + 55F607BA16B254E78EB63132 /* MetricKitManager.swift in Sources */, + 51DE8527F5BE077F8DA9418F /* NSObject+SentryAppSetup.m in Sources */, + FC64935CE5594AB36C745561 /* NibViewController.swift in Sources */, + 3719A55526158ED00F37538F /* PageViewController.swift in Sources */, + 1A2D51F9C195CAE4881B37CB /* PermissionsViewController.swift in Sources */, + A134CD1F5B1EF57310E0D28A /* ProfilingCPUWork.swift in Sources */, + 55E86406E580D92EA33438FC /* ProfilingNetworkScanner.swift in Sources */, + 321C268EEECA1E6EC1685AB7 /* ProfilingViewController.swift in Sources */, + 2682F19C24704715F14FE9B8 /* ReplaceContentViewController.swift in Sources */, + 131F936B2E6D6ED14B6A5301 /* SRRedactSampleViewController.swift in Sources */, + 51183F4C696186DB42BD8484 /* SentryBenchmarking.mm in Sources */, + 1FAB3D63BF53BDCE25C6A56F /* SentryData.xcdatamodeld in Sources */, + B88DCA642A478D48BE5F33FC /* SentryPDFViewController.swift in Sources */, + 63077CC6E384663E06B7A1D7 /* SentryVideoViewController.swift in Sources */, + 1ECA47ADFB44EDFB74AC08F2 /* SplitViewController.swift in Sources */, + CB071CF3620376DE56A74E5A /* TableViewController.swift in Sources */, + 5CF2C5A14A89516BD01B1028 /* TopViewControllerInspector.swift in Sources */, + F8CBB74BDDC9BDF32A0B53C2 /* TraceTestViewController.swift in Sources */, + 6F370012A1C84FDF6A82BD8D /* TransactionsViewController.swift in Sources */, + 21558F7BAEDF9DD8CA8EEF7A /* TriggerAppHang.swift in Sources */, + 6AD61205E0EF9D834B7049C5 /* UIEventBreadcrumbsController.swift in Sources */, + 46F7775D6A86784793887076 /* ViewLifecycleTestViewController.swift in Sources */, + 10B1F4E91D817FB352EBE1DC /* WebViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 77FD74323B1D3675E998E895 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7BD39BA8DA56883832D7171C /* ActionViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7AD278228CC7578BC3D2E960 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC069813F2C25A4E597ACB4C /* SentrySDKPerformanceBenchmarkTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A88E48AED3D876A26108EA40 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2082C929EDEBA2B486D0C5D0 /* AppDelegate.swift in Sources */, + 945ADF884F4CE322E96F7609 /* SceneDelegate.swift in Sources */, + 3EA6818452916656DD894623 /* ViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E314EC5A65FC77B725C2C065 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CC7669CB4839913CA07942FC /* BaseUITest.swift in Sources */, + E9AC8007BD56C0BEC1CDEA8D /* LaunchUITests.swift in Sources */, + 6FABFFDB1B26F2A135D9304C /* ProfilingUITests.swift in Sources */, + 2F40754B43CBBBCA710076A9 /* SessionReplayUITests.swift in Sources */, + A7BABE45A57F6086EA714391 /* TopViewControllerTests.swift in Sources */, + 25686484B5CCB63FBB658069 /* UIEventBreadcrumbTests.swift in Sources */, + BB881433D04369350EAF28EE /* UITestHelpers.swift in Sources */, + A33B7315864168745B888AAA /* UserFeedbackUITests.swift in Sources */, + 8AD86CC5980E52382B4CB190 /* ViewLifecycleUITests.swift in Sources */, + 1C06B72E1AC6FFC9EE5B2EA6 /* XCTest+Delay.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EBDB5AB820D90EE8A13EEBDD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BEB39C50554F955B9C0ED4CC /* ShareViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F2A322C0858D476A56DE85D8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8CF15B29406C6DE9B7E23453 /* IntentHandler.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0F77B63056CDE5F11DB7B308 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = C97FF7E8B34B54F1E1DA596E /* iOS-Swift-ShareExtension */; + targetProxy = 75965192E3621CC601EFF76B /* PBXContainerItemProxy */; + }; + 2C80E4272103ACF479F01069 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = DA6BA1590AD71A7A6A923C4B /* PBXContainerItemProxy */; + }; + 2D7D11D434971D3FC80A1BDD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = 3794B0D55C8C4C1EED674F88 /* PBXContainerItemProxy */; + }; + 2EA099CC97C081E5C6439B77 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = 775F3A04C531E62306E14BB7 /* PBXContainerItemProxy */; + }; + 34983C58FB741BCAC4C9C524 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = 03BA5422F1491741DA3647F7 /* PBXContainerItemProxy */; + }; + 51D0CA2A94B53DD17EAF27AC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleUITestShared; + targetProxy = D1E006385DDD8804E84EC0DC /* PBXContainerItemProxy */; + }; + 79FB95E9457D617F3FAA2559 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySwiftLog; + targetProxy = 1B88005472B5B3754024AD7E /* PBXContainerItemProxy */; + }; + 8D8992681BC508C7B3BD1E24 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = E19C531E2112D2306BFFA92E /* PBXContainerItemProxy */; + }; + 8DE49BBCA6E0FA936BDFF05F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5B05A31890F168B2E9851B98 /* iOS-Swift-ActionExtension */; + targetProxy = 9552257639CAECB7DF7594E3 /* PBXContainerItemProxy */; + }; + 9C2E65AC9E01CF415B661B3F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = F5CD4DB6DC0E2D28F5163B58 /* PBXContainerItemProxy */; + }; + AB0E2453795562ED9191BAF4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = 04CE818424E4CFEDFC8500F4 /* PBXContainerItemProxy */; + }; + AEE4597AC7E15080557A2942 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = 9D37C5F7AF5F567F9441DD93 /* PBXContainerItemProxy */; + }; + B2244FCCBB452CE123C3DE37 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = CE5CCA44021F9D3D46E8199B /* iOS-SwiftClip */; + targetProxy = AD07460C7C7038E387A15BF7 /* PBXContainerItemProxy */; + }; + C8D081DB21037550990DD833 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleUITestShared; + targetProxy = 9AA1C80EDE26555EB9D13AA5 /* PBXContainerItemProxy */; + }; + D488917A2EBDFA5800054D46 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */; + targetProxy = D48891792EBDFA5800054D46 /* PBXContainerItemProxy */; + }; + EC1A2A52557D0A7B4A3E5719 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = 10A231A271C7F2919AB6621D /* PBXContainerItemProxy */; + }; + F2854F7C5A5C66775ED37569 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = 4AC768F9036A08D866F138F7 /* PBXContainerItemProxy */; + }; + FBA1B347B47514CFF2F45BD3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = 785078A2EEA4E27293734411 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 37FB718FAF4DE8DD3FA44C14 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 58879E907B39D86CB12A4F4C /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + 62B078E53E402797EE060833 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + F94A74A23ED1C3E0778D26AC /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + 8813728C87CB00CBB907AF8D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 6960C6B2C93BD6A655026C18 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + E3BD87A2B62E1BC3E57D6159 /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A4FCD86C1D07412A120BF869 /* Base */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; + E702320CD964146FB4A53460 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A6CFF1E7A99769E83BA0E317 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 03EF5780FF9C4096A498063C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; + }; + name = Debug; + }; + 0603EDA2A6363CE44F98DBFA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; + }; + name = Debug; + }; + 12DB1C420184E6CFC71402EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 1D0FF2A57302565A4EEE7A96 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 2E311F87C852CC8169215E77 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + }; + name = Release; + }; + 2F3847DE42731503BFB7BD4F /* TestCI */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; + }; + name = TestCI; + }; + 3076D19C7578D8C69A4F1D83 /* TestCI */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; + }; + name = TestCI; + }; + 30B9C1E049B7D00AF5D122D0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift/Info.plist"; + }; + name = Debug; + }; + 42AE3A064520696823E08EAF /* TestCI */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = TestCI; + }; + 51CE3FB4A491271D32CE1194 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; + }; + name = Debug; + }; + 57D816856D1C4B9C79A7BB5E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift/Info.plist"; + }; + name = Release; + }; + 5CB977BB83F8D1AF13806DFB /* TestCI */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift/Info.plist"; + }; + name = TestCI; + }; + 67AC019A66E6FD9CC7008064 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; + }; + name = Release; + }; + 7075F87F0974D9668FA7FBB7 /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = auto; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Test; + }; + 73565978072E4E170A106E6D /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + }; + name = Test; + }; + 7A68F6F06C510AADEB3A5DF3 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift/Info.plist"; + }; + name = Test; + }; + 836370D0F2166EEA6F80D458 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; + }; + name = Release; + }; + 847404833AFC7157FBB42B3B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; + }; + name = Debug; + }; + 85E3FB119BB7FFCB7C9845AD /* TestCI */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; + }; + name = TestCI; + }; + 8B372BCEE3570A3FEE007F79 /* TestCI */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + }; + name = TestCI; + }; + A6714FEC7693BA5914721161 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; + }; + name = Test; + }; + AD931B228F7B96BDD03DFC50 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + }; + name = Debug; + }; + C93ABCA3F707A22CF2B80D37 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; + }; + name = Test; + }; + CEDC46EAC20899B87ADF2B0E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; + }; + name = Debug; + }; + D1FD32C91A80F301770F4D7A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; + }; + name = Release; + }; + D4E43A95213D3E1060600EFD /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; + }; + name = Release; + }; + E4925EB74DE5C38CAE8F0052 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; + }; + name = Test; + }; + EB0DC80A6D6C8E6CF5FBB1BB /* TestCI */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; + }; + name = TestCI; + }; + ECA40BDCE850D34C15E2EAB5 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; + }; + name = Test; + }; + F4115300078B99E3EF0221FA /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; + }; + name = Test; + }; + F47B8270A8A659D5E9551720 /* TestCI */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; + buildSettings = { + INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; + }; + name = TestCI; + }; + F989314BCBDB0319AB3E8B15 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 05AF3816B4C29EBF970365A6 /* Build configuration list for PBXNativeTarget "iOS-Swift-UITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CEDC46EAC20899B87ADF2B0E /* Debug */, + F989314BCBDB0319AB3E8B15 /* Release */, + A6714FEC7693BA5914721161 /* Test */, + 3076D19C7578D8C69A4F1D83 /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 1F756FBE7E9904EAF8AAE794 /* Build configuration list for PBXNativeTarget "iOS-Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 30B9C1E049B7D00AF5D122D0 /* Debug */, + 57D816856D1C4B9C79A7BB5E /* Release */, + 7A68F6F06C510AADEB3A5DF3 /* Test */, + 5CB977BB83F8D1AF13806DFB /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 3F6AFD503E452D66859993DB /* Build configuration list for PBXNativeTarget "iOS-SwiftClip" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 51CE3FB4A491271D32CE1194 /* Debug */, + 67AC019A66E6FD9CC7008064 /* Release */, + ECA40BDCE850D34C15E2EAB5 /* Test */, + 85E3FB119BB7FFCB7C9845AD /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 591AC781E512BDAEE308665C /* Build configuration list for PBXNativeTarget "iOS-Benchmarking" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0603EDA2A6363CE44F98DBFA /* Debug */, + 836370D0F2166EEA6F80D458 /* Release */, + F4115300078B99E3EF0221FA /* Test */, + EB0DC80A6D6C8E6CF5FBB1BB /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 7C57D8C98BDDFD260E351845 /* Build configuration list for PBXNativeTarget "iOS-Swift-ShareExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AD931B228F7B96BDD03DFC50 /* Debug */, + 2E311F87C852CC8169215E77 /* Release */, + 73565978072E4E170A106E6D /* Test */, + 8B372BCEE3570A3FEE007F79 /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 8333F40D783D1FE5CA8D3C42 /* Build configuration list for PBXNativeTarget "iOS-Swift-ActionExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 03EF5780FF9C4096A498063C /* Debug */, + D4E43A95213D3E1060600EFD /* Release */, + C93ABCA3F707A22CF2B80D37 /* Test */, + 2F3847DE42731503BFB7BD4F /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 8F88BD7F2CAFDFA26054C0F1 /* Build configuration list for PBXProject "iOS-Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D0FF2A57302565A4EEE7A96 /* Debug */, + 12DB1C420184E6CFC71402EF /* Release */, + 7075F87F0974D9668FA7FBB7 /* Test */, + 42AE3A064520696823E08EAF /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + E8C9FFFB0089D54158DD2186 /* Build configuration list for PBXNativeTarget "iOS-Swift-IntentExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 847404833AFC7157FBB42B3B /* Debug */, + D1FD32C91A80F301770F4D7A /* Release */, + E4925EB74DE5C38CAE8F0052 /* Test */, + F47B8270A8A659D5E9551720 /* TestCI */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + FA6FCAF423D635FDA9DBBFC1 /* SentryData.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + E405B26D12528D3D4D0F5ECD /* Person.xcdatamodel */, + ); + currentVersion = E405B26D12528D3D4D0F5ECD /* Person.xcdatamodel */; + path = SentryData.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = 3A77435E8E76EAE86C6ABE7F /* Project object */; +} diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..919434a6254 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme new file mode 100644 index 00000000000..113639d2148 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme new file mode 100644 index 00000000000..f83eb501730 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme new file mode 100644 index 00000000000..110a6f5f45a --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme new file mode 100644 index 00000000000..8ecbeaddb4f --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme @@ -0,0 +1,429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-Swift/iOS-Swift.yml b/Samples/iOS-Swift/iOS-Swift.yml index e7c777921fe..09c95e00111 100644 --- a/Samples/iOS-Swift/iOS-Swift.yml +++ b/Samples/iOS-Swift/iOS-Swift.yml @@ -34,6 +34,8 @@ targets: - target: iOS-SwiftClip - target: SentrySampleShared/SentrySampleShared - target: iOS-Swift-ShareExtension + - target: iOS-Swift-ActionExtension + - target: iOS-Swift-IntentExtension - target: Sentry/SentrySwiftLog configFiles: Debug: iOS-Swift.xcconfig @@ -109,6 +111,32 @@ targets: Release: iOS-Swift-ShareExtension.xcconfig Test: iOS-Swift-ShareExtension.xcconfig TestCI: iOS-Swift-ShareExtension.xcconfig + iOS-Swift-ActionExtension: + type: app-extension + platform: auto + sources: + - iOS-Swift-ActionExtension + dependencies: + - target: Sentry/Sentry + - target: SentrySampleShared/SentrySampleShared + configFiles: + Debug: iOS-Swift-ActionExtension.xcconfig + Release: iOS-Swift-ActionExtension.xcconfig + Test: iOS-Swift-ActionExtension.xcconfig + TestCI: iOS-Swift-ActionExtension.xcconfig + iOS-Swift-IntentExtension: + type: app-extension + platform: auto + sources: + - iOS-Swift-IntentExtension + dependencies: + - target: Sentry/Sentry + - target: SentrySampleShared/SentrySampleShared + configFiles: + Debug: iOS-Swift-IntentExtension.xcconfig + Release: iOS-Swift-IntentExtension.xcconfig + Test: iOS-Swift-IntentExtension.xcconfig + TestCI: iOS-Swift-IntentExtension.xcconfig schemes: iOS-Swift: templates: @@ -129,3 +157,18 @@ schemes: config: Debug testPlans: - path: ../../Plans/iOS-Benchmarking_Base.xctestplan + iOS-Swift-IntentExtension: + build: + targets: + iOS-Swift: all + iOS-Swift-IntentExtension: test + iOS-Swift-ActionExtension: + build: + targets: + iOS-Swift: all + iOS-Swift-ActionExtension: test + iOS-Swift-ShareExtension: + build: + targets: + iOS-Swift: all + iOS-Swift-ShareExtension: test diff --git a/Samples/iOS-Swift/iOS-Swift/Info.plist b/Samples/iOS-Swift/iOS-Swift/Info.plist index 438de9757e8..d412f5199a6 100644 --- a/Samples/iOS-Swift/iOS-Swift/Info.plist +++ b/Samples/iOS-Swift/iOS-Swift/Info.plist @@ -38,6 +38,10 @@ Testing location permissions NSLocationWhenInUseUsageDescription Testing location permissions + NSSiriUsageDescription + Testing app intents + NSSupportsSiriKit + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile diff --git a/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements b/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements index ee95ab7e582..7fc8dd36b96 100644 --- a/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements +++ b/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements @@ -2,6 +2,8 @@ + com.apple.developer.siri + com.apple.security.app-sandbox com.apple.security.network.client diff --git a/Sources/Sentry/SentryBaseIntegration.m b/Sources/Sentry/SentryBaseIntegration.m index e9e0f99f636..6523f981a3a 100644 --- a/Sources/Sentry/SentryBaseIntegration.m +++ b/Sources/Sentry/SentryBaseIntegration.m @@ -133,11 +133,11 @@ - (BOOL)shouldBeEnabledWithOptions:(SentryOptions *)options return NO; } - if ((integrationOptions & kIntegrationOptionDebuggerNotAttached) && - [SentryDependencyContainer.sharedInstance.crashWrapper isBeingTraced]) { - [self logWithReason:@"because the debugger is attached"]; - return NO; - } + // if ((integrationOptions & kIntegrationOptionDebuggerNotAttached) && + // [SentryDependencyContainer.sharedInstance.crashWrapper isBeingTraced]) { + // [self logWithReason:@"because the debugger is attached"]; + // return NO; + // } #if SENTRY_HAS_UIKIT if ((integrationOptions & kIntegrationOptionAttachViewHierarchy) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index e0da36bc863..7c5c49b37a8 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -8,6 +8,8 @@ platform :ios do ios_swift_infoplist_path = "./Samples/iOS-Swift/iOS-Swift/Info.plist" ios_swift_clip_infoplist_path = "./Samples/iOS-Swift/iOS-SwiftClip/Info.plist" ios_swift_share_extension_infoplist_path = "./Samples/iOS-Swift/iOS-Swift-ShareExtension/Info.plist" + ios_swift_intent_extension_infoplist_path = "./Samples/iOS-Swift/iOS-Swift-IntentExtension/Info.plist" + ios_swift_action_extension_infoplist_path = "./Samples/iOS-Swift/iOS-Swift-ActionExtension/Info.plist" # Helper method to run tests with common configuration def run_ui_tests(scheme:, result_bundle_name:, device: nil, address_sanitizer: false) @@ -73,6 +75,16 @@ platform :ios do key: "CFBundleShortVersionString", value: new_version ) + set_info_plist_value( + path: ios_swift_intent_extension_infoplist_path, + key: "CFBundleShortVersionString", + value: new_version + ) + set_info_plist_value( + path: ios_swift_action_extension_infoplist_path, + key: "CFBundleShortVersionString", + value: new_version + ) sentryInfoPlistPath = "./Sources/Resources/Info.plist" set_info_plist_value( @@ -99,7 +111,9 @@ platform :ios do "io.sentry.iOS-Swift-UITests.xctrunner", "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", - "io.sentry.sample.iOS-Swift.ShareExtension" + "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension" ], readonly: true ) @@ -113,7 +127,9 @@ platform :ios do "io.sentry.iOS-Swift-UITests.xctrunner", "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", - "io.sentry.sample.iOS-Swift.ShareExtension" + "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension" ], readonly: true ) @@ -128,7 +144,9 @@ platform :ios do app_identifier: [ "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", - "io.sentry.sample.iOS-Swift.ShareExtension" + "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension" ], ) @@ -158,7 +176,9 @@ platform :ios do app_identifier: [ "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", - "io.sentry.sample.iOS-Swift.ShareExtension" + "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension" ] ) @@ -184,6 +204,8 @@ platform :ios do "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension", "io.sentry.iOS-Swift-UITests.xctrunner" ], ) @@ -205,6 +227,8 @@ platform :ios do "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension", "io.sentry.iOS-Benchmarking.xctrunner" ], ) @@ -373,7 +397,9 @@ platform :ios do app_identifier: [ "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", - "io.sentry.sample.iOS-Swift.ShareExtension" + "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension" ], readonly: false ) @@ -382,7 +408,9 @@ platform :ios do app_identifier: [ "io.sentry.sample.iOS-Swift", "io.sentry.sample.iOS-Swift.Clip", - "io.sentry.sample.iOS-Swift.ShareExtension" + "io.sentry.sample.iOS-Swift.ShareExtension", + "io.sentry.sample.iOS-Swift.IntentExtension", + "io.sentry.sample.iOS-Swift.ActionExtension" ], readonly: false ) diff --git a/fastlane/Matchfile b/fastlane/Matchfile index 89b3e4e035a..4e34dc649a5 100644 --- a/fastlane/Matchfile +++ b/fastlane/Matchfile @@ -1,6 +1,6 @@ git_url("git@github.com:getsentry/codesigning.git") storage_mode("git") -username("bot@getsentry.com") # Your Apple Developer Portal username +# username("bot@getsentry.com") # Your Apple Developer Portal username shallow_clone(true) readonly(true) From 9d5030b421a020ce68c42554d00f636ace3f98e0 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 11:25:50 +0100 Subject: [PATCH 04/19] WIP --- .../Base.lproj/MainInterface.storyboard | 24 ++++++++++++ .../Sources/IntentHandler.swift | 20 ++-------- .../Sources/ShareViewController.swift | 38 +++++++++++++++++-- .../iOS-Swift.xcodeproj/project.pbxproj | 13 +++---- .../iOS-Swift-ActionExtension.xcscheme | 5 --- .../Helper/SentryExtensionDetector.swift | 2 +- .../Swift/Helper/SentryExtensionType.swift | 6 ++- 7 files changed, 74 insertions(+), 34 deletions(-) create mode 100644 Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard new file mode 100644 index 00000000000..286a50894d8 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift index dc82e03d4a3..299b0a3b7c8 100644 --- a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift +++ b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift @@ -4,23 +4,13 @@ import Sentry import SentrySampleShared class IntentHandler: INExtension, INSendMessageIntentHandling { - - private static var hasSetupSentry = false - + override init() { super.init() - print("🔵 IntentHandler.init() called") - setupSentrySDK() + setupSentry() } - private func setupSentrySDK() { - // Only setup once per process - guard !Self.hasSetupSentry else { - return - } - Self.hasSetupSentry = true - - print("🔵 IntentHandler.setupSentrySDK() called") + private func setupSentry() { SentrySDKWrapper.shared.startSentry() // Small delay to ensure SDK is initialized @@ -45,9 +35,7 @@ class IntentHandler: INExtension, INSendMessageIntentHandling { } override func handler(for intent: INIntent) -> Any { - print("🔵 IntentHandler.handler(for intent:) called with intent: \(type(of: intent))") - // Ensure Sentry is setup when handler is requested - setupSentrySDK() + setupSentry() return self } diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift index cd3dd15885a..e09066161ca 100644 --- a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift @@ -1,4 +1,4 @@ -import Sentry +@_spi(Private) @testable import Sentry import SentrySampleShared import Social import UIKit @@ -16,10 +16,18 @@ class ShareViewController: SLComposeServiceViewController { } private func setupSentry() { - SentrySDKWrapper.shared.startSentry() + // For this extension we need a specific configuration set, therefore we do not use the shared sample initializer + SentrySDK.start { options in + options.dsn = SentrySDKWrapper.defaultDSN + options.debug = true + + // App Hang Tracking must be enabled, but should not be installed + options.enableAppHangTracking = true + } } override func isContentValid() -> Bool { + // We are not actually processing any information, therefore just allow all content return true } @@ -30,6 +38,30 @@ class ShareViewController: SLComposeServiceViewController { } override func configurationItems() -> [Any]! { - return [] + guard let isSDKEnabledItem = SLComposeSheetConfigurationItem() else { + return [] + } + isSDKEnabledItem.title = "Sentry Enabled?" + isSDKEnabledItem.value = isSentryEnabled ? "✅" : "❌" + + guard let isANRActiveItem = SLComposeSheetConfigurationItem() else { + return [] + } + isANRActiveItem.title = "ANR Disabled?" + // We want the ANR integration to be disabled for share extensions due to false-positives + isANRActiveItem.value = !isANRInstalled ? "✅" : "❌" + + return [ + isSDKEnabledItem, + isANRActiveItem + ] + } + + var isANRInstalled: Bool { + return isSentryEnabled && SentrySDKInternal.trimmedInstalledIntegrationNames().contains("ANRTracking") + } + + var isSentryEnabled: Bool { + SentrySDK.isEnabled } } diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj index bd20dbc8592..aec7a03abdc 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 70; + objectVersion = 63; objects = { /* Begin PBXBuildFile section */ @@ -457,11 +457,6 @@ FEEA62485E8E4A953DCA6466 /* TableViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TableViewController.xib; sourceTree = ""; }; /* End PBXFileReference section */ -/* Begin PBXFileSystemSynchronizedRootGroup section */ - D48891382EBDF97F00054D46 /* IE */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = IE; sourceTree = ""; }; - D48891432EBDF97F00054D46 /* IEUI */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = IEUI; sourceTree = ""; }; -/* End PBXFileSystemSynchronizedRootGroup section */ - /* Begin PBXFrameworksBuildPhase section */ 792421530B8177491C99E802 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -719,8 +714,6 @@ EC3C812AAD487544954AED5D /* iOS-SwiftClip */, 87339914655042F1BBE52163 /* Plans */, CC80618C88F712CCC9C11AC2 /* Shared */, - D48891382EBDF97F00054D46 /* IE */, - D48891432EBDF97F00054D46 /* IEUI */, D48891352EBDF97E00054D46 /* Frameworks */, 53941E696F63F4E24A3A6B38 /* Products */, 5D37403FC0B005B14A3BAE3B /* Projects */, @@ -1634,6 +1627,7 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = Release; }; @@ -1823,6 +1817,7 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = Test; }; @@ -1864,6 +1859,7 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = TestCI; }; @@ -1881,6 +1877,7 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; + SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = Debug; }; diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme index 113639d2148..42780dab3d2 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme @@ -66,11 +66,6 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" launchAutomaticallySubstyle = "2"> - - Date: Fri, 7 Nov 2025 11:46:28 +0100 Subject: [PATCH 05/19] WIP --- .../Base.lproj/MainInterface.storyboard | 24 --- .../Sources/ActionViewController.swift | 146 ++++++++++-------- .../Helper/SentryExtensionDetector.swift | 7 +- 3 files changed, 85 insertions(+), 92 deletions(-) delete mode 100644 Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard deleted file mode 100644 index 286a50894d8..00000000000 --- a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Resources/Base.lproj/MainInterface.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift index d003df1d875..eb643c6e778 100644 --- a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift @@ -5,84 +5,96 @@ import UIKit import UniformTypeIdentifiers class ActionViewController: UIViewController { - + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupSentry() + } + + override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) + setupSentry() + } + + private func setupSentry() { + // For this extension we need a specific configuration set, therefore we do not use the shared sample initializer + SentrySDK.start { options in + options.dsn = SentrySDKWrapper.defaultDSN + options.debug = true + + // App Hang Tracking must be enabled, but should not be installed + options.enableAppHangTracking = true + } + } + override func viewDidLoad() { super.viewDidLoad() - - // Setup view first - view.backgroundColor = .systemBackground - - // Setup Sentry SDK - setupSentrySDK() - - // Display ANR status - setupStatusLabel() + + setupUI() } - - private func setupSentrySDK() { - SentrySDKWrapper.shared.startSentry() - - // Small delay to ensure SDK is initialized - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - self.checkANRStatus() - } + + func setupUI() { + view.backgroundColor = .systemBackground + + setupDoneButton() + setupStatusChecklist() } - - private func checkANRStatus() { - // Verify ANR tracking is disabled - var anrInstalled = false - if SentrySDK.isEnabled { - let integrationNames = SentrySDKInternal.trimmedInstalledIntegrationNames() - anrInstalled = integrationNames.contains("ANRTracking") - } - - if anrInstalled { - print("❌ ERROR: ANR tracking should be disabled in Action Extension but it's enabled!") - } else { - print("✅ ANR tracking is correctly disabled in Action Extension") - } - - // Update label if view is still loaded - if view.window != nil { - updateStatusLabel(anrInstalled: anrInstalled) - } + + var isANRInstalled: Bool { + return isSentryEnabled && SentrySDKInternal.trimmedInstalledIntegrationNames().contains("ANRTracking") } - - private func setupStatusLabel() { - // Initial check - might show "checking..." if SDK not ready - var anrInstalled = false - if SentrySDK.isEnabled { - let integrationNames = SentrySDKInternal.trimmedInstalledIntegrationNames() - anrInstalled = integrationNames.contains("ANRTracking") - } - - updateStatusLabel(anrInstalled: anrInstalled) + + var isSentryEnabled: Bool { + SentrySDK.isEnabled } - - private func updateStatusLabel(anrInstalled: Bool) { - // Remove existing label if any - view.subviews.forEach { $0.removeFromSuperview() } - - let statusLabel = UILabel() - statusLabel.text = anrInstalled ? "❌ ANR Enabled (ERROR!)" : "✅ ANR Disabled" - statusLabel.textColor = anrInstalled ? .red : .green - statusLabel.font = .systemFont(ofSize: 24, weight: .bold) - statusLabel.textAlignment = .center - statusLabel.numberOfLines = 0 - statusLabel.translatesAutoresizingMaskIntoConstraints = false - - view.addSubview(statusLabel) + + // MARK: - UI + + func setupDoneButton() { + var configuration = UIButton.Configuration.borderedProminent() + configuration.title = "Done" + configuration.baseBackgroundColor = .systemBlue + configuration.buttonSize = .large + + let button = UIButton(configuration: configuration) + button.addTarget(self, action: #selector(doneAction(_:)), for: .touchUpInside) + view.addSubview(button) + + button.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ - statusLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor), - statusLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor), - statusLabel.leadingAnchor.constraint(greaterThanOrEqualTo: view.leadingAnchor, constant: 20), - statusLabel.trailingAnchor.constraint(lessThanOrEqualTo: view.trailingAnchor, constant: -20) + button.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + button.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16), + button.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16) ]) } - - @IBAction func done() { + + @objc func doneAction(_ sender: UIButton) { SentrySDK.capture(message: "iOS-Swift-ActionExtension: done called") let returnItems = extensionContext?.inputItems as? [NSExtensionItem] ?? [] extensionContext?.completeRequest(returningItems: returnItems, completionHandler: nil) } + + func setupStatusChecklist() { + let stack = UIStackView() + stack.axis = .vertical + stack.spacing = 8 + view.addSubview(stack) + + stack.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + stack.centerXAnchor.constraint(equalTo: view.centerXAnchor), + stack.centerYAnchor.constraint(equalTo: view.centerYAnchor) + ]) + + let sdkStatusLabel = UILabel() + sdkStatusLabel.text = isSentryEnabled ? "✅ Sentry is enabled" : "❌ Sentry is not enabled" + sdkStatusLabel.textAlignment = .center + stack.addArrangedSubview(sdkStatusLabel) + + let anrStatusLabel = UILabel() + // We want the ANR integration to be disabled for share extensions due to false-positives + anrStatusLabel.text = !isANRInstalled ? "✅ ANR Tracking not installed" : "❌ ANR Tracking installed" + anrStatusLabel.textAlignment = .center + stack.addArrangedSubview(anrStatusLabel) + } } diff --git a/Sources/Swift/Helper/SentryExtensionDetector.swift b/Sources/Swift/Helper/SentryExtensionDetector.swift index 10ef240f46c..168c7283bf2 100644 --- a/Sources/Swift/Helper/SentryExtensionDetector.swift +++ b/Sources/Swift/Helper/SentryExtensionDetector.swift @@ -3,7 +3,12 @@ import Foundation @_spi(Private) public final class SentryExtensionDetector: NSObject { /// All extension types where app hang tracking should be disabled private static var disabledAppHangTypes: [SentryExtensionType] { - return [.widget, .intent, .action, .share] + return [ + .widget, + .intent, + .action, + .share + ] } private let infoPlistWrapper: SentryInfoPlistWrapperProvider From 0965325bb39fabe4d819a99a6846dfb3c975325f Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 12:19:32 +0100 Subject: [PATCH 06/19] WIP --- .../Sources/IntentHandler.swift | 109 +++++++----------- .../iOS-Swift-IntentExtension.xcscheme | 5 - 2 files changed, 39 insertions(+), 75 deletions(-) diff --git a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift index 299b0a3b7c8..53b1d55ac2c 100644 --- a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift +++ b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift @@ -9,95 +9,64 @@ class IntentHandler: INExtension, INSendMessageIntentHandling { super.init() setupSentry() } - - private func setupSentry() { - SentrySDKWrapper.shared.startSentry() - - // Small delay to ensure SDK is initialized - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - self.checkANRStatus() - } - } - - private func checkANRStatus() { - // Verify ANR tracking is disabled - var anrInstalled = false - if SentrySDK.isEnabled { - let integrationNames = SentrySDKInternal.trimmedInstalledIntegrationNames() - anrInstalled = integrationNames.contains("ANRTracking") - } - - if anrInstalled { - print("❌ ERROR: ANR tracking should be disabled in Intent Extension but it's enabled!") - } else { - print("✅ ANR tracking is correctly disabled in Intent Extension") - } - } - + override func handler(for intent: INIntent) -> Any { setupSentry() return self } + + private func setupSentry() { + // For this extension we need a specific configuration set, therefore we do not use the shared sample initializer + SentrySDK.start { options in + options.dsn = SentrySDKWrapper.defaultDSN + options.debug = true + + // App Hang Tracking must be enabled, but should not be installed + options.enableAppHangTracking = true + } + } // MARK: - INSendMessageIntentHandling - // Implement resolution methods to provide additional information about your intent (optional). func resolveRecipients(for intent: INSendMessageIntent, with completion: @escaping ([INSendMessageRecipientResolutionResult]) -> Void) { - if let recipients = intent.recipients { - // If no recipients were provided we'll need to prompt for a value. - if recipients.count == 0 { - completion([INSendMessageRecipientResolutionResult.needsValue()]) - return - } - - var resolutionResults = [INSendMessageRecipientResolutionResult]() - for recipient in recipients { - let matchingContacts = [recipient] // Implement your contact matching logic here to create an array of matching contacts - switch matchingContacts.count { - case 2 ... Int.max: - // We need Siri's help to ask user to pick one from the matches. - resolutionResults += [INSendMessageRecipientResolutionResult.disambiguation(with: matchingContacts)] - - case 1: - // We have exactly one matching contact - resolutionResults += [INSendMessageRecipientResolutionResult.success(with: recipient)] - - case 0: - // We have no contacts matching the description provided - resolutionResults += [INSendMessageRecipientResolutionResult.unsupported()] - - default: - break - } - } - completion(resolutionResults) - } else { - completion([INSendMessageRecipientResolutionResult.needsValue()]) - } + let person = INPerson( + personHandle: INPersonHandle(value: "john-snow", type: .unknown), + nameComponents: PersonNameComponents(givenName: "John", familyName: "Snow"), + displayName: "John Snow", + image: nil, + contactIdentifier: nil, + customIdentifier: nil + ) + completion([INSendMessageRecipientResolutionResult.success(with: person)]) } func resolveContent(for intent: INSendMessageIntent, with completion: @escaping (INStringResolutionResult) -> Void) { - if let text = intent.content, !text.isEmpty { - completion(INStringResolutionResult.success(with: text)) - } else { - completion(INStringResolutionResult.needsValue()) - } + let message = """ + Sentry Enabled? \(isSentryEnabled ? "✅" : "❌") + ANR Disabled? \(!isANRInstalled ? "✅" : "❌") + """ + completion(INStringResolutionResult.success(with: message)) } - // Once resolution is completed, perform validation on the intent and provide confirmation (optional). func confirm(intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) { - // Verify user is authenticated and your app is ready to send a message. let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self)) - let response = INSendMessageIntentResponse(code: .ready, userActivity: userActivity) - completion(response) + completion(INSendMessageIntentResponse(code: .ready, userActivity: userActivity)) } - // Handle the completed intent (required). func handle(intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) { - print("🔵 IntentHandler.handle(intent:) called") SentrySDK.capture(message: "iOS-Swift-IntentExtension: handle intent called") + let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self)) - let response = INSendMessageIntentResponse(code: .success, userActivity: userActivity) - completion(response) + completion(INSendMessageIntentResponse(code: .success, userActivity: userActivity)) + } + + // MARK: - Helpers + + var isANRInstalled: Bool { + return isSentryEnabled && SentrySDKInternal.trimmedInstalledIntegrationNames().contains("ANRTracking") + } + + var isSentryEnabled: Bool { + SentrySDK.isEnabled } } diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme index f83eb501730..2f6679d439b 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme @@ -66,11 +66,6 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" launchAutomaticallySubstyle = "2"> - - Date: Fri, 7 Nov 2025 13:15:49 +0100 Subject: [PATCH 07/19] add more tests --- .../Helper/SentryExtensionDetectorTests.swift | 28 +++++++++++++++++++ .../Helper/SentryExtensionTypeTests.swift | 4 +++ .../SentryANRTrackingIntegrationTests.swift | 25 +++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift b/Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift index b7f27ad95ca..c1b235b19e8 100644 --- a/Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift +++ b/Tests/SentryTests/Helper/SentryExtensionDetectorTests.swift @@ -78,6 +78,20 @@ final class SentryExtensionDetectorTests: XCTestCase { XCTAssertEqual(identifier, "com.apple.ui-services") } + func testGetExtensionPointIdentifier_shareExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.share-services"] + ) + + // Act + let identifier = sut.getExtensionPointIdentifier() + + // Assert + XCTAssertEqual(identifier, "com.apple.share-services") + } + // MARK: - App Hang Tracking Disable Detection func testShouldDisableAppHangTracking_notAnExtension() { @@ -130,6 +144,20 @@ final class SentryExtensionDetectorTests: XCTestCase { XCTAssertTrue(shouldDisable, "Action extension should disable app hang tracking") } + func testShouldDisableAppHangTracking_shareExtension() { + // Arrange + infoPlistWrapper.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.share-services"] + ) + + // Act + let shouldDisable = sut.shouldDisableAppHangTracking() + + // Assert + XCTAssertTrue(shouldDisable, "Share extension should disable app hang tracking") + } + func testShouldDisableAppHangTracking_unknownExtension() { // Arrange - extension with unknown identifier infoPlistWrapper.mockGetAppValueDictionaryReturnValue( diff --git a/Tests/SentryTests/Helper/SentryExtensionTypeTests.swift b/Tests/SentryTests/Helper/SentryExtensionTypeTests.swift index fe779bac362..7f8458fdcc9 100644 --- a/Tests/SentryTests/Helper/SentryExtensionTypeTests.swift +++ b/Tests/SentryTests/Helper/SentryExtensionTypeTests.swift @@ -13,4 +13,8 @@ final class SentryExtensionTypeTests: XCTestCase { func testAction_shouldReturnExpectedIdentifier() { XCTAssertEqual(SentryExtensionType.action.identifier, "com.apple.ui-services") } + + func testShare_shouldReturnExpectedIdentifier() { + XCTAssertEqual(SentryExtensionType.share.identifier, "com.apple.share-services") + } } diff --git a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift index a444408da17..d93ba03da7c 100644 --- a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift +++ b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift @@ -822,6 +822,31 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") } + func testInstall_runningInShareExtension_shouldNotInstall() { + // Arrange + let mockInfoPlist = TestInfoPlistWrapper() + mockInfoPlist.mockGetAppValueDictionaryReturnValue( + forKey: SentryInfoPlistKey.extension.rawValue, + value: ["NSExtensionPointIdentifier": "com.apple.share-services"] + ) + Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) + + let options = Options() + options.dsn = SentryANRTrackingIntegrationTests.dsn + options.enableAppHangTracking = true + options.appHangTimeoutInterval = 2.0 + + crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() + + // Act + let result = sut.install(with: options) + + // Assert + XCTAssertFalse(result, "Should not install when running in a Share extension") + XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") + } + func testInstall_runningInUnknownExtension_shouldInstall() { // Arrange let mockInfoPlist = TestInfoPlistWrapper() From 41d3c2d651ea73760a7ea27497914446243a5afd Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 13:24:13 +0100 Subject: [PATCH 08/19] cleanup --- CHANGELOG.md | 2 +- .../Base.lproj/MainInterface.storyboard | 26 ----- .../iOS-Swift/IntentsUIExtension/Info.plist | 20 ---- .../IntentViewController.swift | 36 ------ .../xcschemes/iOS-Benchmarking.xcscheme | 109 ++++++++++++++++++ Sources/Sentry/SentryBaseIntegration.m | 10 +- fastlane/Matchfile | 2 +- sdk_api.json | 39 +++++++ 8 files changed, 155 insertions(+), 89 deletions(-) delete mode 100644 Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard delete mode 100644 Samples/iOS-Swift/IntentsUIExtension/Info.plist delete mode 100644 Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift create mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme diff --git a/CHANGELOG.md b/CHANGELOG.md index 0faee03d9bb..b737f9264d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,7 +39,7 @@ If you need a precompiled XCFramework built with Xcode 15, continue using Sentry SDK 8.x.x. - Set `SentryException.type` to `nil` when `NSException` has no `reason` (#6653). The backend then can provide a proper message when there is no reason. - Rename `SentryLog.Level` and `SentryLog.Attribute` for ObjC (#6666) -- App hang tracking is now automatically disabled for Widgets, Live Activities, Intent Extensions, and Action Extensions (#6670). +- App hang tracking is now automatically disabled for Widgets, Live Activities, Action Extensions, (Siri) Intent Extensions, and Share Extensions (#6670). These components run in separate processes or sandboxes with different execution characteristics, which can cause false positive app hang reports. ### Fixes diff --git a/Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard b/Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard deleted file mode 100644 index e6c64fcfc14..00000000000 --- a/Samples/iOS-Swift/IntentsUIExtension/Base.lproj/MainInterface.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-Swift/IntentsUIExtension/Info.plist b/Samples/iOS-Swift/IntentsUIExtension/Info.plist deleted file mode 100644 index 739fbdc5a7b..00000000000 --- a/Samples/iOS-Swift/IntentsUIExtension/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - NSExtension - - NSExtensionAttributes - - IntentsSupported - - INSendMessageIntent - - - NSExtensionMainStoryboard - MainInterface - NSExtensionPointIdentifier - com.apple.intents-ui-service - - - diff --git a/Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift b/Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift deleted file mode 100644 index 23ddc06150b..00000000000 --- a/Samples/iOS-Swift/IntentsUIExtension/IntentViewController.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// IntentViewController.swift -// IntentsUIExtension -// -// Created by Philip Niedertscheider on 07.11.25. -// - -import IntentsUI - -// As an example, this extension's Info.plist has been configured to handle interactions for INSendMessageIntent. -// You will want to replace this or add other intents as appropriate. -// The intents whose interactions you wish to handle must be declared in the extension's Info.plist. - -// You can test this example integration by saying things to Siri like: -// "Send a message using " - -class IntentViewController: UIViewController, INUIHostedViewControlling { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - - // MARK: - INUIHostedViewControlling - - // Prepare your view controller for the interaction to handle. - func configureView(for parameters: Set, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set, CGSize) -> Void) { - // Do configuration here, including preparing views and calculating a desired size for presentation. - completion(true, parameters, self.desiredSize) - } - - var desiredSize: CGSize { - return self.extensionContext!.hostedViewMaximumAllowedSize - } - -} diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme new file mode 100644 index 00000000000..2b81b73a9a2 --- /dev/null +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/Sentry/SentryBaseIntegration.m b/Sources/Sentry/SentryBaseIntegration.m index 6523f981a3a..e9e0f99f636 100644 --- a/Sources/Sentry/SentryBaseIntegration.m +++ b/Sources/Sentry/SentryBaseIntegration.m @@ -133,11 +133,11 @@ - (BOOL)shouldBeEnabledWithOptions:(SentryOptions *)options return NO; } - // if ((integrationOptions & kIntegrationOptionDebuggerNotAttached) && - // [SentryDependencyContainer.sharedInstance.crashWrapper isBeingTraced]) { - // [self logWithReason:@"because the debugger is attached"]; - // return NO; - // } + if ((integrationOptions & kIntegrationOptionDebuggerNotAttached) && + [SentryDependencyContainer.sharedInstance.crashWrapper isBeingTraced]) { + [self logWithReason:@"because the debugger is attached"]; + return NO; + } #if SENTRY_HAS_UIKIT if ((integrationOptions & kIntegrationOptionAttachViewHierarchy) diff --git a/fastlane/Matchfile b/fastlane/Matchfile index 4e34dc649a5..89b3e4e035a 100644 --- a/fastlane/Matchfile +++ b/fastlane/Matchfile @@ -1,6 +1,6 @@ git_url("git@github.com:getsentry/codesigning.git") storage_mode("git") -# username("bot@getsentry.com") # Your Apple Developer Portal username +username("bot@getsentry.com") # Your Apple Developer Portal username shallow_clone(true) readonly(true) diff --git a/sdk_api.json b/sdk_api.json index 6cae44b0759..b047dddf5ae 100644 --- a/sdk_api.json +++ b/sdk_api.json @@ -26114,6 +26114,45 @@ "declAttributes": [ "ObjC" ] + }, + { + "kind": "Var", + "name": "share", + "printedName": "share", + "children": [ + { + "kind": "TypeFunc", + "name": "Function", + "printedName": "(Sentry.SentryExtensionType.Type) -> Sentry.SentryExtensionType", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + }, + { + "kind": "TypeNominal", + "name": "Metatype", + "printedName": "Sentry.SentryExtensionType.Type", + "children": [ + { + "kind": "TypeNominal", + "name": "SentryExtensionType", + "printedName": "Sentry.SentryExtensionType", + "usr": "c:@M@Sentry@E@SentryExtensionType" + } + ] + } + ] + } + ], + "declKind": "EnumElement", + "usr": "c:@M@Sentry@E@SentryExtensionType@SentryExtensionTypeShare", + "moduleName": "Sentry", + "declAttributes": [ + "ObjC" + ] } ], "declKind": "Enum", From 9c83007f15776711b71cddfaca8c2147e949cc1f Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 13:41:17 +0100 Subject: [PATCH 09/19] cleanup --- .../Sources/ActionViewController.swift | 6 + .../Sources/IntentHandler.swift | 6 + .../iOS-Swift-ShareExtension.xcconfig | 2 + .../Sources/ShareViewController.swift | 6 + .../iOS-Swift.xcodeproj/project.pbxproj | 248 ++++++++---------- .../iOS-Swift-ActionExtension.xcscheme | 54 ++-- .../iOS-Swift-IntentExtension.xcscheme | 54 ++-- .../iOS-Swift-ShareExtension.xcscheme | 59 ++--- Samples/iOS-Swift/iOS-Swift.yml | 12 +- 9 files changed, 229 insertions(+), 218 deletions(-) diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift index eb643c6e778..fb1d90e6f43 100644 --- a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift @@ -17,6 +17,12 @@ class ActionViewController: UIViewController { } private func setupSentry() { + // Prevent double initialization - SentrySDK.start() can be called multiple times + // but we want to avoid unnecessary re-initialization + guard !SentrySDK.isEnabled else { + return + } + // For this extension we need a specific configuration set, therefore we do not use the shared sample initializer SentrySDK.start { options in options.dsn = SentrySDKWrapper.defaultDSN diff --git a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift index 53b1d55ac2c..b00062c07ff 100644 --- a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift +++ b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift @@ -16,6 +16,12 @@ class IntentHandler: INExtension, INSendMessageIntentHandling { } private func setupSentry() { + // Prevent double initialization - SentrySDK.start() can be called multiple times + // but we want to avoid unnecessary re-initialization + guard !SentrySDK.isEnabled else { + return + } + // For this extension we need a specific configuration set, therefore we do not use the shared sample initializer SentrySDK.start { options in options.dsn = SentrySDKWrapper.defaultDSN diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig b/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig index 5ebb89969e5..c10225b7503 100644 --- a/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig +++ b/Samples/iOS-Swift/iOS-Swift-ShareExtension.xcconfig @@ -14,5 +14,7 @@ CODE_SIGN_STYLE = Manual SUPPORTED_PLATFORMS = iphoneos iphonesimulator +SWIFT_OBJC_BRIDGING_HEADER = iOS-Swift/Tools/iOS-Swift-Bridging-Header.h + // Runtime search paths for app extensions to find frameworks in parent app LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @executable_path/../../Frameworks diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift index e09066161ca..5c6b630a19f 100644 --- a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift @@ -16,6 +16,12 @@ class ShareViewController: SLComposeServiceViewController { } private func setupSentry() { + // Prevent double initialization - SentrySDK.start() can be called multiple times + // but we want to avoid unnecessary re-initialization + guard !SentrySDK.isEnabled else { + return + } + // For this extension we need a specific configuration set, therefore we do not use the shared sample initializer SentrySDK.start { options in options.dsn = SentrySDKWrapper.defaultDSN diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj index aec7a03abdc..44a193cfe9d 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 63; + objectVersion = 77; objects = { /* Begin PBXBuildFile section */ @@ -35,20 +35,22 @@ 4A6288CAA3E47ADBC98E03A2 /* SentrySwiftLog.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4F6AA26561C2DEBAC1F428BD /* InfoForBreadcrumbController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */; }; 51183F4C696186DB42BD8484 /* SentryBenchmarking.mm in Sources */ = {isa = PBXBuildFile; fileRef = 77E8D04AD50CA1647ACBF553 /* SentryBenchmarking.mm */; }; - 51A85B15CAD3953FE3556C04 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 5133770424120A9B4C96C9A1 /* ActionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA82C91822C2EBD3D6D742A1 /* ActionViewController.swift */; }; + 51A85B15CAD3953FE3556C04 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; 51DE8527F5BE077F8DA9418F /* NSObject+SentryAppSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */; }; 521D00C7E7EF3B0AD4633167 /* SentrySampleUITestShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; }; - 53581AA5D1FD2F734A163752 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 53581AA5D1FD2F734A163752 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; 55DB9EEC221DF519072BE0B3 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 55E86406E580D92EA33438FC /* ProfilingNetworkScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */; }; 55F607BA16B254E78EB63132 /* MetricKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */; }; 58DF542F78921F4880ECAE94 /* SentrySwiftLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */; }; 5BB2BE14330C47B96FFD11FC /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; 5CF2C5A14A89516BD01B1028 /* TopViewControllerInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A1935AC3E350D80A199728D /* TopViewControllerInspector.swift */; }; - 5D2281140DE120DF5FAFCA46 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 5D2281140DE120DF5FAFCA46 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; 63077CC6E384663E06B7A1D7 /* SentryVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */; }; 658BD4C7B5E66786A5D70C2F /* iOS-Swift-ShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 67BEBED634D92F2B1591DA05 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; + 662B05F82BA41661ABA0E0CA /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 67BEBED634D92F2B1591DA05 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; 67D83B8F6B8B36C3153AD166 /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; 6AD61205E0EF9D834B7049C5 /* UIEventBreadcrumbsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */; }; 6F370012A1C84FDF6A82BD8D /* TransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BBBC9883318840251690D58 /* TransactionsViewController.swift */; }; @@ -56,7 +58,6 @@ 78F6F743686DBEACC4D34679 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; 794FF69C305368C6D432AAF0 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7B6DC5B01ABEB99144644E87 /* DiskWriteException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */; }; - 7BD39BA8DA56883832D7171C /* ActionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC535DA5D6DB09218CA168DA /* ActionViewController.swift */; }; 7D9AEC24B1E6A3E9EDE7E463 /* BenchmarkingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F561960FD13128F6785A21A7 /* BenchmarkingViewController.swift */; }; 7F70072A4CC02F1A7F5AD352 /* ErrorsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */; }; 811D0E72F3EC4835AC2DEAEE /* Tongariro.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 2694665D127C4B4B62B2DCC3 /* Tongariro.jpg */; }; @@ -64,36 +65,35 @@ 846570ED1077949BE6404BA5 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; 85EAE34F771673A771ED6860 /* NibViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */; }; 864CDDF55D447714ECD8113B /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 8A265A5A425593298A5661C7 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 398D106D13E48BC9F9C5BED2 /* ShareViewController.swift */; }; 8AD86CC5980E52382B4CB190 /* ViewLifecycleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94FAA087A715E1C000463EB /* ViewLifecycleUITests.swift */; }; - 8CF15B29406C6DE9B7E23453 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1629F8166CE76494F9B01D8F /* IntentHandler.swift */; }; 8EFBF7F312296D36BD7A65D8 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; 907F36A87BA875ADDD9EE77D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 37FB718FAF4DE8DD3FA44C14 /* LaunchScreen.storyboard */; }; 945ADF884F4CE322E96F7609 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A069618DFB86210BA92797 /* SceneDelegate.swift */; }; 9992CC67FEEFCD5C449647F5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B77039FF4008016404245CD /* AppDelegate.swift */; }; + 9ACA3389570D88D40C770C04 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E0C905647A1A0897FC57FFC /* MainInterface.storyboard */; }; 9F633516A435CF3A80629711 /* iOS-Swift-ActionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 9FA845DB84D1CD64F65F09C3 /* SentrySampleUITestShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; A134CD1F5B1EF57310E0D28A /* ProfilingCPUWork.swift in Sources */ = {isa = PBXBuildFile; fileRef = F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */; }; A33B7315864168745B888AAA /* UserFeedbackUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */; }; A36F7529967DF4650B2A30F4 /* ExtraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F167D91DC443457E9459B25A /* ExtraViewController.swift */; }; A7BABE45A57F6086EA714391 /* TopViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */; }; - B353F36AAE7165D1185D6D59 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3BD87A2B62E1BC3E57D6159 /* MainInterface.storyboard */; }; + AB507A8400D367E151715AD4 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4439126C6455FFD1DC5F14D9 /* IntentHandler.swift */; }; B53B2B2FAFE59E3F16442710 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 985DCC5D72E703B5070AE77A /* Assets.xcassets */; }; B88DCA642A478D48BE5F33FC /* SentryPDFViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */; }; BB881433D04369350EAF28EE /* UITestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6757896C15DC45A3721E0E4 /* UITestHelpers.swift */; }; - BEB39C50554F955B9C0ED4CC /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FD176B4441601AB5FEAF11 /* ShareViewController.swift */; }; C8685E311CFD471F959409E0 /* TableViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = FEEA62485E8E4A953DCA6466 /* TableViewController.xib */; }; CB071CF3620376DE56A74E5A /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091E029BF7040895247FB10B /* TableViewController.swift */; }; CC7669CB4839913CA07942FC /* BaseUITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */; }; - D48891782EBDFA5800054D46 /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; D8D43AE7F1763F285823DE04 /* SentrySampleUITestShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; DEC8E471E76504FF0FC3A813 /* Sample.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = B8D34DA3392FA270D53C12EF /* Sample.mp4 */; }; - DFC067DA37586FB5C3845AE6 /* Sentry.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; }; - E19537E24AC87FA8FB614976 /* Sentry.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + DFC067DA37586FB5C3845AE6 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; + E19537E24AC87FA8FB614976 /* Sentry-iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; E9AC8007BD56C0BEC1CDEA8D /* LaunchUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */; }; E9EA0697CF31EE5674B3B172 /* LoremIpsumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */; }; EC069813F2C25A4E597ACB4C /* SentrySDKPerformanceBenchmarkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 734953962E0C95C1D03532C6 /* SentrySDKPerformanceBenchmarkTests.m */; }; EC3DCFEA537525E12B4BFAB3 /* CppWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 78091604E5DA43126BC9F195 /* CppWrapper.mm */; }; - F2EB8945FE8410AC4013F1D3 /* Sentry.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F2EB8945FE8410AC4013F1D3 /* Sentry-iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; F43644B26FE87149146D3A94 /* SentrySampleUITestShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; }; F47EE1EDBE1652A95F4F38D0 /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; F8CBB74BDDC9BDF32A0B53C2 /* TraceTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F46879D621F90A7655C615F /* TraceTestViewController.swift */; }; @@ -157,6 +157,13 @@ remoteGlobalIDString = 431A3FE213391C00C3CE66D2; remoteInfo = SentrySampleShared; }; + 72DFB8179857ED959AC59C6A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5DB3F50F9D50D2F2419F11F3; + remoteInfo = "iOS-Swift-IntentExtension"; + }; 75965192E3621CC601EFF76B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; @@ -227,13 +234,6 @@ remoteGlobalIDString = 6B366C32DB86ECAEC77565BA; remoteInfo = SentrySampleUITestShared; }; - D48891792EBDFA5800054D46 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5DB3F50F9D50D2F2419F11F3; - remoteInfo = "iOS-Swift-IntentExtension"; - }; DA6BA1590AD71A7A6A923C4B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; @@ -264,7 +264,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - E19537E24AC87FA8FB614976 /* Sentry.framework in Embed Frameworks */, + E19537E24AC87FA8FB614976 /* Sentry-iOS.framework in Embed Frameworks */, 864CDDF55D447714ECD8113B /* SentrySampleShared.framework in Embed Frameworks */, 4A6288CAA3E47ADBC98E03A2 /* SentrySwiftLog.framework in Embed Frameworks */, ); @@ -300,9 +300,9 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - D48891782EBDFA5800054D46 /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */, 658BD4C7B5E66786A5D70C2F /* iOS-Swift-ShareExtension.appex in Embed Foundation Extensions */, 9F633516A435CF3A80629711 /* iOS-Swift-ActionExtension.appex in Embed Foundation Extensions */, + 662B05F82BA41661ABA0E0CA /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -313,7 +313,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - F2EB8945FE8410AC4013F1D3 /* Sentry.framework in Embed Frameworks */, + F2EB8945FE8410AC4013F1D3 /* Sentry-iOS.framework in Embed Frameworks */, 55DB9EEC221DF519072BE0B3 /* SentrySampleShared.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -341,10 +341,9 @@ 111D68433FFABCFE3119006C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchUITests.swift; sourceTree = ""; }; 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftClip.xcconfig"; sourceTree = ""; }; - 1629F8166CE76494F9B01D8F /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; 191E19F619E741E73E835E47 /* BuildOptions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = BuildOptions.xcconfig; sourceTree = ""; }; - 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "iOS-Swift-ShareExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "iOS-Swift-IntentExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-Swift-ShareExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-Swift-IntentExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 1E3F3B596C5D113BE83B2428 /* ClangCppLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangCppLanguage.xcconfig; sourceTree = ""; }; 2026796F32A57B6F4F468797 /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; }; 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-IntentExtension.xcconfig"; sourceTree = ""; }; @@ -355,30 +354,34 @@ 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryPDFViewController.swift; sourceTree = ""; }; 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiskWriteException.swift; sourceTree = ""; }; 2CE4A1607B6636E7F9D1049F /* PermissionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionsViewController.swift; sourceTree = ""; }; + 2EFD3AD5D144F9C019871849 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SampleAssets.xcassets; sourceTree = ""; }; 3134BF0471477E94C9886A4F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 328DE61B3CAEB67D00E916F0 /* iOS_SwiftClip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOS_SwiftClip.entitlements; sourceTree = ""; }; 32ECFAF2EE13BB90EAC1BEF6 /* SessionReplayUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionReplayUITests.swift; sourceTree = ""; }; 34E9AEE9AA451F75F7DB63AA /* CoreDataViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataViewController.swift; sourceTree = ""; }; 3589A0CF9BB424480A9B7323 /* Sample.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Sample.xcconfig; sourceTree = ""; }; + 398D106D13E48BC9F9C5BED2 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; 3A5B13F49927E3AD638263E7 /* UIEventBreadcrumbTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEventBreadcrumbTests.swift; sourceTree = ""; }; - 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 3CCD9ACD51F4FD1F18406815 /* ClangObjCLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangObjCLanguage.xcconfig; sourceTree = ""; }; 3EDA1112F32AFA3C38DCB341 /* _Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = _Common.xcconfig; sourceTree = ""; }; 3F640261ED8F2221C4FDBD1F /* iOS-Swift.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "iOS-Swift.entitlements"; sourceTree = ""; }; 438A5FECE8C2A2E5F63EE2F0 /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; + 4439126C6455FFD1DC5F14D9 /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; 4516D984EA4343F20D13AE5E /* ClangLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangLanguage.xcconfig; sourceTree = ""; }; 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-ActionExtension.xcconfig"; sourceTree = ""; }; 4B77039FF4008016404245CD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 4D6A40C9633EAECD3B8E0C67 /* iOS-Swift_Base.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "iOS-Swift_Base.xctestplan"; sourceTree = ""; }; + 4D6A40C9633EAECD3B8E0C67 /* iOS-Swift_Base.xctestplan */ = {isa = PBXFileReference; path = "iOS-Swift_Base.xctestplan"; sourceTree = ""; }; 5305DB7675BCC04CEE052B5C /* ProfilingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingViewController.swift; sourceTree = ""; }; 551550B87A4D1AE259A27A3F /* ProfilingUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingUITests.swift; sourceTree = ""; }; 58879E907B39D86CB12A4F4C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 594C6C143D646B48D67B610C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift.xcconfig"; sourceTree = ""; }; - 5F0230BC4622C791FBEA4976 /* iOS-Benchmarking_Base.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "iOS-Benchmarking_Base.xctestplan"; sourceTree = ""; }; + 5F0230BC4622C791FBEA4976 /* iOS-Benchmarking_Base.xctestplan */ = {isa = PBXFileReference; path = "iOS-Benchmarking_Base.xctestplan"; sourceTree = ""; }; 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NibViewController.xib; sourceTree = ""; }; 63A069618DFB86210BA92797 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iOS-Swift-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "iOS-Swift-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Benchmarking.xcconfig"; sourceTree = ""; }; 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryVideoViewController.swift; sourceTree = ""; }; 6960C6B2C93BD6A655026C18 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -389,27 +392,26 @@ 7BBBC9883318840251690D58 /* TransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionsViewController.swift; sourceTree = ""; }; 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseUITest.swift; sourceTree = ""; }; 7F46879D621F90A7655C615F /* TraceTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TraceTestViewController.swift; sourceTree = ""; }; + 80C56678E58B19DE7E5AC505 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorsViewController.swift; sourceTree = ""; }; 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewControllerTests.swift; sourceTree = ""; }; + 8212E22D95B5E357BD0E5253 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 82187F5842E4AF261FF7A79B /* ClangWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarnings.xcconfig; sourceTree = ""; }; 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingNetworkScanner.swift; sourceTree = ""; }; - 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS-SwiftClip.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-SwiftClip.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 8676CFD056BB0C02B05026F8 /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; }; 884173CDEBFCB5BCA30755D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 884F6DC27D1D6479DE82A19C /* SearchPaths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SearchPaths.xcconfig; sourceTree = ""; }; - 888CD837181BB01EDC8C69A1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 89700FC1B6E2F322734C4681 /* Linking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Linking.xcconfig; sourceTree = ""; }; 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-ShareExtension.xcconfig"; sourceTree = ""; }; 8B4DF0C116D93A28F939AAEF /* ClangModules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangModules.xcconfig; sourceTree = ""; }; - 8FE6B9D12582A2EEA684917F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "iOS-Swift-ActionExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-Swift-ActionExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 919455E53FC420C8ED9F8790 /* ClangWarningsObjC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsObjC.xcconfig; sourceTree = ""; }; 972DD7CBB48B45181873FE3E /* ClangPreprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangPreprocessing.xcconfig; sourceTree = ""; }; 9736CB8B27AB4F265767C4AF /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; 985DCC5D72E703B5070AE77A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; A1F9EDDC06DDABBA4DB04A3D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; A4568D77EB0E9357D64D0B1F /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; - A4FCD86C1D07412A120BF869 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; A6CFF1E7A99769E83BA0E317 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserFeedbackUITests.swift; sourceTree = ""; }; A8768C166771E0D49A7057B6 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; @@ -417,7 +419,7 @@ A92E0DC9A242AE1C8D55FE4E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+SentryAppSetup.m"; sourceTree = ""; }; B363B5FE6C5D8037994CF501 /* ProjectProposal.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = ProjectProposal.pdf; sourceTree = ""; }; - B8D34DA3392FA270D53C12EF /* Sample.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = Sample.mp4; sourceTree = ""; }; + B8D34DA3392FA270D53C12EF /* Sample.mp4 */ = {isa = PBXFileReference; path = Sample.mp4; sourceTree = ""; }; BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricKitManager.swift; sourceTree = ""; }; BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-UITests.xcconfig"; sourceTree = ""; }; C06597CE87CAE662AD88887C /* ClangAnalyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangAnalyzer.xcconfig; sourceTree = ""; }; @@ -428,23 +430,20 @@ D265E2EDD00C60F7F5B6B888 /* TriggerAppHang.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TriggerAppHang.swift; sourceTree = ""; }; D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SentrySampleShared; path = ../SentrySampleShared/SentrySampleShared.xcodeproj; sourceTree = ""; }; D46A7072778733E46E720E52 /* CppCode.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = CppCode.hpp; sourceTree = ""; }; - D48891362EBDF97E00054D46 /* Intents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Intents.framework; path = System/Library/Frameworks/Intents.framework; sourceTree = SDKROOT; }; - D48891412EBDF97F00054D46 /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = System/Library/Frameworks/IntentsUI.framework; sourceTree = SDKROOT; }; D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEventBreadcrumbsController.swift; sourceTree = ""; }; D5AC0B967B60BC739056BD34 /* NibViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NibViewController.swift; sourceTree = ""; }; D765E5E52128E3F6B9D0146C /* PageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageViewController.swift; sourceTree = ""; }; D80A83A9FD1BECA60D8DAAF8 /* SentryExposure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryExposure.h; sourceTree = ""; }; D81C678605E1A38F19B5A024 /* CodeGeneration.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeGeneration.xcconfig; sourceTree = ""; }; D82593E08C9EEE14439FEB1D /* ViewLifecycleTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewLifecycleTestViewController.swift; sourceTree = ""; }; - D9FD176B4441601AB5FEAF11 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; + DA82C91822C2EBD3D6D742A1 /* ActionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionViewController.swift; sourceTree = ""; }; E312023EF6ACB33ED0305DFC /* SentryBenchmarking.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryBenchmarking.h; sourceTree = ""; }; E405B26D12528D3D4D0F5ECD /* Person.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Person.xcdatamodel; sourceTree = ""; }; E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoForBreadcrumbController.swift; sourceTree = ""; }; - E5D662D2A5DE3813AAE19A12 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EB15DB1B86AFA85242911AF5 /* SplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitViewController.swift; sourceTree = ""; }; EB925B776381501478AB32A1 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoremIpsumViewController.swift; sourceTree = ""; }; - EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iOS-Benchmarking.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "iOS-Benchmarking.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; EFD16BCAD9B26BEB540196C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; F167D91DC443457E9459B25A /* ExtraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraViewController.swift; sourceTree = ""; }; F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingCPUWork.swift; sourceTree = ""; }; @@ -453,7 +452,6 @@ F938A0625B5B6F20402224EE /* AssetCatalog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AssetCatalog.xcconfig; sourceTree = ""; }; F94A74A23ED1C3E0778D26AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; FC08BFF2EC8DF341033195E4 /* ReplaceContentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplaceContentViewController.swift; sourceTree = ""; }; - FC535DA5D6DB09218CA168DA /* ActionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionViewController.swift; sourceTree = ""; }; FEEA62485E8E4A953DCA6466 /* TableViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TableViewController.xib; sourceTree = ""; }; /* End PBXFileReference section */ @@ -462,7 +460,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 53581AA5D1FD2F734A163752 /* Sentry.framework in Frameworks */, + 53581AA5D1FD2F734A163752 /* Sentry-iOS.framework in Frameworks */, 846570ED1077949BE6404BA5 /* SentrySampleShared.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -471,7 +469,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5D2281140DE120DF5FAFCA46 /* Sentry.framework in Frameworks */, + 5D2281140DE120DF5FAFCA46 /* Sentry-iOS.framework in Frameworks */, 2E37B5254D7597BD8B6169B9 /* SentrySampleShared.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -489,7 +487,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 67BEBED634D92F2B1591DA05 /* Sentry.framework in Frameworks */, + 67BEBED634D92F2B1591DA05 /* Sentry-iOS.framework in Frameworks */, 2FCE6F02F09EC77C3AD49997 /* SentrySampleShared.framework in Frameworks */, 58DF542F78921F4880ECAE94 /* SentrySwiftLog.framework in Frameworks */, ); @@ -507,7 +505,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DFC067DA37586FB5C3845AE6 /* Sentry.framework in Frameworks */, + DFC067DA37586FB5C3845AE6 /* Sentry-iOS.framework in Frameworks */, 8EFBF7F312296D36BD7A65D8 /* SentrySampleShared.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -516,7 +514,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 51A85B15CAD3953FE3556C04 /* Sentry.framework in Frameworks */, + 51A85B15CAD3953FE3556C04 /* Sentry-iOS.framework in Frameworks */, 1336182701E13D2606D4FFEB /* SentrySampleShared.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -527,8 +525,8 @@ 06619803D06AFF4B14100FAB /* Products */ = { isa = PBXGroup; children = ( - 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */, AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */, + 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */, ); name = Products; sourceTree = ""; @@ -536,12 +534,20 @@ 0D24C59349E6F2D92B327248 /* Products */ = { isa = PBXGroup; children = ( - 0F6BBB6AA617495A3083BF7A /* Sentry.framework */, + 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */, 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */, ); name = Products; sourceTree = ""; }; + 14D1E89FCCC6AE55333D8A0B /* Sources */ = { + isa = PBXGroup; + children = ( + 4439126C6455FFD1DC5F14D9 /* IntentHandler.swift */, + ); + path = Sources; + sourceTree = ""; + }; 14E8B9BA6F996DBFE2FEB910 /* Tools */ = { isa = PBXGroup; children = ( @@ -621,8 +627,8 @@ 530A144D78039C529394F66A /* iOS-Swift-ShareExtension */ = { isa = PBXGroup; children = ( - D48890E42EBDF38700054D46 /* Resources */, - D48890E32EBDF37B00054D46 /* Sources */, + A77545ADBE9D1E26F8D1ED05 /* Resources */, + AD9C8FB43B9FB54F857B8C88 /* Sources */, ); path = "iOS-Swift-ShareExtension"; sourceTree = ""; @@ -680,6 +686,14 @@ name = Projects; sourceTree = ""; }; + 6803A2E39B1CD38B6F6FA200 /* Resources */ = { + isa = PBXGroup; + children = ( + 2EFD3AD5D144F9C019871849 /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; 6ECEBFFC5098DEDAE506F622 /* iOS-Benchmarking */ = { isa = PBXGroup; children = ( @@ -714,86 +728,44 @@ EC3C812AAD487544954AED5D /* iOS-SwiftClip */, 87339914655042F1BBE52163 /* Plans */, CC80618C88F712CCC9C11AC2 /* Shared */, - D48891352EBDF97E00054D46 /* Frameworks */, 53941E696F63F4E24A3A6B38 /* Products */, 5D37403FC0B005B14A3BAE3B /* Projects */, ); sourceTree = ""; }; - B1F08350D217FF6B7A06EE44 /* iOS-Swift-IntentExtension */ = { - isa = PBXGroup; - children = ( - D48890E52EBDF38E00054D46 /* Resources */, - D48890E22EBDF37700054D46 /* Sources */, - ); - path = "iOS-Swift-IntentExtension"; - sourceTree = ""; - }; - CC80618C88F712CCC9C11AC2 /* Shared */ = { - isa = PBXGroup; - children = ( - 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */, - ); - name = Shared; - path = ../Shared; - sourceTree = ""; - }; - D48890C92EBDF37100054D46 /* Sources */ = { - isa = PBXGroup; - children = ( - FC535DA5D6DB09218CA168DA /* ActionViewController.swift */, - ); - path = Sources; - sourceTree = ""; - }; - D48890E22EBDF37700054D46 /* Sources */ = { + A77545ADBE9D1E26F8D1ED05 /* Resources */ = { isa = PBXGroup; children = ( - 1629F8166CE76494F9B01D8F /* IntentHandler.swift */, - ); - path = Sources; - sourceTree = ""; - }; - D48890E32EBDF37B00054D46 /* Sources */ = { - isa = PBXGroup; - children = ( - D9FD176B4441601AB5FEAF11 /* ShareViewController.swift */, - ); - path = Sources; - sourceTree = ""; - }; - D48890E42EBDF38700054D46 /* Resources */ = { - isa = PBXGroup; - children = ( - 8FE6B9D12582A2EEA684917F /* Info.plist */, - E3BD87A2B62E1BC3E57D6159 /* MainInterface.storyboard */, + 8212E22D95B5E357BD0E5253 /* Info.plist */, + 6E0C905647A1A0897FC57FFC /* MainInterface.storyboard */, ); path = Resources; sourceTree = ""; }; - D48890E52EBDF38E00054D46 /* Resources */ = { + AD9C8FB43B9FB54F857B8C88 /* Sources */ = { isa = PBXGroup; children = ( - E5D662D2A5DE3813AAE19A12 /* Info.plist */, + 398D106D13E48BC9F9C5BED2 /* ShareViewController.swift */, ); - path = Resources; + path = Sources; sourceTree = ""; }; - D48890E62EBDF39300054D46 /* Resources */ = { + B1F08350D217FF6B7A06EE44 /* iOS-Swift-IntentExtension */ = { isa = PBXGroup; children = ( - 888CD837181BB01EDC8C69A1 /* Info.plist */, + 6803A2E39B1CD38B6F6FA200 /* Resources */, + 14D1E89FCCC6AE55333D8A0B /* Sources */, ); - path = Resources; + path = "iOS-Swift-IntentExtension"; sourceTree = ""; }; - D48891352EBDF97E00054D46 /* Frameworks */ = { + CC80618C88F712CCC9C11AC2 /* Shared */ = { isa = PBXGroup; children = ( - D48891362EBDF97E00054D46 /* Intents.framework */, - D48891412EBDF97F00054D46 /* IntentsUI.framework */, + 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */, ); - name = Frameworks; + name = Shared; + path = ../Shared; sourceTree = ""; }; DC3B49050E8865F0B7DCAD5D /* Profiling */ = { @@ -812,8 +784,8 @@ E1C30EC84D3648E5D2AA6090 /* iOS-Swift-ActionExtension */ = { isa = PBXGroup; children = ( - D48890E62EBDF39300054D46 /* Resources */, - D48890C92EBDF37100054D46 /* Sources */, + F00645BFC4F4EE8486F76C8B /* Resources */, + F8E13979B1781571A2E81BF3 /* Sources */, ); path = "iOS-Swift-ActionExtension"; sourceTree = ""; @@ -833,6 +805,22 @@ path = "iOS-SwiftClip"; sourceTree = ""; }; + F00645BFC4F4EE8486F76C8B /* Resources */ = { + isa = PBXGroup; + children = ( + 80C56678E58B19DE7E5AC505 /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; + F8E13979B1781571A2E81BF3 /* Sources */ = { + isa = PBXGroup; + children = ( + DA82C91822C2EBD3D6D742A1 /* ActionViewController.swift */, + ); + path = Sources; + sourceTree = ""; + }; F9540EC35C5925E94F45B382 /* ViewControllers */ = { isa = PBXGroup; children = ( @@ -943,8 +931,8 @@ EC1A2A52557D0A7B4A3E5719 /* PBXTargetDependency */, 0F77B63056CDE5F11DB7B308 /* PBXTargetDependency */, 8DE49BBCA6E0FA936BDFF05F /* PBXTargetDependency */, + 093A53C82423ED7FCCD9F687 /* PBXTargetDependency */, 79FB95E9457D617F3FAA2559 /* PBXTargetDependency */, - D488917A2EBDFA5800054D46 /* PBXTargetDependency */, ); name = "iOS-Swift"; packageProductDependencies = ( @@ -1026,7 +1014,6 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastSwiftUpdateCheck = 2610; LastUpgradeCheck = 1430; TargetAttributes = { 0217293F044A3AEED8E37A25 = { @@ -1069,6 +1056,7 @@ ); mainGroup = 9D75FD88C0E38876C1D4BBC7; minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; projectDirPath = ""; projectReferences = ( { @@ -1101,10 +1089,10 @@ remoteRef = 57429C308B31F557BC7F076D /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 0F6BBB6AA617495A3083BF7A /* Sentry.framework */ = { + 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; - path = Sentry.framework; + path = "Sentry-iOS.framework"; remoteRef = 28D99B7E8D5D8A3FEF039435 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1148,7 +1136,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B353F36AAE7165D1185D6D59 /* MainInterface.storyboard in Resources */, + 9ACA3389570D88D40C770C04 /* MainInterface.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1294,7 +1282,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7BD39BA8DA56883832D7171C /* ActionViewController.swift in Sources */, + 5133770424120A9B4C96C9A1 /* ActionViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1337,7 +1325,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BEB39C50554F955B9C0ED4CC /* ShareViewController.swift in Sources */, + 8A265A5A425593298A5661C7 /* ShareViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1345,13 +1333,18 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8CF15B29406C6DE9B7E23453 /* IntentHandler.swift in Sources */, + AB507A8400D367E151715AD4 /* IntentHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 093A53C82423ED7FCCD9F687 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */; + targetProxy = 72DFB8179857ED959AC59C6A /* PBXContainerItemProxy */; + }; 0F77B63056CDE5F11DB7B308 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = C97FF7E8B34B54F1E1DA596E /* iOS-Swift-ShareExtension */; @@ -1422,11 +1415,6 @@ name = SentrySampleUITestShared; targetProxy = 9AA1C80EDE26555EB9D13AA5 /* PBXContainerItemProxy */; }; - D488917A2EBDFA5800054D46 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */; - targetProxy = D48891792EBDFA5800054D46 /* PBXContainerItemProxy */; - }; EC1A2A52557D0A7B4A3E5719 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SentrySampleShared; @@ -1461,20 +1449,20 @@ name = LaunchScreen.storyboard; sourceTree = ""; }; - 8813728C87CB00CBB907AF8D /* Main.storyboard */ = { + 6E0C905647A1A0897FC57FFC /* MainInterface.storyboard */ = { isa = PBXVariantGroup; children = ( - 6960C6B2C93BD6A655026C18 /* Base */, + 594C6C143D646B48D67B610C /* Base */, ); - name = Main.storyboard; + name = MainInterface.storyboard; sourceTree = ""; }; - E3BD87A2B62E1BC3E57D6159 /* MainInterface.storyboard */ = { + 8813728C87CB00CBB907AF8D /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - A4FCD86C1D07412A120BF869 /* Base */, + 6960C6B2C93BD6A655026C18 /* Base */, ); - name = MainInterface.storyboard; + name = Main.storyboard; sourceTree = ""; }; E702320CD964146FB4A53460 /* Main.storyboard */ = { @@ -1627,7 +1615,6 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = Release; }; @@ -1817,7 +1804,6 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = Test; }; @@ -1859,7 +1845,6 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = TestCI; }; @@ -1877,7 +1862,6 @@ baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; buildSettings = { INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - SWIFT_OBJC_BRIDGING_HEADER = "iOS-Swift/Tools/iOS-Swift-Bridging-Header.h"; }; name = Debug; }; diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme index 42780dab3d2..c2068aaad1b 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme @@ -1,11 +1,11 @@ + version = "1.7"> + buildImplicitDependencies = "YES" + runPostActionsOnFailure = "NO"> @@ -29,9 +29,9 @@ buildForAnalyzing = "YES"> @@ -41,13 +41,14 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES" + onlyGenerateCoverageForSpecifiedTargets = "NO"> @@ -56,25 +57,26 @@ - + allowLocationSimulation = "YES"> + - + + + diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme index 2f6679d439b..f7be079a2f7 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme @@ -1,11 +1,11 @@ + version = "1.7"> + buildImplicitDependencies = "YES" + runPostActionsOnFailure = "NO"> @@ -29,9 +29,9 @@ buildForAnalyzing = "YES"> @@ -41,13 +41,14 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES" + onlyGenerateCoverageForSpecifiedTargets = "NO"> @@ -56,25 +57,26 @@ - + allowLocationSimulation = "YES"> + - + + + diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme index 110a6f5f45a..6fad3d597da 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme @@ -1,11 +1,11 @@ + version = "1.7"> + buildImplicitDependencies = "YES" + runPostActionsOnFailure = "NO"> @@ -29,9 +29,9 @@ buildForAnalyzing = "YES"> @@ -41,13 +41,14 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - shouldUseLaunchSchemeArgsEnv = "YES"> + shouldUseLaunchSchemeArgsEnv = "YES" + onlyGenerateCoverageForSpecifiedTargets = "NO"> @@ -56,30 +57,26 @@ - - - + allowLocationSimulation = "YES"> + - + + + diff --git a/Samples/iOS-Swift/iOS-Swift.yml b/Samples/iOS-Swift/iOS-Swift.yml index 09c95e00111..3d22068e70b 100644 --- a/Samples/iOS-Swift/iOS-Swift.yml +++ b/Samples/iOS-Swift/iOS-Swift.yml @@ -161,14 +161,20 @@ schemes: build: targets: iOS-Swift: all - iOS-Swift-IntentExtension: test + iOS-Swift-IntentExtension: all + run: + config: Debug iOS-Swift-ActionExtension: build: targets: iOS-Swift: all - iOS-Swift-ActionExtension: test + iOS-Swift-ActionExtension: all + run: + config: Debug iOS-Swift-ShareExtension: build: targets: iOS-Swift: all - iOS-Swift-ShareExtension: test + iOS-Swift-ShareExtension: all + run: + config: Debug From 6613d3b3be587b400c0ab8d19c8b6122225a2443 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 13:46:51 +0100 Subject: [PATCH 10/19] removed local changes --- .gitignore | 2 +- .../iOS-Swift.xcodeproj/project.pbxproj | 2059 ----------------- .../contents.xcworkspacedata | 7 - .../xcschemes/iOS-Benchmarking.xcscheme | 109 - .../iOS-Swift-ActionExtension.xcscheme | 105 - .../iOS-Swift-IntentExtension.xcscheme | 105 - .../iOS-Swift-ShareExtension.xcscheme | 105 - .../xcshareddata/xcschemes/iOS-Swift.xcscheme | 429 ---- 8 files changed, 1 insertion(+), 2920 deletions(-) delete mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj delete mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme delete mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme delete mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme delete mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme delete mode 100644 Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme diff --git a/.gitignore b/.gitignore index e63093178ea..9e3ff1c66ae 100644 --- a/.gitignore +++ b/.gitignore @@ -84,7 +84,7 @@ Cartfile.resolved Samples/SessionReplay-CameraTest/SessionReplay-CameraTest.xcodeproj Samples/iOS-ObjectiveC/iOS-ObjectiveC.xcodeproj -#Samples/iOS-Swift/iOS-Swift.xcodeproj +Samples/iOS-Swift/iOS-Swift.xcodeproj Samples/iOS-Swift6/iOS-Swift6.xcodeproj Samples/iOS-SwiftUI/iOS-SwiftUI.xcodeproj Samples/iOS15-SwiftUI/iOS15-SwiftUI.xcodeproj diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj deleted file mode 100644 index 44a193cfe9d..00000000000 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2059 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 022500679EC17AFCA83097C9 /* EnergyConsumer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75600452DD4B93E1E0355F08 /* EnergyConsumer.swift */; }; - 10B1F4E91D817FB352EBE1DC /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB925B776381501478AB32A1 /* WebViewController.swift */; }; - 131F936B2E6D6ED14B6A5301 /* SRRedactSampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A507F02EE543D8EAE51253 /* SRRedactSampleViewController.swift */; }; - 1336182701E13D2606D4FFEB /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; - 1908FB96F24AF84C4BF3459C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E702320CD964146FB4A53460 /* Main.storyboard */; }; - 1A2D51F9C195CAE4881B37CB /* PermissionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CE4A1607B6636E7F9D1049F /* PermissionsViewController.swift */; }; - 1C06B72E1AC6FFC9EE5B2EA6 /* XCTest+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CB9F8DFDCCF7FBEF4819B9 /* XCTest+Delay.swift */; }; - 1DEFDFE0596A8656263440AA /* ProjectProposal.pdf in Resources */ = {isa = PBXBuildFile; fileRef = B363B5FE6C5D8037994CF501 /* ProjectProposal.pdf */; }; - 1ECA47ADFB44EDFB74AC08F2 /* SplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB15DB1B86AFA85242911AF5 /* SplitViewController.swift */; }; - 1FAB3D63BF53BDCE25C6A56F /* SentryData.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = FA6FCAF423D635FDA9DBBFC1 /* SentryData.xcdatamodeld */; }; - 2082C929EDEBA2B486D0C5D0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3134BF0471477E94C9886A4F /* AppDelegate.swift */; }; - 21558F7BAEDF9DD8CA8EEF7A /* TriggerAppHang.swift in Sources */ = {isa = PBXBuildFile; fileRef = D265E2EDD00C60F7F5B6B888 /* TriggerAppHang.swift */; }; - 25686484B5CCB63FBB658069 /* UIEventBreadcrumbTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A5B13F49927E3AD638263E7 /* UIEventBreadcrumbTests.swift */; }; - 2682F19C24704715F14FE9B8 /* ReplaceContentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC08BFF2EC8DF341033195E4 /* ReplaceContentViewController.swift */; }; - 2D1D4103B2B025276E4956B5 /* iOS-SwiftClip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 2E37B5254D7597BD8B6169B9 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; - 2F40754B43CBBBCA710076A9 /* SessionReplayUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32ECFAF2EE13BB90EAC1BEF6 /* SessionReplayUITests.swift */; }; - 2FCE6F02F09EC77C3AD49997 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; - 321C268EEECA1E6EC1685AB7 /* ProfilingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5305DB7675BCC04CEE052B5C /* ProfilingViewController.swift */; }; - 3645DEA0D5FA2CD732CD0A7F /* CoreDataViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34E9AEE9AA451F75F7DB63AA /* CoreDataViewController.swift */; }; - 3719A55526158ED00F37538F /* PageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D765E5E52128E3F6B9D0146C /* PageViewController.swift */; }; - 3B9B8103032661B496038958 /* CppCode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3E159B651EB7692A2C7E74B /* CppCode.cpp */; }; - 3C1454FE7043D31D22E2454F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 62B078E53E402797EE060833 /* LaunchScreen.storyboard */; }; - 3EA6818452916656DD894623 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 111D68433FFABCFE3119006C /* ViewController.swift */; }; - 46F7775D6A86784793887076 /* ViewLifecycleTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D82593E08C9EEE14439FEB1D /* ViewLifecycleTestViewController.swift */; }; - 4A6288CAA3E47ADBC98E03A2 /* SentrySwiftLog.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 4F6AA26561C2DEBAC1F428BD /* InfoForBreadcrumbController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */; }; - 51183F4C696186DB42BD8484 /* SentryBenchmarking.mm in Sources */ = {isa = PBXBuildFile; fileRef = 77E8D04AD50CA1647ACBF553 /* SentryBenchmarking.mm */; }; - 5133770424120A9B4C96C9A1 /* ActionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA82C91822C2EBD3D6D742A1 /* ActionViewController.swift */; }; - 51A85B15CAD3953FE3556C04 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; - 51DE8527F5BE077F8DA9418F /* NSObject+SentryAppSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */; }; - 521D00C7E7EF3B0AD4633167 /* SentrySampleUITestShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; }; - 53581AA5D1FD2F734A163752 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; - 55DB9EEC221DF519072BE0B3 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 55E86406E580D92EA33438FC /* ProfilingNetworkScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */; }; - 55F607BA16B254E78EB63132 /* MetricKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */; }; - 58DF542F78921F4880ECAE94 /* SentrySwiftLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */; }; - 5BB2BE14330C47B96FFD11FC /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; - 5CF2C5A14A89516BD01B1028 /* TopViewControllerInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A1935AC3E350D80A199728D /* TopViewControllerInspector.swift */; }; - 5D2281140DE120DF5FAFCA46 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; - 63077CC6E384663E06B7A1D7 /* SentryVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */; }; - 658BD4C7B5E66786A5D70C2F /* iOS-Swift-ShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 662B05F82BA41661ABA0E0CA /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 67BEBED634D92F2B1591DA05 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; - 67D83B8F6B8B36C3153AD166 /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; - 6AD61205E0EF9D834B7049C5 /* UIEventBreadcrumbsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */; }; - 6F370012A1C84FDF6A82BD8D /* TransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BBBC9883318840251690D58 /* TransactionsViewController.swift */; }; - 6FABFFDB1B26F2A135D9304C /* ProfilingUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 551550B87A4D1AE259A27A3F /* ProfilingUITests.swift */; }; - 78F6F743686DBEACC4D34679 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; - 794FF69C305368C6D432AAF0 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 7B6DC5B01ABEB99144644E87 /* DiskWriteException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */; }; - 7D9AEC24B1E6A3E9EDE7E463 /* BenchmarkingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F561960FD13128F6785A21A7 /* BenchmarkingViewController.swift */; }; - 7F70072A4CC02F1A7F5AD352 /* ErrorsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */; }; - 811D0E72F3EC4835AC2DEAEE /* Tongariro.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 2694665D127C4B4B62B2DCC3 /* Tongariro.jpg */; }; - 83D57C0C11EE555BAD15D65D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8813728C87CB00CBB907AF8D /* Main.storyboard */; }; - 846570ED1077949BE6404BA5 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; - 85EAE34F771673A771ED6860 /* NibViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */; }; - 864CDDF55D447714ECD8113B /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 8A265A5A425593298A5661C7 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 398D106D13E48BC9F9C5BED2 /* ShareViewController.swift */; }; - 8AD86CC5980E52382B4CB190 /* ViewLifecycleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94FAA087A715E1C000463EB /* ViewLifecycleUITests.swift */; }; - 8EFBF7F312296D36BD7A65D8 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */; }; - 907F36A87BA875ADDD9EE77D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 37FB718FAF4DE8DD3FA44C14 /* LaunchScreen.storyboard */; }; - 945ADF884F4CE322E96F7609 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A069618DFB86210BA92797 /* SceneDelegate.swift */; }; - 9992CC67FEEFCD5C449647F5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B77039FF4008016404245CD /* AppDelegate.swift */; }; - 9ACA3389570D88D40C770C04 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E0C905647A1A0897FC57FFC /* MainInterface.storyboard */; }; - 9F633516A435CF3A80629711 /* iOS-Swift-ActionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 9FA845DB84D1CD64F65F09C3 /* SentrySampleUITestShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - A134CD1F5B1EF57310E0D28A /* ProfilingCPUWork.swift in Sources */ = {isa = PBXBuildFile; fileRef = F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */; }; - A33B7315864168745B888AAA /* UserFeedbackUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */; }; - A36F7529967DF4650B2A30F4 /* ExtraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F167D91DC443457E9459B25A /* ExtraViewController.swift */; }; - A7BABE45A57F6086EA714391 /* TopViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */; }; - AB507A8400D367E151715AD4 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4439126C6455FFD1DC5F14D9 /* IntentHandler.swift */; }; - B53B2B2FAFE59E3F16442710 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 985DCC5D72E703B5070AE77A /* Assets.xcassets */; }; - B88DCA642A478D48BE5F33FC /* SentryPDFViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */; }; - BB881433D04369350EAF28EE /* UITestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6757896C15DC45A3721E0E4 /* UITestHelpers.swift */; }; - C8685E311CFD471F959409E0 /* TableViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = FEEA62485E8E4A953DCA6466 /* TableViewController.xib */; }; - CB071CF3620376DE56A74E5A /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091E029BF7040895247FB10B /* TableViewController.swift */; }; - CC7669CB4839913CA07942FC /* BaseUITest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */; }; - D8D43AE7F1763F285823DE04 /* SentrySampleUITestShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - DEC8E471E76504FF0FC3A813 /* Sample.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = B8D34DA3392FA270D53C12EF /* Sample.mp4 */; }; - DFC067DA37586FB5C3845AE6 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; }; - E19537E24AC87FA8FB614976 /* Sentry-iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - E9AC8007BD56C0BEC1CDEA8D /* LaunchUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */; }; - E9EA0697CF31EE5674B3B172 /* LoremIpsumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */; }; - EC069813F2C25A4E597ACB4C /* SentrySDKPerformanceBenchmarkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 734953962E0C95C1D03532C6 /* SentrySDKPerformanceBenchmarkTests.m */; }; - EC3DCFEA537525E12B4BFAB3 /* CppWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 78091604E5DA43126BC9F195 /* CppWrapper.mm */; }; - F2EB8945FE8410AC4013F1D3 /* Sentry-iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - F43644B26FE87149146D3A94 /* SentrySampleUITestShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */; }; - F47EE1EDBE1652A95F4F38D0 /* SampleAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */; }; - F8CBB74BDDC9BDF32A0B53C2 /* TraceTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F46879D621F90A7655C615F /* TraceTestViewController.swift */; }; - FC64935CE5594AB36C745561 /* NibViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AC0B967B60BC739056BD34 /* NibViewController.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 03BA5422F1491741DA3647F7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - 04CE818424E4CFEDFC8500F4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - 10A231A271C7F2919AB6621D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - 1B88005472B5B3754024AD7E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 9241AC122EBA38CB00E611ED; - remoteInfo = SentrySwiftLog; - }; - 28D99B7E8D5D8A3FEF039435 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 2; - remoteGlobalIDString = 63AA759B1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - 3794B0D55C8C4C1EED674F88 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - 4AC768F9036A08D866F138F7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - 57429C308B31F557BC7F076D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 2; - remoteGlobalIDString = 431A3FE213391C00C3CE66D2; - remoteInfo = SentrySampleShared; - }; - 72DFB8179857ED959AC59C6A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5DB3F50F9D50D2F2419F11F3; - remoteInfo = "iOS-Swift-IntentExtension"; - }; - 75965192E3621CC601EFF76B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; - proxyType = 1; - remoteGlobalIDString = C97FF7E8B34B54F1E1DA596E; - remoteInfo = "iOS-Swift-ShareExtension"; - }; - 775F3A04C531E62306E14BB7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - 785078A2EEA4E27293734411 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - 9552257639CAECB7DF7594E3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5B05A31890F168B2E9851B98; - remoteInfo = "iOS-Swift-ActionExtension"; - }; - 9AA1C80EDE26555EB9D13AA5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = 6B366C32DB86ECAEC77565BA; - remoteInfo = SentrySampleUITestShared; - }; - 9D37C5F7AF5F567F9441DD93 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - AD07460C7C7038E387A15BF7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 3A77435E8E76EAE86C6ABE7F /* Project object */; - proxyType = 1; - remoteGlobalIDString = CE5CCA44021F9D3D46E8199B; - remoteInfo = "iOS-SwiftClip"; - }; - AE2CD83FC639C0D7FDEBF4E0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 2; - remoteGlobalIDString = 9241AC132EBA38CB00E611ED; - remoteInfo = SentrySwiftLog; - }; - C14383D4B38A48B66866B652 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 2; - remoteGlobalIDString = FECE0CBB64265856A9532559; - remoteInfo = SentrySampleUITestShared; - }; - D1E006385DDD8804E84EC0DC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = 6B366C32DB86ECAEC77565BA; - remoteInfo = SentrySampleUITestShared; - }; - DA6BA1590AD71A7A6A923C4B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - E19C531E2112D2306BFFA92E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - F5CD4DB6DC0E2D28F5163B58 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C811907AC373AB60E906542E /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 1E892FF43C4C1BAABA62B967 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - E19537E24AC87FA8FB614976 /* Sentry-iOS.framework in Embed Frameworks */, - 864CDDF55D447714ECD8113B /* SentrySampleShared.framework in Embed Frameworks */, - 4A6288CAA3E47ADBC98E03A2 /* SentrySwiftLog.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 6A1AE036BB6A28D42ECD9C87 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 9FA845DB84D1CD64F65F09C3 /* SentrySampleUITestShared.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 838A53713992FAAB18255E51 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - D8D43AE7F1763F285823DE04 /* SentrySampleUITestShared.framework in Embed Frameworks */, - 794FF69C305368C6D432AAF0 /* SentrySampleShared.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - E3DBF0DDB16F30F09AE629F3 /* Embed Foundation Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - 658BD4C7B5E66786A5D70C2F /* iOS-Swift-ShareExtension.appex in Embed Foundation Extensions */, - 9F633516A435CF3A80629711 /* iOS-Swift-ActionExtension.appex in Embed Foundation Extensions */, - 662B05F82BA41661ABA0E0CA /* iOS-Swift-IntentExtension.appex in Embed Foundation Extensions */, - ); - name = "Embed Foundation Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; - E81D4A427BB760A73A4A7D14 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - F2EB8945FE8410AC4013F1D3 /* Sentry-iOS.framework in Embed Frameworks */, - 55DB9EEC221DF519072BE0B3 /* SentrySampleShared.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - EFE086EEA5B2C24063CE1F69 /* Embed App Clips */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(CONTENTS_FOLDER_PATH)/AppClips"; - dstSubfolderSpec = 16; - files = ( - 2D1D4103B2B025276E4956B5 /* iOS-SwiftClip.app in Embed App Clips */, - ); - name = "Embed App Clips"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 091E029BF7040895247FB10B /* TableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = ""; }; - 09CB9F8DFDCCF7FBEF4819B9 /* XCTest+Delay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTest+Delay.swift"; sourceTree = ""; }; - 0A1935AC3E350D80A199728D /* TopViewControllerInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewControllerInspector.swift; sourceTree = ""; }; - 0B512FE8722AD00B68A822BE /* iOS-Swift-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-Swift-Bridging-Header.h"; sourceTree = ""; }; - 0B74D0352DBEB7A383B09A1A /* iOS-Swift.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "iOS-Swift.yml"; sourceTree = ""; }; - 111D68433FFABCFE3119006C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchUITests.swift; sourceTree = ""; }; - 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftClip.xcconfig"; sourceTree = ""; }; - 191E19F619E741E73E835E47 /* BuildOptions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = BuildOptions.xcconfig; sourceTree = ""; }; - 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-Swift-ShareExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-Swift-IntentExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1E3F3B596C5D113BE83B2428 /* ClangCppLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangCppLanguage.xcconfig; sourceTree = ""; }; - 2026796F32A57B6F4F468797 /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; }; - 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-IntentExtension.xcconfig"; sourceTree = ""; }; - 2627DF3E963067EEA58BAE88 /* Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Swift.xcconfig; sourceTree = ""; }; - 2694665D127C4B4B62B2DCC3 /* Tongariro.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Tongariro.jpg; sourceTree = ""; }; - 2704901D44B9B108F1B42904 /* NSObject+SentryAppSetup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+SentryAppSetup.h"; sourceTree = ""; }; - 27A507F02EE543D8EAE51253 /* SRRedactSampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SRRedactSampleViewController.swift; sourceTree = ""; }; - 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryPDFViewController.swift; sourceTree = ""; }; - 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiskWriteException.swift; sourceTree = ""; }; - 2CE4A1607B6636E7F9D1049F /* PermissionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionsViewController.swift; sourceTree = ""; }; - 2EFD3AD5D144F9C019871849 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SampleAssets.xcassets; sourceTree = ""; }; - 3134BF0471477E94C9886A4F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 328DE61B3CAEB67D00E916F0 /* iOS_SwiftClip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOS_SwiftClip.entitlements; sourceTree = ""; }; - 32ECFAF2EE13BB90EAC1BEF6 /* SessionReplayUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionReplayUITests.swift; sourceTree = ""; }; - 34E9AEE9AA451F75F7DB63AA /* CoreDataViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataViewController.swift; sourceTree = ""; }; - 3589A0CF9BB424480A9B7323 /* Sample.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Sample.xcconfig; sourceTree = ""; }; - 398D106D13E48BC9F9C5BED2 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; - 3A5B13F49927E3AD638263E7 /* UIEventBreadcrumbTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEventBreadcrumbTests.swift; sourceTree = ""; }; - 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3CCD9ACD51F4FD1F18406815 /* ClangObjCLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangObjCLanguage.xcconfig; sourceTree = ""; }; - 3EDA1112F32AFA3C38DCB341 /* _Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = _Common.xcconfig; sourceTree = ""; }; - 3F640261ED8F2221C4FDBD1F /* iOS-Swift.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "iOS-Swift.entitlements"; sourceTree = ""; }; - 438A5FECE8C2A2E5F63EE2F0 /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; - 4439126C6455FFD1DC5F14D9 /* IntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentHandler.swift; sourceTree = ""; }; - 4516D984EA4343F20D13AE5E /* ClangLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangLanguage.xcconfig; sourceTree = ""; }; - 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-ActionExtension.xcconfig"; sourceTree = ""; }; - 4B77039FF4008016404245CD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 4D6A40C9633EAECD3B8E0C67 /* iOS-Swift_Base.xctestplan */ = {isa = PBXFileReference; path = "iOS-Swift_Base.xctestplan"; sourceTree = ""; }; - 5305DB7675BCC04CEE052B5C /* ProfilingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingViewController.swift; sourceTree = ""; }; - 551550B87A4D1AE259A27A3F /* ProfilingUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingUITests.swift; sourceTree = ""; }; - 58879E907B39D86CB12A4F4C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 594C6C143D646B48D67B610C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; - 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift.xcconfig"; sourceTree = ""; }; - 5F0230BC4622C791FBEA4976 /* iOS-Benchmarking_Base.xctestplan */ = {isa = PBXFileReference; path = "iOS-Benchmarking_Base.xctestplan"; sourceTree = ""; }; - 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NibViewController.xib; sourceTree = ""; }; - 63A069618DFB86210BA92797 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "iOS-Swift-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Benchmarking.xcconfig"; sourceTree = ""; }; - 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryVideoViewController.swift; sourceTree = ""; }; - 6960C6B2C93BD6A655026C18 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 734953962E0C95C1D03532C6 /* SentrySDKPerformanceBenchmarkTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentrySDKPerformanceBenchmarkTests.m; sourceTree = ""; }; - 75600452DD4B93E1E0355F08 /* EnergyConsumer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnergyConsumer.swift; sourceTree = ""; }; - 77E8D04AD50CA1647ACBF553 /* SentryBenchmarking.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SentryBenchmarking.mm; sourceTree = ""; }; - 78091604E5DA43126BC9F195 /* CppWrapper.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CppWrapper.mm; sourceTree = ""; }; - 7BBBC9883318840251690D58 /* TransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionsViewController.swift; sourceTree = ""; }; - 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseUITest.swift; sourceTree = ""; }; - 7F46879D621F90A7655C615F /* TraceTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TraceTestViewController.swift; sourceTree = ""; }; - 80C56678E58B19DE7E5AC505 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorsViewController.swift; sourceTree = ""; }; - 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewControllerTests.swift; sourceTree = ""; }; - 8212E22D95B5E357BD0E5253 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 82187F5842E4AF261FF7A79B /* ClangWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarnings.xcconfig; sourceTree = ""; }; - 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingNetworkScanner.swift; sourceTree = ""; }; - 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-SwiftClip.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 8676CFD056BB0C02B05026F8 /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; }; - 884173CDEBFCB5BCA30755D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 884F6DC27D1D6479DE82A19C /* SearchPaths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SearchPaths.xcconfig; sourceTree = ""; }; - 89700FC1B6E2F322734C4681 /* Linking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Linking.xcconfig; sourceTree = ""; }; - 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-ShareExtension.xcconfig"; sourceTree = ""; }; - 8B4DF0C116D93A28F939AAEF /* ClangModules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangModules.xcconfig; sourceTree = ""; }; - 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-Swift-ActionExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - 919455E53FC420C8ED9F8790 /* ClangWarningsObjC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsObjC.xcconfig; sourceTree = ""; }; - 972DD7CBB48B45181873FE3E /* ClangPreprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangPreprocessing.xcconfig; sourceTree = ""; }; - 9736CB8B27AB4F265767C4AF /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; - 985DCC5D72E703B5070AE77A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - A1F9EDDC06DDABBA4DB04A3D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - A4568D77EB0E9357D64D0B1F /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; - A6CFF1E7A99769E83BA0E317 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserFeedbackUITests.swift; sourceTree = ""; }; - A8768C166771E0D49A7057B6 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; - A904FB635EC0E4E513103D85 /* CppWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CppWrapper.h; sourceTree = ""; }; - A92E0DC9A242AE1C8D55FE4E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+SentryAppSetup.m"; sourceTree = ""; }; - B363B5FE6C5D8037994CF501 /* ProjectProposal.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = ProjectProposal.pdf; sourceTree = ""; }; - B8D34DA3392FA270D53C12EF /* Sample.mp4 */ = {isa = PBXFileReference; path = Sample.mp4; sourceTree = ""; }; - BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricKitManager.swift; sourceTree = ""; }; - BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Swift-UITests.xcconfig"; sourceTree = ""; }; - C06597CE87CAE662AD88887C /* ClangAnalyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangAnalyzer.xcconfig; sourceTree = ""; }; - C398D285363886FF54084E2B /* ClangWarningsCpp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsCpp.xcconfig; sourceTree = ""; }; - C3E159B651EB7692A2C7E74B /* CppCode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CppCode.cpp; sourceTree = ""; }; - C811907AC373AB60E906542E /* Sentry */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sentry; path = ../../Sentry.xcodeproj; sourceTree = ""; }; - C94FAA087A715E1C000463EB /* ViewLifecycleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewLifecycleUITests.swift; sourceTree = ""; }; - D265E2EDD00C60F7F5B6B888 /* TriggerAppHang.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TriggerAppHang.swift; sourceTree = ""; }; - D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SentrySampleShared; path = ../SentrySampleShared/SentrySampleShared.xcodeproj; sourceTree = ""; }; - D46A7072778733E46E720E52 /* CppCode.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = CppCode.hpp; sourceTree = ""; }; - D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEventBreadcrumbsController.swift; sourceTree = ""; }; - D5AC0B967B60BC739056BD34 /* NibViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NibViewController.swift; sourceTree = ""; }; - D765E5E52128E3F6B9D0146C /* PageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageViewController.swift; sourceTree = ""; }; - D80A83A9FD1BECA60D8DAAF8 /* SentryExposure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryExposure.h; sourceTree = ""; }; - D81C678605E1A38F19B5A024 /* CodeGeneration.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeGeneration.xcconfig; sourceTree = ""; }; - D82593E08C9EEE14439FEB1D /* ViewLifecycleTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewLifecycleTestViewController.swift; sourceTree = ""; }; - DA82C91822C2EBD3D6D742A1 /* ActionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionViewController.swift; sourceTree = ""; }; - E312023EF6ACB33ED0305DFC /* SentryBenchmarking.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryBenchmarking.h; sourceTree = ""; }; - E405B26D12528D3D4D0F5ECD /* Person.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Person.xcdatamodel; sourceTree = ""; }; - E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoForBreadcrumbController.swift; sourceTree = ""; }; - EB15DB1B86AFA85242911AF5 /* SplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitViewController.swift; sourceTree = ""; }; - EB925B776381501478AB32A1 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; - EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoremIpsumViewController.swift; sourceTree = ""; }; - EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "iOS-Benchmarking.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - EFD16BCAD9B26BEB540196C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - F167D91DC443457E9459B25A /* ExtraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraViewController.swift; sourceTree = ""; }; - F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfilingCPUWork.swift; sourceTree = ""; }; - F561960FD13128F6785A21A7 /* BenchmarkingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkingViewController.swift; sourceTree = ""; }; - F6757896C15DC45A3721E0E4 /* UITestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestHelpers.swift; sourceTree = ""; }; - F938A0625B5B6F20402224EE /* AssetCatalog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AssetCatalog.xcconfig; sourceTree = ""; }; - F94A74A23ED1C3E0778D26AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - FC08BFF2EC8DF341033195E4 /* ReplaceContentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplaceContentViewController.swift; sourceTree = ""; }; - FEEA62485E8E4A953DCA6466 /* TableViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TableViewController.xib; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 792421530B8177491C99E802 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 53581AA5D1FD2F734A163752 /* Sentry-iOS.framework in Frameworks */, - 846570ED1077949BE6404BA5 /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9269256468354F4625283B9E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5D2281140DE120DF5FAFCA46 /* Sentry-iOS.framework in Frameworks */, - 2E37B5254D7597BD8B6169B9 /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 95627446A8F36FA0893C4AA7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 521D00C7E7EF3B0AD4633167 /* SentrySampleUITestShared.framework in Frameworks */, - 78F6F743686DBEACC4D34679 /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A6ED93B0446BB19B57BE0C57 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 67BEBED634D92F2B1591DA05 /* Sentry-iOS.framework in Frameworks */, - 2FCE6F02F09EC77C3AD49997 /* SentrySampleShared.framework in Frameworks */, - 58DF542F78921F4880ECAE94 /* SentrySwiftLog.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AA23A23651FE7A89FA828CE2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F43644B26FE87149146D3A94 /* SentrySampleUITestShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DD026EF5271F4C553C9626F5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DFC067DA37586FB5C3845AE6 /* Sentry-iOS.framework in Frameworks */, - 8EFBF7F312296D36BD7A65D8 /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F582AE8252B2E02839C7365F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 51A85B15CAD3953FE3556C04 /* Sentry-iOS.framework in Frameworks */, - 1336182701E13D2606D4FFEB /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 06619803D06AFF4B14100FAB /* Products */ = { - isa = PBXGroup; - children = ( - AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */, - 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */, - ); - name = Products; - sourceTree = ""; - }; - 0D24C59349E6F2D92B327248 /* Products */ = { - isa = PBXGroup; - children = ( - 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */, - 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */, - ); - name = Products; - sourceTree = ""; - }; - 14D1E89FCCC6AE55333D8A0B /* Sources */ = { - isa = PBXGroup; - children = ( - 4439126C6455FFD1DC5F14D9 /* IntentHandler.swift */, - ); - path = Sources; - sourceTree = ""; - }; - 14E8B9BA6F996DBFE2FEB910 /* Tools */ = { - isa = PBXGroup; - children = ( - C3E159B651EB7692A2C7E74B /* CppCode.cpp */, - D46A7072778733E46E720E52 /* CppCode.hpp */, - A904FB635EC0E4E513103D85 /* CppWrapper.h */, - 78091604E5DA43126BC9F195 /* CppWrapper.mm */, - 2C58FB28BDB584B486D60D5C /* DiskWriteException.swift */, - 75600452DD4B93E1E0355F08 /* EnergyConsumer.swift */, - 0B512FE8722AD00B68A822BE /* iOS-Swift-Bridging-Header.h */, - BA1D703A0A609E9A5B7F4334 /* MetricKitManager.swift */, - E312023EF6ACB33ED0305DFC /* SentryBenchmarking.h */, - 77E8D04AD50CA1647ACBF553 /* SentryBenchmarking.mm */, - D80A83A9FD1BECA60D8DAAF8 /* SentryExposure.h */, - 0A1935AC3E350D80A199728D /* TopViewControllerInspector.swift */, - D265E2EDD00C60F7F5B6B888 /* TriggerAppHang.swift */, - ); - path = Tools; - sourceTree = ""; - }; - 1DCC93DE3A98FAA1D60573A7 /* iOS-Swift */ = { - isa = PBXGroup; - children = ( - 4B77039FF4008016404245CD /* AppDelegate.swift */, - 80ED14BF53BD24179AF936DE /* ErrorsViewController.swift */, - F167D91DC443457E9459B25A /* ExtraViewController.swift */, - 884173CDEBFCB5BCA30755D8 /* Info.plist */, - 3F640261ED8F2221C4FDBD1F /* iOS-Swift.entitlements */, - 62B078E53E402797EE060833 /* LaunchScreen.storyboard */, - E702320CD964146FB4A53460 /* Main.storyboard */, - B363B5FE6C5D8037994CF501 /* ProjectProposal.pdf */, - B8D34DA3392FA270D53C12EF /* Sample.mp4 */, - 3589A0CF9BB424480A9B7323 /* Sample.xcconfig */, - FA6FCAF423D635FDA9DBBFC1 /* SentryData.xcdatamodeld */, - 2694665D127C4B4B62B2DCC3 /* Tongariro.jpg */, - 7BBBC9883318840251690D58 /* TransactionsViewController.swift */, - DC3B49050E8865F0B7DCAD5D /* Profiling */, - 14E8B9BA6F996DBFE2FEB910 /* Tools */, - F9540EC35C5925E94F45B382 /* ViewControllers */, - ); - path = "iOS-Swift"; - sourceTree = ""; - }; - 1F0588298FB9165C608372B6 /* iOS-Swift */ = { - isa = PBXGroup; - children = ( - 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */, - 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */, - 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */, - 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */, - BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */, - 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */, - 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */, - ); - name = "iOS-Swift"; - path = .; - sourceTree = ""; - }; - 433F312156F4B503E2C22D3D /* iOS-Swift-UITests */ = { - isa = PBXGroup; - children = ( - 7DD0D69ED7EDE646A6423EAA /* BaseUITest.swift */, - A92E0DC9A242AE1C8D55FE4E /* Info.plist */, - 11C193449DEA7C4DDE40BBAC /* LaunchUITests.swift */, - 551550B87A4D1AE259A27A3F /* ProfilingUITests.swift */, - 32ECFAF2EE13BB90EAC1BEF6 /* SessionReplayUITests.swift */, - 81A88F9881D9A8C9BC4D0981 /* TopViewControllerTests.swift */, - 3A5B13F49927E3AD638263E7 /* UIEventBreadcrumbTests.swift */, - F6757896C15DC45A3721E0E4 /* UITestHelpers.swift */, - A7EDF3062F37C6E63D1205BF /* UserFeedbackUITests.swift */, - C94FAA087A715E1C000463EB /* ViewLifecycleUITests.swift */, - 09CB9F8DFDCCF7FBEF4819B9 /* XCTest+Delay.swift */, - ); - path = "iOS-Swift-UITests"; - sourceTree = ""; - }; - 530A144D78039C529394F66A /* iOS-Swift-ShareExtension */ = { - isa = PBXGroup; - children = ( - A77545ADBE9D1E26F8D1ED05 /* Resources */, - AD9C8FB43B9FB54F857B8C88 /* Sources */, - ); - path = "iOS-Swift-ShareExtension"; - sourceTree = ""; - }; - 53941E696F63F4E24A3A6B38 /* Products */ = { - isa = PBXGroup; - children = ( - EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */, - 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */, - 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */, - 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */, - 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */, - 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */, - 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */, - ); - name = Products; - sourceTree = ""; - }; - 5BB62199924124F92B26CEB3 /* Config */ = { - isa = PBXGroup; - children = ( - 3EDA1112F32AFA3C38DCB341 /* _Common.xcconfig */, - 8676CFD056BB0C02B05026F8 /* Architectures.xcconfig */, - F938A0625B5B6F20402224EE /* AssetCatalog.xcconfig */, - 191E19F619E741E73E835E47 /* BuildOptions.xcconfig */, - C06597CE87CAE662AD88887C /* ClangAnalyzer.xcconfig */, - 1E3F3B596C5D113BE83B2428 /* ClangCppLanguage.xcconfig */, - 4516D984EA4343F20D13AE5E /* ClangLanguage.xcconfig */, - 8B4DF0C116D93A28F939AAEF /* ClangModules.xcconfig */, - 3CCD9ACD51F4FD1F18406815 /* ClangObjCLanguage.xcconfig */, - 972DD7CBB48B45181873FE3E /* ClangPreprocessing.xcconfig */, - 82187F5842E4AF261FF7A79B /* ClangWarnings.xcconfig */, - C398D285363886FF54084E2B /* ClangWarningsCpp.xcconfig */, - 919455E53FC420C8ED9F8790 /* ClangWarningsObjC.xcconfig */, - D81C678605E1A38F19B5A024 /* CodeGeneration.xcconfig */, - 2026796F32A57B6F4F468797 /* Deployment.xcconfig */, - 89700FC1B6E2F322734C4681 /* Linking.xcconfig */, - 438A5FECE8C2A2E5F63EE2F0 /* Localization.xcconfig */, - 9736CB8B27AB4F265767C4AF /* Metal.xcconfig */, - A8768C166771E0D49A7057B6 /* Packaging.xcconfig */, - 884F6DC27D1D6479DE82A19C /* SearchPaths.xcconfig */, - A4568D77EB0E9357D64D0B1F /* Signing.xcconfig */, - 2627DF3E963067EEA58BAE88 /* Swift.xcconfig */, - ); - name = Config; - path = ../Shared/Config; - sourceTree = ""; - }; - 5D37403FC0B005B14A3BAE3B /* Projects */ = { - isa = PBXGroup; - children = ( - C811907AC373AB60E906542E /* Sentry */, - D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */, - ); - name = Projects; - sourceTree = ""; - }; - 6803A2E39B1CD38B6F6FA200 /* Resources */ = { - isa = PBXGroup; - children = ( - 2EFD3AD5D144F9C019871849 /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - 6ECEBFFC5098DEDAE506F622 /* iOS-Benchmarking */ = { - isa = PBXGroup; - children = ( - EFD16BCAD9B26BEB540196C3 /* Info.plist */, - 734953962E0C95C1D03532C6 /* SentrySDKPerformanceBenchmarkTests.m */, - ); - path = "iOS-Benchmarking"; - sourceTree = ""; - }; - 87339914655042F1BBE52163 /* Plans */ = { - isa = PBXGroup; - children = ( - 5F0230BC4622C791FBEA4976 /* iOS-Benchmarking_Base.xctestplan */, - 4D6A40C9633EAECD3B8E0C67 /* iOS-Swift_Base.xctestplan */, - ); - name = Plans; - path = ../../Plans; - sourceTree = ""; - }; - 9D75FD88C0E38876C1D4BBC7 = { - isa = PBXGroup; - children = ( - 0B74D0352DBEB7A383B09A1A /* iOS-Swift.yml */, - 5BB62199924124F92B26CEB3 /* Config */, - 6ECEBFFC5098DEDAE506F622 /* iOS-Benchmarking */, - 1DCC93DE3A98FAA1D60573A7 /* iOS-Swift */, - 1F0588298FB9165C608372B6 /* iOS-Swift */, - E1C30EC84D3648E5D2AA6090 /* iOS-Swift-ActionExtension */, - B1F08350D217FF6B7A06EE44 /* iOS-Swift-IntentExtension */, - 530A144D78039C529394F66A /* iOS-Swift-ShareExtension */, - 433F312156F4B503E2C22D3D /* iOS-Swift-UITests */, - EC3C812AAD487544954AED5D /* iOS-SwiftClip */, - 87339914655042F1BBE52163 /* Plans */, - CC80618C88F712CCC9C11AC2 /* Shared */, - 53941E696F63F4E24A3A6B38 /* Products */, - 5D37403FC0B005B14A3BAE3B /* Projects */, - ); - sourceTree = ""; - }; - A77545ADBE9D1E26F8D1ED05 /* Resources */ = { - isa = PBXGroup; - children = ( - 8212E22D95B5E357BD0E5253 /* Info.plist */, - 6E0C905647A1A0897FC57FFC /* MainInterface.storyboard */, - ); - path = Resources; - sourceTree = ""; - }; - AD9C8FB43B9FB54F857B8C88 /* Sources */ = { - isa = PBXGroup; - children = ( - 398D106D13E48BC9F9C5BED2 /* ShareViewController.swift */, - ); - path = Sources; - sourceTree = ""; - }; - B1F08350D217FF6B7A06EE44 /* iOS-Swift-IntentExtension */ = { - isa = PBXGroup; - children = ( - 6803A2E39B1CD38B6F6FA200 /* Resources */, - 14D1E89FCCC6AE55333D8A0B /* Sources */, - ); - path = "iOS-Swift-IntentExtension"; - sourceTree = ""; - }; - CC80618C88F712CCC9C11AC2 /* Shared */ = { - isa = PBXGroup; - children = ( - 2F62C06F30188F22B3FC33D6 /* SampleAssets.xcassets */, - ); - name = Shared; - path = ../Shared; - sourceTree = ""; - }; - DC3B49050E8865F0B7DCAD5D /* Profiling */ = { - isa = PBXGroup; - children = ( - F561960FD13128F6785A21A7 /* BenchmarkingViewController.swift */, - 2704901D44B9B108F1B42904 /* NSObject+SentryAppSetup.h */, - B231B9FDB45669E5B5BC85F3 /* NSObject+SentryAppSetup.m */, - F176BD186091A9355B8C54A2 /* ProfilingCPUWork.swift */, - 84A4BC6BD538C2B4F8E20101 /* ProfilingNetworkScanner.swift */, - 5305DB7675BCC04CEE052B5C /* ProfilingViewController.swift */, - ); - path = Profiling; - sourceTree = ""; - }; - E1C30EC84D3648E5D2AA6090 /* iOS-Swift-ActionExtension */ = { - isa = PBXGroup; - children = ( - F00645BFC4F4EE8486F76C8B /* Resources */, - F8E13979B1781571A2E81BF3 /* Sources */, - ); - path = "iOS-Swift-ActionExtension"; - sourceTree = ""; - }; - EC3C812AAD487544954AED5D /* iOS-SwiftClip */ = { - isa = PBXGroup; - children = ( - 3134BF0471477E94C9886A4F /* AppDelegate.swift */, - 985DCC5D72E703B5070AE77A /* Assets.xcassets */, - A1F9EDDC06DDABBA4DB04A3D /* Info.plist */, - 328DE61B3CAEB67D00E916F0 /* iOS_SwiftClip.entitlements */, - 37FB718FAF4DE8DD3FA44C14 /* LaunchScreen.storyboard */, - 8813728C87CB00CBB907AF8D /* Main.storyboard */, - 63A069618DFB86210BA92797 /* SceneDelegate.swift */, - 111D68433FFABCFE3119006C /* ViewController.swift */, - ); - path = "iOS-SwiftClip"; - sourceTree = ""; - }; - F00645BFC4F4EE8486F76C8B /* Resources */ = { - isa = PBXGroup; - children = ( - 80C56678E58B19DE7E5AC505 /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - F8E13979B1781571A2E81BF3 /* Sources */ = { - isa = PBXGroup; - children = ( - DA82C91822C2EBD3D6D742A1 /* ActionViewController.swift */, - ); - path = Sources; - sourceTree = ""; - }; - F9540EC35C5925E94F45B382 /* ViewControllers */ = { - isa = PBXGroup; - children = ( - 34E9AEE9AA451F75F7DB63AA /* CoreDataViewController.swift */, - E554CB6D8C25262F430A739C /* InfoForBreadcrumbController.swift */, - EC29F2EAA808DD5E7D7BE2B4 /* LoremIpsumViewController.swift */, - D5AC0B967B60BC739056BD34 /* NibViewController.swift */, - 5FE4A549ED401080AFCB8B2A /* NibViewController.xib */, - D765E5E52128E3F6B9D0146C /* PageViewController.swift */, - 2CE4A1607B6636E7F9D1049F /* PermissionsViewController.swift */, - FC08BFF2EC8DF341033195E4 /* ReplaceContentViewController.swift */, - 28E5BFD867CC9CD8D561CD61 /* SentryPDFViewController.swift */, - 684D082B39C1AF4D69C1852F /* SentryVideoViewController.swift */, - EB15DB1B86AFA85242911AF5 /* SplitViewController.swift */, - 27A507F02EE543D8EAE51253 /* SRRedactSampleViewController.swift */, - 091E029BF7040895247FB10B /* TableViewController.swift */, - FEEA62485E8E4A953DCA6466 /* TableViewController.xib */, - 7F46879D621F90A7655C615F /* TraceTestViewController.swift */, - D53477847607017C3A437AE7 /* UIEventBreadcrumbsController.swift */, - D82593E08C9EEE14439FEB1D /* ViewLifecycleTestViewController.swift */, - EB925B776381501478AB32A1 /* WebViewController.swift */, - ); - path = ViewControllers; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 0217293F044A3AEED8E37A25 /* iOS-Swift-UITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 05AF3816B4C29EBF970365A6 /* Build configuration list for PBXNativeTarget "iOS-Swift-UITests" */; - buildPhases = ( - E314EC5A65FC77B725C2C065 /* Sources */, - 95627446A8F36FA0893C4AA7 /* Frameworks */, - 838A53713992FAAB18255E51 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - C8D081DB21037550990DD833 /* PBXTargetDependency */, - 34983C58FB741BCAC4C9C524 /* PBXTargetDependency */, - ); - name = "iOS-Swift-UITests"; - packageProductDependencies = ( - ); - productName = "iOS-Swift-UITests"; - productReference = 6550F952A3DE74ECDB5DE1FA /* iOS-Swift-UITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 5B05A31890F168B2E9851B98 /* iOS-Swift-ActionExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8333F40D783D1FE5CA8D3C42 /* Build configuration list for PBXNativeTarget "iOS-Swift-ActionExtension" */; - buildPhases = ( - 77FD74323B1D3675E998E895 /* Sources */, - 9269256468354F4625283B9E /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - AEE4597AC7E15080557A2942 /* PBXTargetDependency */, - 2D7D11D434971D3FC80A1BDD /* PBXTargetDependency */, - ); - name = "iOS-Swift-ActionExtension"; - packageProductDependencies = ( - ); - productName = "iOS-Swift-ActionExtension"; - productReference = 9110682E13966E0619F4C1FF /* iOS-Swift-ActionExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; - 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = E8C9FFFB0089D54158DD2186 /* Build configuration list for PBXNativeTarget "iOS-Swift-IntentExtension" */; - buildPhases = ( - F2A322C0858D476A56DE85D8 /* Sources */, - 792421530B8177491C99E802 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - AB0E2453795562ED9191BAF4 /* PBXTargetDependency */, - 2EA099CC97C081E5C6439B77 /* PBXTargetDependency */, - ); - name = "iOS-Swift-IntentExtension"; - packageProductDependencies = ( - ); - productName = "iOS-Swift-IntentExtension"; - productReference = 1DEF15A1ACA9C9854945F4C6 /* iOS-Swift-IntentExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; - 6C5B85CBF6AE4AA020E28E5F /* iOS-Swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F756FBE7E9904EAF8AAE794 /* Build configuration list for PBXNativeTarget "iOS-Swift" */; - buildPhases = ( - 71AAA8240D9D3698E33D85D9 /* Sources */, - 20FF642156567BFEA0E2CD6B /* Inject Git Information into Info.plist */, - F49F0FAB7F3E54358343FA90 /* Resources */, - A6ED93B0446BB19B57BE0C57 /* Frameworks */, - E3DBF0DDB16F30F09AE629F3 /* Embed Foundation Extensions */, - EFE086EEA5B2C24063CE1F69 /* Embed App Clips */, - 1E892FF43C4C1BAABA62B967 /* Embed Frameworks */, - B407E0E35A22B7C9EA3039A9 /* Reset Git Fields in Info.plist */, - ); - buildRules = ( - ); - dependencies = ( - 9C2E65AC9E01CF415B661B3F /* PBXTargetDependency */, - B2244FCCBB452CE123C3DE37 /* PBXTargetDependency */, - EC1A2A52557D0A7B4A3E5719 /* PBXTargetDependency */, - 0F77B63056CDE5F11DB7B308 /* PBXTargetDependency */, - 8DE49BBCA6E0FA936BDFF05F /* PBXTargetDependency */, - 093A53C82423ED7FCCD9F687 /* PBXTargetDependency */, - 79FB95E9457D617F3FAA2559 /* PBXTargetDependency */, - ); - name = "iOS-Swift"; - packageProductDependencies = ( - ); - productName = "iOS-Swift"; - productReference = 3C4C86237C0D6D586B3FFB9B /* iOS-Swift.app */; - productType = "com.apple.product-type.application"; - }; - C97FF7E8B34B54F1E1DA596E /* iOS-Swift-ShareExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7C57D8C98BDDFD260E351845 /* Build configuration list for PBXNativeTarget "iOS-Swift-ShareExtension" */; - buildPhases = ( - EBDB5AB820D90EE8A13EEBDD /* Sources */, - 6816BC22E70CE418B3AE5BF2 /* Resources */, - DD026EF5271F4C553C9626F5 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - F2854F7C5A5C66775ED37569 /* PBXTargetDependency */, - 2C80E4272103ACF479F01069 /* PBXTargetDependency */, - ); - name = "iOS-Swift-ShareExtension"; - packageProductDependencies = ( - ); - productName = "iOS-Swift-ShareExtension"; - productReference = 1D92FAAD8C8895CB6683E43A /* iOS-Swift-ShareExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; - CE5CCA44021F9D3D46E8199B /* iOS-SwiftClip */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3F6AFD503E452D66859993DB /* Build configuration list for PBXNativeTarget "iOS-SwiftClip" */; - buildPhases = ( - A88E48AED3D876A26108EA40 /* Sources */, - 86F786099D42E71942DA7091 /* Inject Git Information into Info.plist */, - 56FA4488924EFB980066D4E4 /* Resources */, - F582AE8252B2E02839C7365F /* Frameworks */, - E81D4A427BB760A73A4A7D14 /* Embed Frameworks */, - B32244D41EA4D13C4C8072F0 /* Reset Git Fields in Info.plist */, - ); - buildRules = ( - ); - dependencies = ( - FBA1B347B47514CFF2F45BD3 /* PBXTargetDependency */, - 8D8992681BC508C7B3BD1E24 /* PBXTargetDependency */, - ); - name = "iOS-SwiftClip"; - packageProductDependencies = ( - ); - productName = "iOS-SwiftClip"; - productReference = 85850348B69F1BD2BC0102AC /* iOS-SwiftClip.app */; - productType = "com.apple.product-type.application.on-demand-install-capable"; - }; - E7C8F9BC5364F0980E0B827C /* iOS-Benchmarking */ = { - isa = PBXNativeTarget; - buildConfigurationList = 591AC781E512BDAEE308665C /* Build configuration list for PBXNativeTarget "iOS-Benchmarking" */; - buildPhases = ( - 7AD278228CC7578BC3D2E960 /* Sources */, - 550476FA58FCB49169F8CE18 /* Resources */, - AA23A23651FE7A89FA828CE2 /* Frameworks */, - 6A1AE036BB6A28D42ECD9C87 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 51D0CA2A94B53DD17EAF27AC /* PBXTargetDependency */, - ); - name = "iOS-Benchmarking"; - packageProductDependencies = ( - ); - productName = "iOS-Benchmarking"; - productReference = EFBCF1F91BFDD5F2AA3B836D /* iOS-Benchmarking.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 3A77435E8E76EAE86C6ABE7F /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; - TargetAttributes = { - 0217293F044A3AEED8E37A25 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - 5B05A31890F168B2E9851B98 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - 5DB3F50F9D50D2F2419F11F3 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - 6C5B85CBF6AE4AA020E28E5F = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - C97FF7E8B34B54F1E1DA596E = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - CE5CCA44021F9D3D46E8199B = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - E7C8F9BC5364F0980E0B827C = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 8F88BD7F2CAFDFA26054C0F1 /* Build configuration list for PBXProject "iOS-Swift" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = 9D75FD88C0E38876C1D4BBC7; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 0D24C59349E6F2D92B327248 /* Products */; - ProjectRef = C811907AC373AB60E906542E /* Sentry */; - }, - { - ProductGroup = 06619803D06AFF4B14100FAB /* Products */; - ProjectRef = D38DD5BC3D9D6F07E866E713 /* SentrySampleShared */; - }, - ); - projectRoot = ""; - targets = ( - E7C8F9BC5364F0980E0B827C /* iOS-Benchmarking */, - 6C5B85CBF6AE4AA020E28E5F /* iOS-Swift */, - 5B05A31890F168B2E9851B98 /* iOS-Swift-ActionExtension */, - 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */, - C97FF7E8B34B54F1E1DA596E /* iOS-Swift-ShareExtension */, - 0217293F044A3AEED8E37A25 /* iOS-Swift-UITests */, - CE5CCA44021F9D3D46E8199B /* iOS-SwiftClip */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 018FEE288B12E7853958FA69 /* SentrySampleShared.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = SentrySampleShared.framework; - remoteRef = 57429C308B31F557BC7F076D /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 0F6BBB6AA617495A3083BF7A /* Sentry-iOS.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = "Sentry-iOS.framework"; - remoteRef = 28D99B7E8D5D8A3FEF039435 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 923CF519D4F6789CCFDECE17 /* SentrySwiftLog.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = SentrySwiftLog.framework; - remoteRef = AE2CD83FC639C0D7FDEBF4E0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - AF1D8F1C2DB7F81F4C7718B2 /* SentrySampleUITestShared.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = SentrySampleUITestShared.framework; - remoteRef = C14383D4B38A48B66866B652 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 550476FA58FCB49169F8CE18 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BB2BE14330C47B96FFD11FC /* SampleAssets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 56FA4488924EFB980066D4E4 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B53B2B2FAFE59E3F16442710 /* Assets.xcassets in Resources */, - 907F36A87BA875ADDD9EE77D /* LaunchScreen.storyboard in Resources */, - 83D57C0C11EE555BAD15D65D /* Main.storyboard in Resources */, - F47EE1EDBE1652A95F4F38D0 /* SampleAssets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6816BC22E70CE418B3AE5BF2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9ACA3389570D88D40C770C04 /* MainInterface.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F49F0FAB7F3E54358343FA90 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3C1454FE7043D31D22E2454F /* LaunchScreen.storyboard in Resources */, - 1908FB96F24AF84C4BF3459C /* Main.storyboard in Resources */, - 85EAE34F771673A771ED6860 /* NibViewController.xib in Resources */, - 1DEFDFE0596A8656263440AA /* ProjectProposal.pdf in Resources */, - DEC8E471E76504FF0FC3A813 /* Sample.mp4 in Resources */, - 67D83B8F6B8B36C3153AD166 /* SampleAssets.xcassets in Resources */, - C8685E311CFD471F959409E0 /* TableViewController.xib in Resources */, - 811D0E72F3EC4835AC2DEAEE /* Tongariro.jpg in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 20FF642156567BFEA0E2CD6B /* Inject Git Information into Info.plist */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Inject Git Information into Info.plist"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "../Shared/inject-git-info.sh"; - }; - 86F786099D42E71942DA7091 /* Inject Git Information into Info.plist */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Inject Git Information into Info.plist"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "../Shared/inject-git-info.sh"; - }; - B32244D41EA4D13C4C8072F0 /* Reset Git Fields in Info.plist */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Reset Git Fields in Info.plist"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "../Shared/reset-git-info.sh"; - }; - B407E0E35A22B7C9EA3039A9 /* Reset Git Fields in Info.plist */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Reset Git Fields in Info.plist"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "../Shared/reset-git-info.sh"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 71AAA8240D9D3698E33D85D9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9992CC67FEEFCD5C449647F5 /* AppDelegate.swift in Sources */, - 7D9AEC24B1E6A3E9EDE7E463 /* BenchmarkingViewController.swift in Sources */, - 3645DEA0D5FA2CD732CD0A7F /* CoreDataViewController.swift in Sources */, - 3B9B8103032661B496038958 /* CppCode.cpp in Sources */, - EC3DCFEA537525E12B4BFAB3 /* CppWrapper.mm in Sources */, - 7B6DC5B01ABEB99144644E87 /* DiskWriteException.swift in Sources */, - 022500679EC17AFCA83097C9 /* EnergyConsumer.swift in Sources */, - 7F70072A4CC02F1A7F5AD352 /* ErrorsViewController.swift in Sources */, - A36F7529967DF4650B2A30F4 /* ExtraViewController.swift in Sources */, - 4F6AA26561C2DEBAC1F428BD /* InfoForBreadcrumbController.swift in Sources */, - E9EA0697CF31EE5674B3B172 /* LoremIpsumViewController.swift in Sources */, - 55F607BA16B254E78EB63132 /* MetricKitManager.swift in Sources */, - 51DE8527F5BE077F8DA9418F /* NSObject+SentryAppSetup.m in Sources */, - FC64935CE5594AB36C745561 /* NibViewController.swift in Sources */, - 3719A55526158ED00F37538F /* PageViewController.swift in Sources */, - 1A2D51F9C195CAE4881B37CB /* PermissionsViewController.swift in Sources */, - A134CD1F5B1EF57310E0D28A /* ProfilingCPUWork.swift in Sources */, - 55E86406E580D92EA33438FC /* ProfilingNetworkScanner.swift in Sources */, - 321C268EEECA1E6EC1685AB7 /* ProfilingViewController.swift in Sources */, - 2682F19C24704715F14FE9B8 /* ReplaceContentViewController.swift in Sources */, - 131F936B2E6D6ED14B6A5301 /* SRRedactSampleViewController.swift in Sources */, - 51183F4C696186DB42BD8484 /* SentryBenchmarking.mm in Sources */, - 1FAB3D63BF53BDCE25C6A56F /* SentryData.xcdatamodeld in Sources */, - B88DCA642A478D48BE5F33FC /* SentryPDFViewController.swift in Sources */, - 63077CC6E384663E06B7A1D7 /* SentryVideoViewController.swift in Sources */, - 1ECA47ADFB44EDFB74AC08F2 /* SplitViewController.swift in Sources */, - CB071CF3620376DE56A74E5A /* TableViewController.swift in Sources */, - 5CF2C5A14A89516BD01B1028 /* TopViewControllerInspector.swift in Sources */, - F8CBB74BDDC9BDF32A0B53C2 /* TraceTestViewController.swift in Sources */, - 6F370012A1C84FDF6A82BD8D /* TransactionsViewController.swift in Sources */, - 21558F7BAEDF9DD8CA8EEF7A /* TriggerAppHang.swift in Sources */, - 6AD61205E0EF9D834B7049C5 /* UIEventBreadcrumbsController.swift in Sources */, - 46F7775D6A86784793887076 /* ViewLifecycleTestViewController.swift in Sources */, - 10B1F4E91D817FB352EBE1DC /* WebViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 77FD74323B1D3675E998E895 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5133770424120A9B4C96C9A1 /* ActionViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7AD278228CC7578BC3D2E960 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EC069813F2C25A4E597ACB4C /* SentrySDKPerformanceBenchmarkTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A88E48AED3D876A26108EA40 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2082C929EDEBA2B486D0C5D0 /* AppDelegate.swift in Sources */, - 945ADF884F4CE322E96F7609 /* SceneDelegate.swift in Sources */, - 3EA6818452916656DD894623 /* ViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E314EC5A65FC77B725C2C065 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CC7669CB4839913CA07942FC /* BaseUITest.swift in Sources */, - E9AC8007BD56C0BEC1CDEA8D /* LaunchUITests.swift in Sources */, - 6FABFFDB1B26F2A135D9304C /* ProfilingUITests.swift in Sources */, - 2F40754B43CBBBCA710076A9 /* SessionReplayUITests.swift in Sources */, - A7BABE45A57F6086EA714391 /* TopViewControllerTests.swift in Sources */, - 25686484B5CCB63FBB658069 /* UIEventBreadcrumbTests.swift in Sources */, - BB881433D04369350EAF28EE /* UITestHelpers.swift in Sources */, - A33B7315864168745B888AAA /* UserFeedbackUITests.swift in Sources */, - 8AD86CC5980E52382B4CB190 /* ViewLifecycleUITests.swift in Sources */, - 1C06B72E1AC6FFC9EE5B2EA6 /* XCTest+Delay.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EBDB5AB820D90EE8A13EEBDD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8A265A5A425593298A5661C7 /* ShareViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F2A322C0858D476A56DE85D8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AB507A8400D367E151715AD4 /* IntentHandler.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 093A53C82423ED7FCCD9F687 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5DB3F50F9D50D2F2419F11F3 /* iOS-Swift-IntentExtension */; - targetProxy = 72DFB8179857ED959AC59C6A /* PBXContainerItemProxy */; - }; - 0F77B63056CDE5F11DB7B308 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = C97FF7E8B34B54F1E1DA596E /* iOS-Swift-ShareExtension */; - targetProxy = 75965192E3621CC601EFF76B /* PBXContainerItemProxy */; - }; - 2C80E4272103ACF479F01069 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = DA6BA1590AD71A7A6A923C4B /* PBXContainerItemProxy */; - }; - 2D7D11D434971D3FC80A1BDD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = 3794B0D55C8C4C1EED674F88 /* PBXContainerItemProxy */; - }; - 2EA099CC97C081E5C6439B77 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = 775F3A04C531E62306E14BB7 /* PBXContainerItemProxy */; - }; - 34983C58FB741BCAC4C9C524 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = 03BA5422F1491741DA3647F7 /* PBXContainerItemProxy */; - }; - 51D0CA2A94B53DD17EAF27AC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleUITestShared; - targetProxy = D1E006385DDD8804E84EC0DC /* PBXContainerItemProxy */; - }; - 79FB95E9457D617F3FAA2559 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySwiftLog; - targetProxy = 1B88005472B5B3754024AD7E /* PBXContainerItemProxy */; - }; - 8D8992681BC508C7B3BD1E24 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = E19C531E2112D2306BFFA92E /* PBXContainerItemProxy */; - }; - 8DE49BBCA6E0FA936BDFF05F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5B05A31890F168B2E9851B98 /* iOS-Swift-ActionExtension */; - targetProxy = 9552257639CAECB7DF7594E3 /* PBXContainerItemProxy */; - }; - 9C2E65AC9E01CF415B661B3F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = F5CD4DB6DC0E2D28F5163B58 /* PBXContainerItemProxy */; - }; - AB0E2453795562ED9191BAF4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = 04CE818424E4CFEDFC8500F4 /* PBXContainerItemProxy */; - }; - AEE4597AC7E15080557A2942 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = 9D37C5F7AF5F567F9441DD93 /* PBXContainerItemProxy */; - }; - B2244FCCBB452CE123C3DE37 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = CE5CCA44021F9D3D46E8199B /* iOS-SwiftClip */; - targetProxy = AD07460C7C7038E387A15BF7 /* PBXContainerItemProxy */; - }; - C8D081DB21037550990DD833 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleUITestShared; - targetProxy = 9AA1C80EDE26555EB9D13AA5 /* PBXContainerItemProxy */; - }; - EC1A2A52557D0A7B4A3E5719 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = 10A231A271C7F2919AB6621D /* PBXContainerItemProxy */; - }; - F2854F7C5A5C66775ED37569 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = 4AC768F9036A08D866F138F7 /* PBXContainerItemProxy */; - }; - FBA1B347B47514CFF2F45BD3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = 785078A2EEA4E27293734411 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 37FB718FAF4DE8DD3FA44C14 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 58879E907B39D86CB12A4F4C /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 62B078E53E402797EE060833 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - F94A74A23ED1C3E0778D26AC /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; - 6E0C905647A1A0897FC57FFC /* MainInterface.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 594C6C143D646B48D67B610C /* Base */, - ); - name = MainInterface.storyboard; - sourceTree = ""; - }; - 8813728C87CB00CBB907AF8D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 6960C6B2C93BD6A655026C18 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - E702320CD964146FB4A53460 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - A6CFF1E7A99769E83BA0E317 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 03EF5780FF9C4096A498063C /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; - }; - name = Debug; - }; - 0603EDA2A6363CE44F98DBFA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; - }; - name = Debug; - }; - 12DB1C420184E6CFC71402EF /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 1D0FF2A57302565A4EEE7A96 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "DEBUG=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 2E311F87C852CC8169215E77 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - }; - name = Release; - }; - 2F3847DE42731503BFB7BD4F /* TestCI */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; - }; - name = TestCI; - }; - 3076D19C7578D8C69A4F1D83 /* TestCI */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; - }; - name = TestCI; - }; - 30B9C1E049B7D00AF5D122D0 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift/Info.plist"; - }; - name = Debug; - }; - 42AE3A064520696823E08EAF /* TestCI */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "DEBUG=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = TestCI; - }; - 51CE3FB4A491271D32CE1194 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; - }; - name = Debug; - }; - 57D816856D1C4B9C79A7BB5E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift/Info.plist"; - }; - name = Release; - }; - 5CB977BB83F8D1AF13806DFB /* TestCI */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift/Info.plist"; - }; - name = TestCI; - }; - 67AC019A66E6FD9CC7008064 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; - }; - name = Release; - }; - 7075F87F0974D9668FA7FBB7 /* Test */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "DEBUG=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = auto; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Test; - }; - 73565978072E4E170A106E6D /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - }; - name = Test; - }; - 7A68F6F06C510AADEB3A5DF3 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5BE4ABE21383962A011E3860 /* iOS-Swift.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift/Info.plist"; - }; - name = Test; - }; - 836370D0F2166EEA6F80D458 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; - }; - name = Release; - }; - 847404833AFC7157FBB42B3B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; - }; - name = Debug; - }; - 85E3FB119BB7FFCB7C9845AD /* TestCI */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; - }; - name = TestCI; - }; - 8B372BCEE3570A3FEE007F79 /* TestCI */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - }; - name = TestCI; - }; - A6714FEC7693BA5914721161 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; - }; - name = Test; - }; - AD931B228F7B96BDD03DFC50 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B24580901EF7733F1B03B44 /* iOS-Swift-ShareExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ShareExtension/Resources/Info.plist"; - }; - name = Debug; - }; - C93ABCA3F707A22CF2B80D37 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; - }; - name = Test; - }; - CEDC46EAC20899B87ADF2B0E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; - }; - name = Debug; - }; - D1FD32C91A80F301770F4D7A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; - }; - name = Release; - }; - D4E43A95213D3E1060600EFD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 49D00325763455DB94436C6E /* iOS-Swift-ActionExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-ActionExtension/Resources/Info.plist"; - }; - name = Release; - }; - E4925EB74DE5C38CAE8F0052 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; - }; - name = Test; - }; - EB0DC80A6D6C8E6CF5FBB1BB /* TestCI */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; - }; - name = TestCI; - }; - ECA40BDCE850D34C15E2EAB5 /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 15C104D665E62308894E2A3B /* iOS-SwiftClip.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftClip/Info.plist"; - }; - name = Test; - }; - F4115300078B99E3EF0221FA /* Test */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 65C5531F29280E37333FE180 /* iOS-Benchmarking.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Benchmarking/Info.plist"; - }; - name = Test; - }; - F47B8270A8A659D5E9551720 /* TestCI */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 23A58E2CDED64E05B5C8BB92 /* iOS-Swift-IntentExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-Swift-IntentExtension/Resources/Info.plist"; - }; - name = TestCI; - }; - F989314BCBDB0319AB3E8B15 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BA815EDE87FD977D9551AD8B /* iOS-Swift-UITests.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = "iOS-Swift-UITests/Info.plist"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 05AF3816B4C29EBF970365A6 /* Build configuration list for PBXNativeTarget "iOS-Swift-UITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CEDC46EAC20899B87ADF2B0E /* Debug */, - F989314BCBDB0319AB3E8B15 /* Release */, - A6714FEC7693BA5914721161 /* Test */, - 3076D19C7578D8C69A4F1D83 /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 1F756FBE7E9904EAF8AAE794 /* Build configuration list for PBXNativeTarget "iOS-Swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 30B9C1E049B7D00AF5D122D0 /* Debug */, - 57D816856D1C4B9C79A7BB5E /* Release */, - 7A68F6F06C510AADEB3A5DF3 /* Test */, - 5CB977BB83F8D1AF13806DFB /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 3F6AFD503E452D66859993DB /* Build configuration list for PBXNativeTarget "iOS-SwiftClip" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 51CE3FB4A491271D32CE1194 /* Debug */, - 67AC019A66E6FD9CC7008064 /* Release */, - ECA40BDCE850D34C15E2EAB5 /* Test */, - 85E3FB119BB7FFCB7C9845AD /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 591AC781E512BDAEE308665C /* Build configuration list for PBXNativeTarget "iOS-Benchmarking" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0603EDA2A6363CE44F98DBFA /* Debug */, - 836370D0F2166EEA6F80D458 /* Release */, - F4115300078B99E3EF0221FA /* Test */, - EB0DC80A6D6C8E6CF5FBB1BB /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 7C57D8C98BDDFD260E351845 /* Build configuration list for PBXNativeTarget "iOS-Swift-ShareExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AD931B228F7B96BDD03DFC50 /* Debug */, - 2E311F87C852CC8169215E77 /* Release */, - 73565978072E4E170A106E6D /* Test */, - 8B372BCEE3570A3FEE007F79 /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 8333F40D783D1FE5CA8D3C42 /* Build configuration list for PBXNativeTarget "iOS-Swift-ActionExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 03EF5780FF9C4096A498063C /* Debug */, - D4E43A95213D3E1060600EFD /* Release */, - C93ABCA3F707A22CF2B80D37 /* Test */, - 2F3847DE42731503BFB7BD4F /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 8F88BD7F2CAFDFA26054C0F1 /* Build configuration list for PBXProject "iOS-Swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1D0FF2A57302565A4EEE7A96 /* Debug */, - 12DB1C420184E6CFC71402EF /* Release */, - 7075F87F0974D9668FA7FBB7 /* Test */, - 42AE3A064520696823E08EAF /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - E8C9FFFB0089D54158DD2186 /* Build configuration list for PBXNativeTarget "iOS-Swift-IntentExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 847404833AFC7157FBB42B3B /* Debug */, - D1FD32C91A80F301770F4D7A /* Release */, - E4925EB74DE5C38CAE8F0052 /* Test */, - F47B8270A8A659D5E9551720 /* TestCI */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; -/* End XCConfigurationList section */ - -/* Begin XCVersionGroup section */ - FA6FCAF423D635FDA9DBBFC1 /* SentryData.xcdatamodeld */ = { - isa = XCVersionGroup; - children = ( - E405B26D12528D3D4D0F5ECD /* Person.xcdatamodel */, - ); - currentVersion = E405B26D12528D3D4D0F5ECD /* Person.xcdatamodel */; - path = SentryData.xcdatamodeld; - sourceTree = ""; - versionGroupType = wrapper.xcdatamodel; - }; -/* End XCVersionGroup section */ - }; - rootObject = 3A77435E8E76EAE86C6ABE7F /* Project object */; -} diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254..00000000000 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme deleted file mode 100644 index 2b81b73a9a2..00000000000 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Benchmarking.xcscheme +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme deleted file mode 100644 index c2068aaad1b..00000000000 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ActionExtension.xcscheme +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme deleted file mode 100644 index f7be079a2f7..00000000000 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-IntentExtension.xcscheme +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme deleted file mode 100644 index 6fad3d597da..00000000000 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift-ShareExtension.xcscheme +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme b/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme deleted file mode 100644 index 8ecbeaddb4f..00000000000 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/xcshareddata/xcschemes/iOS-Swift.xcscheme +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 00bb563ff3618fcf3246501f52f38f706d93ece0 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 13:52:50 +0100 Subject: [PATCH 11/19] removed project files --- .gitignore | 1 + .../Shared/Headers/SentryExposure.h | 8 - .../project.pbxproj | 560 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/WorkspaceSettings.xcsettings | 10 - .../xcschemes/iOS-SwiftUI-Widgets.xcscheme | 107 ---- 6 files changed, 1 insertion(+), 692 deletions(-) delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme diff --git a/.gitignore b/.gitignore index 9e3ff1c66ae..140bb8bf791 100644 --- a/.gitignore +++ b/.gitignore @@ -87,6 +87,7 @@ Samples/iOS-ObjectiveC/iOS-ObjectiveC.xcodeproj Samples/iOS-Swift/iOS-Swift.xcodeproj Samples/iOS-Swift6/iOS-Swift6.xcodeproj Samples/iOS-SwiftUI/iOS-SwiftUI.xcodeproj +Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj Samples/iOS15-SwiftUI/iOS15-SwiftUI.xcodeproj Samples/macOS-Swift/macOS-Swift.xcodeproj Samples/macOS-SwiftUI/macOS-SwiftUI.xcodeproj diff --git a/Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h index 9fe3467e51c..f1dde7f4639 100644 --- a/Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h +++ b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/SentryExposure.h @@ -3,16 +3,8 @@ NS_ASSUME_NONNULL_BEGIN -@interface SentryHubInternal : NSObject - -- (NSArray *)trimmedInstalledIntegrationNames; - -@end - @interface SentrySDKInternal : NSObject -//+ (SentryHubInternal *)currentHub; - + (NSArray *)trimmedInstalledIntegrationNames; @end diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj deleted file mode 100644 index 6291e89df75..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj +++ /dev/null @@ -1,560 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */; }; - 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; - 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */; }; - 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */; }; - 69E32D769D5ADB4C398A9F10 /* LiveActivityConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB90A09085EE86C6FFA7538 /* LiveActivityConfiguration.swift */; }; - 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA164E21124BB974CA55E4A /* MainApp.swift */; }; - 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */; }; - AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */; }; - C851C32E71DD591EBA710757 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043F374A027EDE446D99A7D5 /* ContentView.swift */; }; - CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B88304703D152A6C3A6249F8 /* Assets.xcassets */; }; - CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */; }; - D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; - DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 206F31F59F2C041805232A2F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D6B98D3A58C262EE28C50B9E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A1C22273766A4B9F99FB9F6; - remoteInfo = "iOS-SwiftUI-Widgets-WidgetExtension"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */, - ); - name = "Embed Foundation Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets-WidgetExtension.xcconfig"; sourceTree = ""; }; - 043F374A027EDE446D99A7D5 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidget.swift; sourceTree = ""; }; - 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets.xcconfig"; sourceTree = ""; }; - 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsObjC.xcconfig; sourceTree = ""; }; - 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AssetCatalog.xcconfig; sourceTree = ""; }; - 1C10E740433EC0862705BD2B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 1E1192AED22950F7264B3282 /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; - 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetBundle.swift; sourceTree = ""; }; - 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-SwiftUI-Widgets.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarnings.xcconfig; sourceTree = ""; }; - 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangLanguage.xcconfig; sourceTree = ""; }; - 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetControl.swift; sourceTree = ""; }; - 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityAttributes.swift; sourceTree = ""; }; - 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; - 51774442E9250743D901AE0A /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; - 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; - 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsCpp.xcconfig; sourceTree = ""; }; - 5C379869BA6B600711B514AA /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; }; - 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; }; - 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; - 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-Swift-Widget-Bridging-Header.h"; sourceTree = ""; }; - 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = BuildOptions.xcconfig; sourceTree = ""; }; - 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangAnalyzer.xcconfig; sourceTree = ""; }; - 963761122A7CD280F6EC496C /* SentryExposure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryExposure.h; sourceTree = ""; }; - 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangCppLanguage.xcconfig; sourceTree = ""; }; - 9CB90A09085EE86C6FFA7538 /* LiveActivityConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityConfiguration.swift; sourceTree = ""; }; - B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleConfigurationAppIntent.swift; sourceTree = ""; }; - B88304703D152A6C3A6249F8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "iOS-SwiftUI-Widgets.yml"; sourceTree = ""; }; - C7A32DBA6D6A3A3014F75EBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangPreprocessing.xcconfig; sourceTree = ""; }; - CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-SwiftUI-Widgets-WidgetExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityView.swift; sourceTree = ""; }; - DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SearchPaths.xcconfig; sourceTree = ""; }; - DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Swift.xcconfig; sourceTree = ""; }; - E4689ECE0E21A2872542D677 /* Linking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Linking.xcconfig; sourceTree = ""; }; - EDA164E21124BB974CA55E4A /* MainApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainApp.swift; sourceTree = ""; }; - F081F749B3F69ED90E1641EE /* _Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = _Common.xcconfig; sourceTree = ""; }; - F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangModules.xcconfig; sourceTree = ""; }; - FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangObjCLanguage.xcconfig; sourceTree = ""; }; - FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeGeneration.xcconfig; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXGroup section */ - 12412823A76950EA3A6F4A1E /* Config */ = { - isa = PBXGroup; - children = ( - F081F749B3F69ED90E1641EE /* _Common.xcconfig */, - 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */, - 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */, - 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */, - 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */, - 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */, - 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */, - F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */, - FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */, - CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */, - 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */, - 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */, - 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */, - FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */, - 5C379869BA6B600711B514AA /* Deployment.xcconfig */, - E4689ECE0E21A2872542D677 /* Linking.xcconfig */, - 51774442E9250743D901AE0A /* Localization.xcconfig */, - 1E1192AED22950F7264B3282 /* Metal.xcconfig */, - 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */, - DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */, - 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */, - DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */, - ); - name = Config; - path = ../Shared/Config; - sourceTree = ""; - }; - 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */ = { - isa = PBXGroup; - children = ( - F351AB0C79B4F4A26405F7B8 /* Resources */, - 37F2198026D3702138A1C8FA /* Sources */, - ); - path = "iOS-SwiftUI-Widgets"; - sourceTree = ""; - }; - 37F2198026D3702138A1C8FA /* Sources */ = { - isa = PBXGroup; - children = ( - 043F374A027EDE446D99A7D5 /* ContentView.swift */, - D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */, - EDA164E21124BB974CA55E4A /* MainApp.swift */, - ); - path = Sources; - sourceTree = ""; - }; - 5BCF46669C95D0C5AA64EB32 /* Headers */ = { - isa = PBXGroup; - children = ( - 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */, - 963761122A7CD280F6EC496C /* SentryExposure.h */, - ); - path = Headers; - sourceTree = ""; - }; - 64610524F65A780DF9BFB212 /* Products */ = { - isa = PBXGroup; - children = ( - CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */, - 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */, - ); - name = Products; - sourceTree = ""; - }; - 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */ = { - isa = PBXGroup; - children = ( - 8F7F6649D6F4D4D09A89EDCF /* Resources */, - 784318D35811F9E6AA983341 /* Sources */, - ); - path = "iOS-SwiftUI-Widgets-WidgetExtension"; - sourceTree = ""; - }; - 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */ = { - isa = PBXGroup; - children = ( - 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */, - 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */, - ); - name = "iOS-SwiftUI-Widgets"; - path = .; - sourceTree = ""; - }; - 784318D35811F9E6AA983341 /* Sources */ = { - isa = PBXGroup; - children = ( - 9CB90A09085EE86C6FFA7538 /* LiveActivityConfiguration.swift */, - B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */, - 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */, - 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */, - 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */, - ); - path = Sources; - sourceTree = ""; - }; - 8F7F6649D6F4D4D09A89EDCF /* Resources */ = { - isa = PBXGroup; - children = ( - DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */, - C7A32DBA6D6A3A3014F75EBF /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - 97261E177AEFD1FBF9AFD26C /* Data */ = { - isa = PBXGroup; - children = ( - 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */, - ); - path = Data; - sourceTree = ""; - }; - B067CD4E68396FF941842D6F /* Shared */ = { - isa = PBXGroup; - children = ( - 97261E177AEFD1FBF9AFD26C /* Data */, - 5BCF46669C95D0C5AA64EB32 /* Headers */, - ); - path = Shared; - sourceTree = ""; - }; - B881B0C8A980D4462DB07732 = { - isa = PBXGroup; - children = ( - B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */, - 12412823A76950EA3A6F4A1E /* Config */, - 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */, - 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */, - 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */, - B067CD4E68396FF941842D6F /* Shared */, - 64610524F65A780DF9BFB212 /* Products */, - ); - sourceTree = ""; - }; - F351AB0C79B4F4A26405F7B8 /* Resources */ = { - isa = PBXGroup; - children = ( - B88304703D152A6C3A6249F8 /* Assets.xcassets */, - 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */, - 1C10E740433EC0862705BD2B /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */; - buildPhases = ( - 79071996082F166983FE9D74 /* Sources */, - B70BBFEAC3F6528B1EBF1FF7 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "iOS-SwiftUI-Widgets-WidgetExtension"; - packageProductDependencies = ( - ); - productName = "iOS-SwiftUI-Widgets-WidgetExtension"; - productReference = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; - 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */ = { - isa = PBXNativeTarget; - buildConfigurationList = 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */; - buildPhases = ( - DC38EC959ED2BB986CE38BD2 /* Sources */, - 769D4ACB4830B4AE8EE3EF73 /* Resources */, - 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */, - ); - buildRules = ( - ); - dependencies = ( - A2F9A537196C85E11DA332B6 /* PBXTargetDependency */, - ); - name = "iOS-SwiftUI-Widgets"; - packageProductDependencies = ( - ); - productName = "iOS-SwiftUI-Widgets"; - productReference = 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D6B98D3A58C262EE28C50B9E /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; - TargetAttributes = { - 5A1C22273766A4B9F99FB9F6 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - 8E239B450D0DE382D706B6B7 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = B881B0C8A980D4462DB07732; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */, - 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 769D4ACB4830B4AE8EE3EF73 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B70BBFEAC3F6528B1EBF1FF7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 79071996082F166983FE9D74 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */, - 69E32D769D5ADB4C398A9F10 /* LiveActivityConfiguration.swift in Sources */, - 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */, - AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */, - 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */, - 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC38EC959ED2BB986CE38BD2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C851C32E71DD591EBA710757 /* ContentView.swift in Sources */, - D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */, - CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */, - 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - A2F9A537196C85E11DA332B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */; - targetProxy = 206F31F59F2C041805232A2F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 180D348244D8D9212C67AE1A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; - }; - name = Release; - }; - 1B9F865ECE37130BDBB5A023 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; - }; - name = Debug; - }; - 221CEBB496C7E9ADB264FBDE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; - }; - name = Release; - }; - 6CA1E23D2E331683FA217276 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "DEBUG=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 761A2113671B4BD4CF6F2759 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 9CE8FF7BC1499AAC7538B778 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; - buildSettings = { - INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; - }; - name = Debug; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6CA1E23D2E331683FA217276 /* Debug */, - 761A2113671B4BD4CF6F2759 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1B9F865ECE37130BDBB5A023 /* Debug */, - 180D348244D8D9212C67AE1A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9CE8FF7BC1499AAC7538B778 /* Debug */, - 221CEBB496C7E9ADB264FBDE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; -/* End XCConfigurationList section */ - }; - rootObject = D6B98D3A58C262EE28C50B9E /* Project object */; -} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 280eff1f10b..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,10 +0,0 @@ - - - - - BuildSystemType - Latest - DerivedDataLocationStyle - Default - - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme deleted file mode 100644 index fea510db15a..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 1107338b2ec79d4a7da2b9a13136c6f1fb6b5b35 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 15:11:56 +0100 Subject: [PATCH 12/19] wip --- .../Sources/LiveActivityConfiguration.swift | 3 +- .../Sources/SampleWidget.swift | 25 ++++++++++------ .../Sources/SampleWidgetControl.swift | 3 +- .../iOS-SwiftUI-Widgets.yml | 30 +++++++++++++++++++ 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift index 3560c1c218f..1e3f624817e 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift @@ -1,5 +1,6 @@ import ActivityKit import Sentry +import SentrySampleShared import SwiftUI import WidgetKit @@ -76,7 +77,7 @@ struct LiveActivityConfiguration: Widget { return } SentrySDK.start { options in - options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" + options.dsn = SentrySDKWrapper.defaultDSN options.debug = true options.enableAppHangTracking = true } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift index aa6f0cbf3c7..a7a8197f39f 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift @@ -1,4 +1,5 @@ @_spi(Private) @testable import Sentry +import SentrySampleShared import SwiftUI import WidgetKit @@ -17,25 +18,31 @@ fileprivate struct SampleWidgetEntryView: View { var entry: Provider.Entry var body: some View { - let anrInstalled = SentrySDK.isEnabled && - SentrySDKInternal.trimmedInstalledIntegrationNames() - .contains("ANRTracking") - VStack(spacing: 8) { Text("Sentry") .font(.headline) - Text("ANR Tracking:") - .font(.caption2) - Text(anrInstalled ? "❌ Enabled" : "✅ Disabled") + Text("SDK Enabled? \(isSentryEnabled ? "✅" : "❌")") + .font(.caption) + .foregroundColor(isSentryEnabled ? .green : .red) + .bold() + Text("ANR Disabled? \(isANRInstalled ? "❌" : "✅")") .font(.caption) - .foregroundColor(anrInstalled ? .red : .green) + .foregroundColor(isANRInstalled ? .red : .green) .bold() Text(entry.date, style: .time) .font(.caption2) } } + + var isANRInstalled: Bool { + return isSentryEnabled && SentrySDKInternal.trimmedInstalledIntegrationNames().contains("ANRTracking") + } + + var isSentryEnabled: Bool { + SentrySDK.isEnabled + } } private struct Provider: AppIntentTimelineProvider { @@ -61,7 +68,7 @@ private struct Provider: AppIntentTimelineProvider { return } SentrySDK.start { options in - options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" + options.dsn = SentrySDKWrapper.defaultDSN options.debug = true options.enableAppHangTracking = true } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift index d9f4dfc370a..47af99a198b 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift @@ -1,5 +1,6 @@ import AppIntents import Sentry +import SentrySampleShared import SwiftUI import WidgetKit @@ -15,7 +16,7 @@ struct SampleWidgetControl: ControlWidget { return } SentrySDK.start { options in - options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" + options.dsn = SentrySDKWrapper.defaultDSN options.debug = true options.enableAppHangTracking = true } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml index 6caaaaae4c7..d5a514eada7 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml @@ -11,6 +11,11 @@ configs: fileGroups: - ../Shared/Config - iOS-SwiftUI-Widgets.yml +projectReferences: + Sentry: + path: ../../Sentry.xcodeproj + SentrySampleShared: + path: ../SentrySampleShared/SentrySampleShared.xcodeproj options: bundleIdPrefix: io.sentry.sentry-cocoa.samples targets: @@ -22,6 +27,8 @@ targets: - iOS-SwiftUI-Widgets - Shared dependencies: + - target: Sentry/Sentry + - target: SentrySampleShared/SentrySampleShared - target: iOS-SwiftUI-Widgets-WidgetExtension configFiles: Debug: iOS-SwiftUI-Widgets.xcconfig @@ -33,6 +40,9 @@ targets: sources: - iOS-SwiftUI-Widgets-WidgetExtension - Shared + dependencies: + - target: Sentry/Sentry + - target: SentrySampleShared/SentrySampleShared configFiles: Debug: iOS-SwiftUI-Widgets-WidgetExtension.xcconfig Release: iOS-SwiftUI-Widgets-WidgetExtension.xcconfig @@ -48,3 +58,23 @@ schemes: config: Release archive: config: Release + iOS-SwiftUI-Widgets-WidgetExtension: + build: + targets: + iOS-SwiftUI-Widgets: all + iOS-SwiftUI-Widgets-WidgetExtension: all + run: + config: Debug + askForAppToLaunch: true + environmentVariables: + _XCWidgetKind: SampleWidget + iOS-SwiftUI-Widgets-WidgetControl: + build: + targets: + iOS-SwiftUI-Widgets: all + iOS-SwiftUI-Widgets-WidgetExtension: all + run: + config: Debug + askForAppToLaunch: true + environmentVariables: + _XCWidgetKind: SampleWidgetControl From 092c5bcf5b33bcfb07dba8989ea8d2356ae50005 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 19:20:48 +0100 Subject: [PATCH 13/19] refactored live activity widget into separate target --- .gitignore | 2 +- .../iOS-Swift/iOS-Swift.entitlements | 2 + .../Shared/Data/LiveActivityAttributes.swift | 2 +- .../iOS-Swift-Widget-Bridging-Header.h | 1 - .../iOS-SwiftUI-Widgets-LiveActivity.xcconfig | 34 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 35 + .../Resources/Assets.xcassets/Contents.json | 6 + .../WidgetBackground.colorset/Contents.json | 11 + .../Resources/Entitlements.entitlements | 8 + .../Resources/Info.plist | 31 + .../Sources/LiveActivityBundle.swift | 9 + .../Sources/LiveActivityConfiguration.swift | 1 - .../Sources/LiveActivityWidget.swift | 57 ++ ...S-SwiftUI-Widgets-WidgetExtension.xcconfig | 7 +- .../Resources/Entitlements.entitlements | 8 + .../Resources/Info.plist | 4 + .../Sources/SampleWidget.swift | 8 +- .../Sources/SampleWidgetBundle.swift | 1 - .../Sources/SampleWidgetControl.swift | 6 +- .../iOS-SwiftUI-Widgets.xcconfig | 1 - .../project.pbxproj | 892 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/WorkspaceSettings.xcsettings | 10 + .../iOS-SwiftUI-Widgets-LiveActivity.xcscheme | 121 +++ ...iOS-SwiftUI-Widgets-WidgetControl.xcscheme | 113 +++ ...S-SwiftUI-Widgets-WidgetExtension.xcscheme | 113 +++ .../xcschemes/iOS-SwiftUI-Widgets.xcscheme | 121 +++ .../iOS-SwiftUI-Widgets.yml | 33 + .../Resources/Entitlements.entitlements | 2 - .../iOS-SwiftUI-Widgets/Resources/Info.plist | 4 + .../Sources/ContentView.swift | 11 - .../Sources/LiveActivityView.swift | 165 +--- .../Sources/LiveActivityViewModel.swift | 157 +++ .../iOS-SwiftUI-Widgets/Sources/MainApp.swift | 18 +- 35 files changed, 1863 insertions(+), 149 deletions(-) create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity.xcconfig create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityBundle.swift rename Samples/iOS-SwiftUI-Widgets/{iOS-SwiftUI-Widgets-WidgetExtension => iOS-SwiftUI-Widgets-LiveActivity}/Sources/LiveActivityConfiguration.swift (98%) create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift create mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift diff --git a/.gitignore b/.gitignore index 140bb8bf791..ea727e47999 100644 --- a/.gitignore +++ b/.gitignore @@ -87,7 +87,7 @@ Samples/iOS-ObjectiveC/iOS-ObjectiveC.xcodeproj Samples/iOS-Swift/iOS-Swift.xcodeproj Samples/iOS-Swift6/iOS-Swift6.xcodeproj Samples/iOS-SwiftUI/iOS-SwiftUI.xcodeproj -Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj +# Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj Samples/iOS15-SwiftUI/iOS15-SwiftUI.xcodeproj Samples/macOS-Swift/macOS-Swift.xcodeproj Samples/macOS-SwiftUI/macOS-SwiftUI.xcodeproj diff --git a/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements b/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements index 7fc8dd36b96..bda9be410a0 100644 --- a/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements +++ b/Samples/iOS-Swift/iOS-Swift/iOS-Swift.entitlements @@ -2,6 +2,8 @@ + aps-environment + development com.apple.developer.siri com.apple.security.app-sandbox diff --git a/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift b/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift index 74944ef4d41..53c9590688a 100644 --- a/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift +++ b/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift @@ -13,4 +13,4 @@ struct LiveActivityAttributes: ActivityAttributes { let id: String } -#endif +#endif // canImport(ActivityKit) diff --git a/Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h index 99ea01c7b10..c88c075d563 100644 --- a/Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h +++ b/Samples/iOS-SwiftUI-Widgets/Shared/Headers/iOS-Swift-Widget-Bridging-Header.h @@ -1,2 +1 @@ #import "SentryExposure.h" -#import diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity.xcconfig b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity.xcconfig new file mode 100644 index 00000000000..432c73d3907 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity.xcconfig @@ -0,0 +1,34 @@ +#include "../Shared/Config/_Common.xcconfig" + +PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sentry-cocoa.samples.iOS-SwiftUI-Widgets.LiveActivity +INFOPLIST_FILE = iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist +CODE_SIGN_ENTITLEMENTS = iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements + +GENERATE_INFOPLIST_FILE = NO + +IPHONEOS_DEPLOYMENT_TARGET = 18.0 +TARGETED_DEVICE_FAMILY = 1,2 + +CODE_SIGN_STYLE = Manual + +SWIFT_OBJC_BRIDGING_HEADER = Shared/Headers/iOS-Swift-Widget-Bridging-Header.h + +SUPPORTED_PLATFORMS = iphoneos iphonesimulator +SUPPORTS_MACCATALYST = NO + +ENABLE_USER_SCRIPT_SANDBOXING = YES + +// Force rebuild when main app changes - helps with incremental build issues +ALWAYS_SEARCH_USER_PATHS = NO + +// Asset Catalog +ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES +ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor +ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground + +// Swift Settings +SWIFT_VERSION = 5.0 + +LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @executable_path/../Frameworks @executable_path/../../Frameworks +STRING_CATALOG_GENERATE_SYMBOLS = YES +SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000000..0afb3cf0eec --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors": [ + { + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..c70a5bff185 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,35 @@ +{ + "images": [ + { + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "dark" + } + ], + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + }, + { + "appearances": [ + { + "appearance": "luminosity", + "value": "tinted" + } + ], + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/Contents.json new file mode 100644 index 00000000000..74d6a722cf3 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 00000000000..0afb3cf0eec --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors": [ + { + "idiom": "universal" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements new file mode 100644 index 00000000000..2eb7e333a6f --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.application-groups + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist new file mode 100644 index 00000000000..26511c011b9 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Live Activity + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + NSHumanReadableCopyright + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityBundle.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityBundle.swift new file mode 100644 index 00000000000..9d86c007b6f --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityBundle.swift @@ -0,0 +1,9 @@ +import SwiftUI +import WidgetKit + +@main +struct LiveActivityBundle: WidgetBundle { + var body: some Widget { + LiveActivityWidget() + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityConfiguration.swift similarity index 98% rename from Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift rename to Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityConfiguration.swift index 1e3f624817e..de47d0b43ad 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/LiveActivityConfiguration.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityConfiguration.swift @@ -31,7 +31,6 @@ struct LiveActivityConfiguration: Widget { .activityBackgroundTint(Color.blue.opacity(0.1)) } dynamicIsland: { context in DynamicIsland { - // Expanded view when tapped DynamicIslandExpandedRegion(.leading) { VStack(alignment: .leading, spacing: 4) { Text("Sentry") diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift new file mode 100644 index 00000000000..b486758bc79 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift @@ -0,0 +1,57 @@ +import ActivityKit +import Sentry +import SentrySampleShared +import SwiftUI +import WidgetKit + +struct LiveActivityWidget: Widget { + init() { + setupSentrySDK() + } + + private func setupSentrySDK() { + guard !SentrySDK.isEnabled else { + return + } + SentrySDK.start { options in + options.dsn = SentrySDKWrapper.defaultDSN + options.debug = true + options.enableAppHangTracking = true + } + } + + var body: some WidgetConfiguration { + ActivityConfiguration(for: LiveActivityAttributes.self) { context in + // Lock screen/banner UI goes here + VStack { + Text("Hello \(context.state.anrTrackingStatus)") + } + .activityBackgroundTint(Color.cyan) + .activitySystemActionForegroundColor(Color.black) + + } dynamicIsland: { context in + DynamicIsland { + // Expanded UI goes here. Compose the expanded UI through + // various regions, like leading/trailing/center/bottom + DynamicIslandExpandedRegion(.leading) { + Text("Leading") + } + DynamicIslandExpandedRegion(.trailing) { + Text("Trailing") + } + DynamicIslandExpandedRegion(.bottom) { + Text("Bottom \(context.state.anrTrackingStatus)") + // more content + } + } compactLeading: { + Text("L") + } compactTrailing: { + Text("T \(context.state.anrTrackingStatus.prefix(1))") + } minimal: { + Text(context.state.anrTrackingStatus) + } + .widgetURL(URL(string: "http://www.apple.com")) + .keylineTint(Color.red) + } + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig index 2e3572b9757..58c8bb462d3 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension.xcconfig @@ -2,15 +2,13 @@ PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sentry-cocoa.samples.iOS-SwiftUI-Widgets.Widget INFOPLIST_FILE = iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist +CODE_SIGN_ENTITLEMENTS = iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements GENERATE_INFOPLIST_FILE = NO IPHONEOS_DEPLOYMENT_TARGET = 18.0 TARGETED_DEVICE_FAMILY = 1,2 -SKIP_INSTALL = YES -SWIFT_EMIT_LOC_STRINGS = YES - CODE_SIGN_STYLE = Manual SWIFT_OBJC_BRIDGING_HEADER = Shared/Headers/iOS-Swift-Widget-Bridging-Header.h @@ -20,6 +18,9 @@ SUPPORTS_MACCATALYST = NO ENABLE_USER_SCRIPT_SANDBOXING = YES +// Force rebuild when main app changes - helps with incremental build issues +ALWAYS_SEARCH_USER_PATHS = NO + // Asset Catalog ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements new file mode 100644 index 00000000000..2eb7e333a6f --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.application-groups + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist index 9e7ecf658af..0d0089fd4ca 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + iOS-SwiftUI-Widget CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -23,5 +25,7 @@ NSExtensionPointIdentifier com.apple.widgetkit-extension + NSHumanReadableCopyright + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift index a7a8197f39f..13eb6b325df 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift @@ -1,4 +1,4 @@ -@_spi(Private) @testable import Sentry +import Sentry import SentrySampleShared import SwiftUI import WidgetKit @@ -64,12 +64,18 @@ private struct Provider: AppIntentTimelineProvider { } private func setupSentrySDK() { + // Prevent double initialization - SentrySDK.start() can be called multiple times + // but we want to avoid unnecessary re-initialization guard !SentrySDK.isEnabled else { return } + + // For this extension we need a specific configuration set, therefore we do not use the shared sample initializer SentrySDK.start { options in options.dsn = SentrySDKWrapper.defaultDSN options.debug = true + + // App Hang Tracking must be enabled, but should not be installed options.enableAppHangTracking = true } } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift index 0353d5cf882..a9d653e1355 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetBundle.swift @@ -6,6 +6,5 @@ struct SampleWidgetBundle: WidgetBundle { var body: some Widget { SampleWidget() SampleWidgetControl() - LiveActivityConfiguration() } } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift index 47af99a198b..4e5292ce5fe 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidgetControl.swift @@ -50,10 +50,9 @@ extension SampleWidgetControl { func currentValue(configuration: ANRConfiguration) async throws -> Value { // Check if ANR tracking is installed - let anrInstalled = SentrySDK.isEnabled && - SentrySDKInternal.trimmedInstalledIntegrationNames() + let anrInstalled = SentrySDK.isEnabled && SentrySDKInternal.trimmedInstalledIntegrationNames() .contains("ANRTracking") - + // isOn = true means ANR is disabled (good for widgets) // isOn = false means ANR is enabled (bad for widgets) return Value(isOn: !anrInstalled) @@ -72,7 +71,6 @@ struct RefreshStatusIntent: AppIntent { init() {} func perform() async throws -> some IntentResult { - // Trigger widget refresh to show updated status await WidgetCenter.shared.reloadTimelines(ofKind: SampleWidgetControl.kind) return .result() } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig index 8080bd2f6fc..b1d8579510c 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcconfig @@ -1,7 +1,6 @@ #include "../Shared/Config/_Common.xcconfig" PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sentry-cocoa.samples.iOS-SwiftUI-Widgets -INFOPLIST_FILE = iOS-SwiftUI-Widgets/Resources/Info.plist CODE_SIGN_ENTITLEMENTS = iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements GENERATE_INFOPLIST_FILE = YES diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..75986892c4d --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj @@ -0,0 +1,892 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 00A2B42B73A20D0E31281668 /* Sentry-iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 00EBFD85C8FF0BFE4AE51444 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; }; + 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */; }; + 13023A9E33DCCAA00AE04919 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; + 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; + 221EDE644A6F0F0721AEBB6B /* LiveActivityWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */; }; + 2BB0F033107EE1C3AA8BB113 /* LiveActivityViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809F2A3935C158DCDB81C66F /* LiveActivityViewModel.swift */; }; + 2ED227B9E061B91DAF58D7BF /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; }; + 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */; }; + 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */; }; + 4D81FA541F8607E47AB1C935 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; }; + 76E1B2896321F787F12BE2C3 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; }; + 82492D9C0F314B1CFA96B93C /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; }; + 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA164E21124BB974CA55E4A /* MainApp.swift */; }; + 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */; }; + AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */; }; + B120A7FC1173608E28B32878 /* LiveActivityBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BBDA2A81E64F7A5789BD5D5 /* LiveActivityBundle.swift */; }; + BAF881547EAE2CACBC169131 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + C410658755005122CB7BD031 /* iOS-SwiftUI-Widgets-LiveActivity.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + C5B3BFA8FEA22383570D0465 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; }; + CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B88304703D152A6C3A6249F8 /* Assets.xcassets */; }; + CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */; }; + D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; + DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + E250C0921C219246793FC8E9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A5BE5B3A3FDBEE3FB8D52EF /* Assets.xcassets */; }; + F2C97A3B5423E032BA89E78E /* LiveActivityConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE873C816BD3A74B547E341 /* LiveActivityConfiguration.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 02562A2AAA09F57681225B4F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + 206F31F59F2C041805232A2F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D6B98D3A58C262EE28C50B9E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5A1C22273766A4B9F99FB9F6; + remoteInfo = "iOS-SwiftUI-Widgets-WidgetExtension"; + }; + 2E946D944F47996BBCAFE14D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; + proxyType = 2; + remoteGlobalIDString = 431A3FE213391C00C3CE66D2; + remoteInfo = SentrySampleShared; + }; + 3EDDB1E318FA394FDD463EEF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + 62B95AE82B7A9CD381695B73 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + 6347742289F4EDE3C00D212E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; + proxyType = 2; + remoteGlobalIDString = 63AA759B1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + 685DC4895809A5DBE2D1CDCC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D6B98D3A58C262EE28C50B9E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 37173ED846C393202EDE6F71; + remoteInfo = "iOS-SwiftUI-Widgets-LiveActivity"; + }; + 705952D4A520D3DAAC164744 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; + CCE7D3B7939D3B6F6C51E7AA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; + proxyType = 1; + remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; + remoteInfo = Sentry; + }; + F4B89680F2E6B9CE127ADFF2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; + proxyType = 1; + remoteGlobalIDString = F38DF624CDB2F74181F2A29B; + remoteInfo = SentrySampleShared; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */, + C410658755005122CB7BD031 /* iOS-SwiftUI-Widgets-LiveActivity.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + D8886BC84AB9B150C1ED7905 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 00A2B42B73A20D0E31281668 /* Sentry-iOS.framework in Embed Frameworks */, + BAF881547EAE2CACBC169131 /* SentrySampleShared.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets-WidgetExtension.xcconfig"; sourceTree = ""; }; + 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidget.swift; sourceTree = ""; }; + 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets.xcconfig"; sourceTree = ""; }; + 149B790B19CCDCCD77651B49 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsObjC.xcconfig; sourceTree = ""; }; + 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AssetCatalog.xcconfig; sourceTree = ""; }; + 1C10E740433EC0862705BD2B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 1E1192AED22950F7264B3282 /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; + 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetBundle.swift; sourceTree = ""; }; + 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-SwiftUI-Widgets.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarnings.xcconfig; sourceTree = ""; }; + 2BBDA2A81E64F7A5789BD5D5 /* LiveActivityBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityBundle.swift; sourceTree = ""; }; + 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangLanguage.xcconfig; sourceTree = ""; }; + 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetControl.swift; sourceTree = ""; }; + 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityWidget.swift; sourceTree = ""; }; + 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityAttributes.swift; sourceTree = ""; }; + 3AE873C816BD3A74B547E341 /* LiveActivityConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityConfiguration.swift; sourceTree = ""; }; + 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; + 51774442E9250743D901AE0A /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; + 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; + 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets-LiveActivity.xcconfig"; sourceTree = ""; }; + 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsCpp.xcconfig; sourceTree = ""; }; + 5C379869BA6B600711B514AA /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; }; + 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SentrySampleShared; path = ../SentrySampleShared/SentrySampleShared.xcodeproj; sourceTree = ""; }; + 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; }; + 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; + 7A5BE5B3A3FDBEE3FB8D52EF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 809F2A3935C158DCDB81C66F /* LiveActivityViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityViewModel.swift; sourceTree = ""; }; + 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-Swift-Widget-Bridging-Header.h"; sourceTree = ""; }; + 844E572B807D8AFDAFA2BBE7 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; + 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = BuildOptions.xcconfig; sourceTree = ""; }; + 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangAnalyzer.xcconfig; sourceTree = ""; }; + 963761122A7CD280F6EC496C /* SentryExposure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryExposure.h; sourceTree = ""; }; + 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangCppLanguage.xcconfig; sourceTree = ""; }; + AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-SwiftUI-Widgets-LiveActivity.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleConfigurationAppIntent.swift; sourceTree = ""; }; + B88304703D152A6C3A6249F8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "iOS-SwiftUI-Widgets.yml"; sourceTree = ""; }; + C7A32DBA6D6A3A3014F75EBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangPreprocessing.xcconfig; sourceTree = ""; }; + CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-SwiftUI-Widgets-WidgetExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + D214D209886146D158EBF653 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; + D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityView.swift; sourceTree = ""; }; + DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SearchPaths.xcconfig; sourceTree = ""; }; + DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Swift.xcconfig; sourceTree = ""; }; + E4689ECE0E21A2872542D677 /* Linking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Linking.xcconfig; sourceTree = ""; }; + EDA164E21124BB974CA55E4A /* MainApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainApp.swift; sourceTree = ""; }; + F081F749B3F69ED90E1641EE /* _Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = _Common.xcconfig; sourceTree = ""; }; + F093C2215D4DE0E4EFA6D980 /* Sentry */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sentry; path = ../../Sentry.xcodeproj; sourceTree = ""; }; + F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangModules.xcconfig; sourceTree = ""; }; + FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangObjCLanguage.xcconfig; sourceTree = ""; }; + FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeGeneration.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0E4763FB42D7C7D1B6F14108 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 82492D9C0F314B1CFA96B93C /* Sentry-iOS.framework in Frameworks */, + 4D81FA541F8607E47AB1C935 /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 52E949549D99168E88C209CA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 00EBFD85C8FF0BFE4AE51444 /* Sentry-iOS.framework in Frameworks */, + C5B3BFA8FEA22383570D0465 /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7CAEAD643B385975C4240F5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 76E1B2896321F787F12BE2C3 /* Sentry-iOS.framework in Frameworks */, + 2ED227B9E061B91DAF58D7BF /* SentrySampleShared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 12412823A76950EA3A6F4A1E /* Config */ = { + isa = PBXGroup; + children = ( + F081F749B3F69ED90E1641EE /* _Common.xcconfig */, + 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */, + 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */, + 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */, + 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */, + 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */, + 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */, + F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */, + FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */, + CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */, + 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */, + 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */, + 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */, + FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */, + 5C379869BA6B600711B514AA /* Deployment.xcconfig */, + E4689ECE0E21A2872542D677 /* Linking.xcconfig */, + 51774442E9250743D901AE0A /* Localization.xcconfig */, + 1E1192AED22950F7264B3282 /* Metal.xcconfig */, + 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */, + DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */, + 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */, + DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */, + ); + name = Config; + path = ../Shared/Config; + sourceTree = ""; + }; + 1688693D4D74BC2FEEC77F10 /* Products */ = { + isa = PBXGroup; + children = ( + 8B538B101740BB92239F1040 /* Sentry-iOS.framework */, + ); + name = Products; + sourceTree = ""; + }; + 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */ = { + isa = PBXGroup; + children = ( + F351AB0C79B4F4A26405F7B8 /* Resources */, + 37F2198026D3702138A1C8FA /* Sources */, + ); + path = "iOS-SwiftUI-Widgets"; + sourceTree = ""; + }; + 224704913839EB7C391AF43A /* Products */ = { + isa = PBXGroup; + children = ( + 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */, + ); + name = Products; + sourceTree = ""; + }; + 37F2198026D3702138A1C8FA /* Sources */ = { + isa = PBXGroup; + children = ( + D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */, + 809F2A3935C158DCDB81C66F /* LiveActivityViewModel.swift */, + EDA164E21124BB974CA55E4A /* MainApp.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 4291BCC5BFC3E8A546501509 /* iOS-SwiftUI-Widgets-LiveActivity */ = { + isa = PBXGroup; + children = ( + A4D65D144C8D1D0EF0CC3FFA /* Resources */, + 7E832A7867F1B9965A7AEA73 /* Sources */, + ); + path = "iOS-SwiftUI-Widgets-LiveActivity"; + sourceTree = ""; + }; + 5BCF46669C95D0C5AA64EB32 /* Headers */ = { + isa = PBXGroup; + children = ( + 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */, + 963761122A7CD280F6EC496C /* SentryExposure.h */, + ); + path = Headers; + sourceTree = ""; + }; + 64610524F65A780DF9BFB212 /* Products */ = { + isa = PBXGroup; + children = ( + AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */, + CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */, + 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */, + ); + name = Products; + sourceTree = ""; + }; + 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */ = { + isa = PBXGroup; + children = ( + 8F7F6649D6F4D4D09A89EDCF /* Resources */, + 784318D35811F9E6AA983341 /* Sources */, + ); + path = "iOS-SwiftUI-Widgets-WidgetExtension"; + sourceTree = ""; + }; + 6ECE8158CD72EC6778BD4F1E /* Projects */ = { + isa = PBXGroup; + children = ( + F093C2215D4DE0E4EFA6D980 /* Sentry */, + 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */, + ); + name = Projects; + sourceTree = ""; + }; + 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */ = { + isa = PBXGroup; + children = ( + 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */, + 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */, + 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */, + ); + name = "iOS-SwiftUI-Widgets"; + path = .; + sourceTree = ""; + }; + 784318D35811F9E6AA983341 /* Sources */ = { + isa = PBXGroup; + children = ( + B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */, + 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */, + 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */, + 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 7E832A7867F1B9965A7AEA73 /* Sources */ = { + isa = PBXGroup; + children = ( + 2BBDA2A81E64F7A5789BD5D5 /* LiveActivityBundle.swift */, + 3AE873C816BD3A74B547E341 /* LiveActivityConfiguration.swift */, + 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 8F7F6649D6F4D4D09A89EDCF /* Resources */ = { + isa = PBXGroup; + children = ( + DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */, + D214D209886146D158EBF653 /* Entitlements.entitlements */, + C7A32DBA6D6A3A3014F75EBF /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; + 97261E177AEFD1FBF9AFD26C /* Data */ = { + isa = PBXGroup; + children = ( + 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */, + ); + path = Data; + sourceTree = ""; + }; + A4D65D144C8D1D0EF0CC3FFA /* Resources */ = { + isa = PBXGroup; + children = ( + 7A5BE5B3A3FDBEE3FB8D52EF /* Assets.xcassets */, + 844E572B807D8AFDAFA2BBE7 /* Entitlements.entitlements */, + 149B790B19CCDCCD77651B49 /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; + B067CD4E68396FF941842D6F /* Shared */ = { + isa = PBXGroup; + children = ( + 97261E177AEFD1FBF9AFD26C /* Data */, + 5BCF46669C95D0C5AA64EB32 /* Headers */, + ); + path = Shared; + sourceTree = ""; + }; + B881B0C8A980D4462DB07732 = { + isa = PBXGroup; + children = ( + B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */, + 12412823A76950EA3A6F4A1E /* Config */, + 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */, + 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */, + 4291BCC5BFC3E8A546501509 /* iOS-SwiftUI-Widgets-LiveActivity */, + 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */, + B067CD4E68396FF941842D6F /* Shared */, + 64610524F65A780DF9BFB212 /* Products */, + 6ECE8158CD72EC6778BD4F1E /* Projects */, + ); + sourceTree = ""; + }; + F351AB0C79B4F4A26405F7B8 /* Resources */ = { + isa = PBXGroup; + children = ( + B88304703D152A6C3A6249F8 /* Assets.xcassets */, + 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */, + 1C10E740433EC0862705BD2B /* Info.plist */, + ); + path = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 37173ED846C393202EDE6F71 /* iOS-SwiftUI-Widgets-LiveActivity */ = { + isa = PBXNativeTarget; + buildConfigurationList = 070200C57AB30631FE740A64 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-LiveActivity" */; + buildPhases = ( + 4CAE9BE46F6A17062C743956 /* Sources */, + D97E6CEC931D92D395E54FFE /* Resources */, + 52E949549D99168E88C209CA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 16AE9AF1906E06B23E66FBEF /* PBXTargetDependency */, + 2901C059CC4BE9D9A8FFB118 /* PBXTargetDependency */, + ); + name = "iOS-SwiftUI-Widgets-LiveActivity"; + packageProductDependencies = ( + ); + productName = "iOS-SwiftUI-Widgets-LiveActivity"; + productReference = AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */; + buildPhases = ( + 79071996082F166983FE9D74 /* Sources */, + B70BBFEAC3F6528B1EBF1FF7 /* Resources */, + 0E4763FB42D7C7D1B6F14108 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 6E995F902ABB799E207C4DB3 /* PBXTargetDependency */, + 65CA940D29A6140EFDA46135 /* PBXTargetDependency */, + ); + name = "iOS-SwiftUI-Widgets-WidgetExtension"; + packageProductDependencies = ( + ); + productName = "iOS-SwiftUI-Widgets-WidgetExtension"; + productReference = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */ = { + isa = PBXNativeTarget; + buildConfigurationList = 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */; + buildPhases = ( + DC38EC959ED2BB986CE38BD2 /* Sources */, + 769D4ACB4830B4AE8EE3EF73 /* Resources */, + F7CAEAD643B385975C4240F5 /* Frameworks */, + 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */, + D8886BC84AB9B150C1ED7905 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 9AAE14BE8CD74FFC79074594 /* PBXTargetDependency */, + F165474953FA4A56979356D4 /* PBXTargetDependency */, + A2F9A537196C85E11DA332B6 /* PBXTargetDependency */, + 6D26E5089C9C2F00B5B3407D /* PBXTargetDependency */, + ); + name = "iOS-SwiftUI-Widgets"; + packageProductDependencies = ( + ); + productName = "iOS-SwiftUI-Widgets"; + productReference = 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D6B98D3A58C262EE28C50B9E /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + 37173ED846C393202EDE6F71 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + 5A1C22273766A4B9F99FB9F6 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + 8E239B450D0DE382D706B6B7 = { + DevelopmentTeam = 97JCY7859U; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = B881B0C8A980D4462DB07732; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 1688693D4D74BC2FEEC77F10 /* Products */; + ProjectRef = F093C2215D4DE0E4EFA6D980 /* Sentry */; + }, + { + ProductGroup = 224704913839EB7C391AF43A /* Products */; + ProjectRef = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; + }, + ); + projectRoot = ""; + targets = ( + 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */, + 37173ED846C393202EDE6F71 /* iOS-SwiftUI-Widgets-LiveActivity */, + 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SentrySampleShared.framework; + remoteRef = 2E946D944F47996BBCAFE14D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8B538B101740BB92239F1040 /* Sentry-iOS.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = "Sentry-iOS.framework"; + remoteRef = 6347742289F4EDE3C00D212E /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 769D4ACB4830B4AE8EE3EF73 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B70BBFEAC3F6528B1EBF1FF7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D97E6CEC931D92D395E54FFE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E250C0921C219246793FC8E9 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4CAE9BE46F6A17062C743956 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13023A9E33DCCAA00AE04919 /* LiveActivityAttributes.swift in Sources */, + B120A7FC1173608E28B32878 /* LiveActivityBundle.swift in Sources */, + F2C97A3B5423E032BA89E78E /* LiveActivityConfiguration.swift in Sources */, + 221EDE644A6F0F0721AEBB6B /* LiveActivityWidget.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79071996082F166983FE9D74 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */, + 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */, + AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */, + 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */, + 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DC38EC959ED2BB986CE38BD2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */, + CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */, + 2BB0F033107EE1C3AA8BB113 /* LiveActivityViewModel.swift in Sources */, + 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 16AE9AF1906E06B23E66FBEF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = 62B95AE82B7A9CD381695B73 /* PBXContainerItemProxy */; + }; + 2901C059CC4BE9D9A8FFB118 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = 3EDDB1E318FA394FDD463EEF /* PBXContainerItemProxy */; + }; + 65CA940D29A6140EFDA46135 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = F4B89680F2E6B9CE127ADFF2 /* PBXContainerItemProxy */; + }; + 6D26E5089C9C2F00B5B3407D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 37173ED846C393202EDE6F71 /* iOS-SwiftUI-Widgets-LiveActivity */; + targetProxy = 685DC4895809A5DBE2D1CDCC /* PBXContainerItemProxy */; + }; + 6E995F902ABB799E207C4DB3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = CCE7D3B7939D3B6F6C51E7AA /* PBXContainerItemProxy */; + }; + 9AAE14BE8CD74FFC79074594 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Sentry; + targetProxy = 02562A2AAA09F57681225B4F /* PBXContainerItemProxy */; + }; + A2F9A537196C85E11DA332B6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */; + targetProxy = 206F31F59F2C041805232A2F /* PBXContainerItemProxy */; + }; + F165474953FA4A56979356D4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SentrySampleShared; + targetProxy = 705952D4A520D3DAAC164744 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 180D348244D8D9212C67AE1A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements"; + INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; + }; + name = Release; + }; + 1B9F865ECE37130BDBB5A023 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements"; + INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; + }; + name = Debug; + }; + 221CEBB496C7E9ADB264FBDE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements"; + INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; + }; + name = Release; + }; + 6CA1E23D2E331683FA217276 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 761A2113671B4BD4CF6F2759 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 8BDFA6BD2B7E61EAB0B43EB2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements"; + INFOPLIST_FILE = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist"; + }; + name = Debug; + }; + 9CE8FF7BC1499AAC7538B778 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements"; + INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; + }; + name = Debug; + }; + E9C055E9DD3FE2CBB51EF61F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements"; + INFOPLIST_FILE = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 070200C57AB30631FE740A64 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-LiveActivity" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8BDFA6BD2B7E61EAB0B43EB2 /* Debug */, + E9C055E9DD3FE2CBB51EF61F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6CA1E23D2E331683FA217276 /* Debug */, + 761A2113671B4BD4CF6F2759 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1B9F865ECE37130BDBB5A023 /* Debug */, + 180D348244D8D9212C67AE1A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9CE8FF7BC1499AAC7538B778 /* Debug */, + 221CEBB496C7E9ADB264FBDE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = D6B98D3A58C262EE28C50B9E /* Project object */; +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..919434a6254 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000000..280eff1f10b --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + BuildSystemType + Latest + DerivedDataLocationStyle + Default + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme new file mode 100644 index 00000000000..4605628dff7 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme new file mode 100644 index 00000000000..6e98cd75439 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme new file mode 100644 index 00000000000..e2670c797e6 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme new file mode 100644 index 00000000000..4605628dff7 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml index d5a514eada7..225d5cf643e 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.yml @@ -30,6 +30,9 @@ targets: - target: Sentry/Sentry - target: SentrySampleShared/SentrySampleShared - target: iOS-SwiftUI-Widgets-WidgetExtension + - target: iOS-SwiftUI-Widgets-LiveActivity + settings: + CODE_SIGN_ENTITLEMENTS: iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements configFiles: Debug: iOS-SwiftUI-Widgets.xcconfig Release: iOS-SwiftUI-Widgets.xcconfig @@ -43,15 +46,33 @@ targets: dependencies: - target: Sentry/Sentry - target: SentrySampleShared/SentrySampleShared + settings: + CODE_SIGN_ENTITLEMENTS: iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements configFiles: Debug: iOS-SwiftUI-Widgets-WidgetExtension.xcconfig Release: iOS-SwiftUI-Widgets-WidgetExtension.xcconfig + iOS-SwiftUI-Widgets-LiveActivity: + type: app-extension + platform: iOS + deploymentTarget: "18.0" + sources: + - iOS-SwiftUI-Widgets-LiveActivity + - Shared + dependencies: + - target: Sentry/Sentry + - target: SentrySampleShared/SentrySampleShared + settings: + CODE_SIGN_ENTITLEMENTS: iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements + configFiles: + Debug: iOS-SwiftUI-Widgets-LiveActivity.xcconfig + Release: iOS-SwiftUI-Widgets-LiveActivity.xcconfig schemes: iOS-SwiftUI-Widgets: build: targets: iOS-SwiftUI-Widgets: all iOS-SwiftUI-Widgets-WidgetExtension: all + iOS-SwiftUI-Widgets-LiveActivity: all run: config: Debug profile: @@ -78,3 +99,15 @@ schemes: askForAppToLaunch: true environmentVariables: _XCWidgetKind: SampleWidgetControl + iOS-SwiftUI-Widgets-LiveActivity: + build: + targets: + iOS-SwiftUI-Widgets: all + iOS-SwiftUI-Widgets-WidgetExtension: all + iOS-SwiftUI-Widgets-LiveActivity: all + run: + config: Debug + profile: + config: Release + archive: + config: Release diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements index 129b0e02f9b..127fedee84b 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements @@ -4,8 +4,6 @@ aps-environment development - com.apple.developer.usernotifications.time-sensitive - com.apple.security.application-groups diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist index 6631ffa6f24..456298674e9 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Info.plist @@ -2,5 +2,9 @@ + NSSupportsLiveActivities + + NSSupportsLiveActivitiesFrequentUpdates + diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift deleted file mode 100644 index 02eca25afd0..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/ContentView.swift +++ /dev/null @@ -1,11 +0,0 @@ -import SwiftUI - -struct ContentView: View { - var body: some View { - LiveActivityView() - } -} - -#Preview { - ContentView() -} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift index fc9e8d2c200..fcce6b4f361 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityView.swift @@ -1,7 +1,5 @@ import ActivityKit -@_spi(Private) @testable import Sentry import SwiftUI -import UserNotifications struct LiveActivityView: View { @StateObject private var viewModel = LiveActivityViewModel() @@ -11,15 +9,53 @@ struct LiveActivityView: View { Text("Live Activity Test") .font(.title) - if viewModel.isActivityActive { + // Debug info + VStack(alignment: .leading, spacing: 8) { + Text("Debug Info:") + .font(.headline) + Text("Activities Enabled: \(ActivityAuthorizationInfo().areActivitiesEnabled ? "Yes" : "No")") + .font(.caption) + Text("Existing Activities: \(Activity.activities.count)") + .font(.caption) + } + .padding() + .background(Color.gray.opacity(0.1)) + .cornerRadius(8) + + // Simulator note + VStack(alignment: .leading, spacing: 4) { + Text("ℹ️ Simulator Note:") + .font(.headline) + .foregroundColor(.blue) + Text("Live Activities show on lock screen in simulator. Dynamic Island requires a physical iPhone 14 Pro or later.") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() + .background(Color.blue.opacity(0.1)) + .cornerRadius(8) + + if let activityViewState = viewModel.activityViewState { VStack(spacing: 10) { - Text("Live Activity is running") + Text("✅ Live Activity is running") .font(.headline) .foregroundColor(.green) - - Text("It will end automatically in 10 seconds") + + Text(activityViewState.pushToken ?? "No token available") .font(.caption) .foregroundColor(.secondary) + + Text("Lock the simulator to see it on the lock screen") + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + + Button("End Activity") { + Task { + await viewModel.endLiveActivity() + } + } + .buttonStyle(.bordered) } .padding() .background(Color.green.opacity(0.1)) @@ -36,123 +72,10 @@ struct LiveActivityView: View { .foregroundColor(.red) .font(.caption) .padding() + .background(Color.red.opacity(0.1)) + .cornerRadius(8) } } .padding() - .frame(maxWidth: .infinity, maxHeight: .infinity) - .background(Color(UIColor.systemBackground)) - .onAppear { - viewModel.setupSentrySDK() - } - } -} - -@MainActor -final class LiveActivityViewModel: ObservableObject { - @Published var isActivityActive = false - @Published var errorMessage: String? - - private var currentActivity: Activity? - - func setupSentrySDK() { - guard !SentrySDK.isEnabled else { - return - } - SentrySDK.start { options in - options.dsn = "https://a92d50327ac74b8b9aa4ea80eccfb267@o447951.ingest.sentry.io/5428557" - options.debug = true - options.enableAppHangTracking = true - } - } - - func startLiveActivity() { - Task { - // Request notification permissions if needed - let center = UNUserNotificationCenter.current() - let settings = await center.notificationSettings() - - if settings.authorizationStatus == .notDetermined { - do { - let granted = try await center.requestAuthorization(options: [.alert, .sound, .badge, .providesAppNotificationSettings]) - if !granted { - self.errorMessage = "Notification permissions are required for Live Activities." - return - } - } catch { - self.errorMessage = "Failed to request notification permissions: \(error.localizedDescription)" - return - } - } else if settings.authorizationStatus == .denied { - self.errorMessage = "Notification permissions are denied. Please enable notifications in Settings." - return - } - - // Check if Live Activities are enabled - let authInfo = ActivityAuthorizationInfo() - guard authInfo.areActivitiesEnabled else { - self.errorMessage = "Live Activities are not enabled. Please enable them in Settings." - return - } - - do { - // Check ANR tracking status - let anrInstalled = SentrySDK.isEnabled && - SentrySDKInternal.trimmedInstalledIntegrationNames() - .contains("ANRTracking") - - let anrStatus = anrInstalled ? "Enabled" : "Disabled" - - let attributes = LiveActivityAttributes(id: UUID().uuidString) - let initialState = LiveActivityAttributes.ContentState( - anrTrackingStatus: anrStatus, - timestamp: Date() - ) - - let activity = try Activity.request( - attributes: attributes, - content: .init(state: initialState, staleDate: nil), - pushType: .token - ) - - self.currentActivity = activity - self.isActivityActive = true - self.errorMessage = nil - - // Auto-end after 10 seconds - Task { - try? await Task.sleep(for: .seconds(10)) - await self.endLiveActivity() - } - } catch { - self.errorMessage = "Failed to start Live Activity: \(error.localizedDescription)" - } - } - } - - func endLiveActivity() async { - guard let activity = currentActivity else { - return - } - - // Check ANR tracking status again for final state - let anrInstalled = SentrySDK.isEnabled && - SentrySDKInternal.trimmedInstalledIntegrationNames() - .contains("ANRTracking") - - let anrStatus = anrInstalled ? "Enabled" : "Disabled" - - let finalState = LiveActivityAttributes.ContentState( - anrTrackingStatus: anrStatus, - timestamp: Date() - ) - await activity.end( - ActivityContent(state: finalState, staleDate: nil), - dismissalPolicy: .immediate - ) - - await MainActor.run { - self.currentActivity = nil - self.isActivityActive = false - } } } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift new file mode 100644 index 00000000000..803f2b35e54 --- /dev/null +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift @@ -0,0 +1,157 @@ +import ActivityKit +import os.log +import SwiftUI + +@MainActor +final class LiveActivityViewModel: ObservableObject { + struct ActivityViewState: Sendable { + var activityState: ActivityState + var contentState: LiveActivityAttributes.ContentState + var pushToken: String? + } + + @Published var activityViewState: ActivityViewState? + @Published var errorMessage: String? + + private var currentActivity: Activity? + + private let logger = Logger(subsystem: "io.sentry.sentry-cocoa.samples.iOS-SwiftUI-Widgets", category: "LiveActivity") + + func startLiveActivity() { + logger.info("Starting Live Activity...") + + let authInfo = ActivityAuthorizationInfo() + logger.info("Live Activities enabled: \(authInfo.areActivitiesEnabled)") + + guard authInfo.areActivitiesEnabled else { + errorMessage = "Live Activities are not enabled. Please enable them in Settings." + logger.error("Live Activities are not enabled") + return + } + + // Check for existing activities + let existingActivities = Activity.activities + logger.info("Existing activities count: \(existingActivities.count)") + + do { + let attributes = LiveActivityAttributes( + id: "" + ) + let initialState = LiveActivityAttributes.ContentState( + anrTrackingStatus: "Enabled", + timestamp: Date() + ) + + logger.info("Requesting activity with attributes name: \(attributes.id)") + + let activity = try Activity.request( + attributes: attributes, + content: .init(state: initialState, staleDate: nil), + pushType: .token + ) + + logger.info("Activity created successfully! ID: \(activity.id), State: \(String(describing: activity.activityState))") + logger.info("Activity content state: emoji=\(initialState.anrTrackingStatus)") + logger.info("Activity pushToken initially: \(activity.pushToken?.hexadecimalString ?? "nil")") + + currentActivity = activity + self.activityViewState = .init( + activityState: activity.activityState, + contentState: activity.content.state, + pushToken: activity.pushToken?.hexadecimalString + ) + errorMessage = nil + + logger.info("Starting to observe activity updates") + observeActivity(activity: activity) + + // Log all current activities for debugging + let allActivities = Activity.activities + logger.info("Total activities after creation: \(allActivities.count)") + for (index, act) in allActivities.enumerated() { + logger.info("Activity \(index): ID=\(act.id), State=\(String(describing: act.activityState))") + } + } catch { + let errorDescription = error.localizedDescription + logger.error("Failed to start Live Activity: \(errorDescription)") + let nsError = error as NSError + logger.error("NSError domain: \(nsError.domain), code: \(nsError.code), userInfo: \(nsError.userInfo)") + errorMessage = "Failed to start Live Activity: \(errorDescription)" + } + } + + func observeActivity(activity: Activity) { + Task { + await withTaskGroup(of: Void.self) { group in + group.addTask { @MainActor in + for await activityState in activity.activityStateUpdates { + self.logger.info("Activity state changed: \(String(describing: activityState))") + if activityState == .dismissed { + self.logger.info("Activity was dismissed, cleaning up") + self.cleanUpDismissedActivity() + } else { + self.activityViewState?.activityState = activityState + self.logger.info("Updated activityViewState.activityState to: \(String(describing: activityState))") + } + } + } + + group.addTask { @MainActor in + for await contentState in activity.contentUpdates { + self.logger.info("Content state updated: emoji=\(contentState.state.anrTrackingStatus)") + self.activityViewState?.contentState = contentState.state + } + } + + group.addTask { @MainActor in + for await pushToken in activity.pushTokenUpdates { + let pushTokenString = pushToken.hexadecimalString + let frequentUpdateEnabled = ActivityAuthorizationInfo().frequentPushesEnabled + + self.logger.info("Push token received: \(pushTokenString)") + self.logger.info("Frequent updates enabled: \(frequentUpdateEnabled)") + + // Update the view state with the push token + self.activityViewState?.pushToken = pushTokenString + } + } + } + } + } + + func cleanUpDismissedActivity() { + self.currentActivity = nil + self.activityViewState = nil + } + + func endLiveActivity() async { + guard let activity = currentActivity else { + logger.warning("No current activity to end") + return + } + + logger.info("Ending activity: \(activity.id)") + + let finalState = LiveActivityAttributes.ContentState( + anrTrackingStatus: "Disabled", + timestamp: Date() + ) + + await activity.end( + ActivityContent(state: finalState, staleDate: nil), + dismissalPolicy: .immediate + ) + + cleanUpDismissedActivity() + + logger.info("Activity ended") + } +} + +private extension Data { + var hexadecimalString: String { + self.reduce("") { + $0 + String(format: "%02x", $1) + } + } +} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift index 52d9de4dd7b..cc414f48fd8 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/MainApp.swift @@ -1,10 +1,26 @@ +import Combine +import Sentry +import SentrySampleShared import SwiftUI +import UIKit +import UserNotifications @main struct MainApp: App { + init() { + // For this sample app we need a specific configuration set, therefore we do not use the shared sample initializer + SentrySDK.start { options in + options.dsn = SentrySDKWrapper.defaultDSN + options.debug = true + + // App Hang Tracking must be enabled, but should not be installed + options.enableAppHangTracking = true + } + } + var body: some Scene { WindowGroup { - ContentView() + LiveActivityView() } } } From c75667946cd534203b284fb6df0e75a4a5e02bda Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 21:32:35 +0100 Subject: [PATCH 14/19] fixes --- .../Shared/Data/LiveActivityAttributes.swift | 1 - .../Resources/Entitlements.entitlements | 2 - .../Sources/LiveActivityConfiguration.swift | 84 ------------------- .../Sources/LiveActivityWidget.swift | 62 ++++++++++---- .../Resources/Entitlements.entitlements | 2 - .../Sources/SampleWidget.swift | 4 +- .../project.pbxproj | 4 - .../Resources/Entitlements.entitlements | 2 - .../Sources/LiveActivityViewModel.swift | 15 +--- 9 files changed, 52 insertions(+), 124 deletions(-) delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityConfiguration.swift diff --git a/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift b/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift index 53c9590688a..4df86e2a7f5 100644 --- a/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift +++ b/Samples/iOS-SwiftUI-Widgets/Shared/Data/LiveActivityAttributes.swift @@ -6,7 +6,6 @@ import ActivityKit struct LiveActivityAttributes: ActivityAttributes { struct ContentState: Codable & Hashable { - let anrTrackingStatus: String // "Enabled" or "Disabled" let timestamp: Date } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements index 2eb7e333a6f..6631ffa6f24 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements @@ -2,7 +2,5 @@ - com.apple.security.application-groups - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityConfiguration.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityConfiguration.swift deleted file mode 100644 index de47d0b43ad..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityConfiguration.swift +++ /dev/null @@ -1,84 +0,0 @@ -import ActivityKit -import Sentry -import SentrySampleShared -import SwiftUI -import WidgetKit - -struct LiveActivityConfiguration: Widget { - - init() { - setupSentrySDK() - } - - var body: some WidgetConfiguration { - ActivityConfiguration(for: LiveActivityAttributes.self) { context in - // Lock screen/banner UI - VStack(alignment: .leading, spacing: 8) { - Text("Sentry") - .font(.headline) - - Text("ANR Tracking:") - .font(.caption2) - Text(context.state.anrTrackingStatus == "Enabled" ? "❌ Enabled" : "✅ Disabled") - .font(.caption) - .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) - .bold() - - Text(context.state.timestamp, style: .time) - .font(.caption2) - } - .padding() - .activityBackgroundTint(Color.blue.opacity(0.1)) - } dynamicIsland: { context in - DynamicIsland { - DynamicIslandExpandedRegion(.leading) { - VStack(alignment: .leading, spacing: 4) { - Text("Sentry") - .font(.headline) - Text("ANR Tracking") - .font(.caption2) - } - } - DynamicIslandExpandedRegion(.trailing) { - VStack(alignment: .trailing, spacing: 4) { - Text(context.state.anrTrackingStatus == "Enabled" ? "❌ Enabled" : "✅ Disabled") - .font(.caption) - .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) - .bold() - Text(context.state.timestamp, style: .time) - .font(.caption2) - } - } - DynamicIslandExpandedRegion(.bottom) { - Text("ANR tracking is \(context.state.anrTrackingStatus.lowercased()) in Live Activities") - .font(.caption) - .multilineTextAlignment(.center) - } - } compactLeading: { - // Compact leading - show icon - Image(systemName: context.state.anrTrackingStatus == "Enabled" ? "exclamationmark.triangle.fill" : "checkmark.circle.fill") - .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) - } compactTrailing: { - // Compact trailing - show status text - Text(context.state.anrTrackingStatus == "Enabled" ? "ANR" : "OK") - .font(.caption2) - .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) - } minimal: { - // Minimal view - just icon - Image(systemName: context.state.anrTrackingStatus == "Enabled" ? "exclamationmark.triangle.fill" : "checkmark.circle.fill") - .foregroundColor(context.state.anrTrackingStatus == "Enabled" ? .red : .green) - } - } - } - - private func setupSentrySDK() { - guard !SentrySDK.isEnabled else { - return - } - SentrySDK.start { options in - options.dsn = SentrySDKWrapper.defaultDSN - options.debug = true - options.enableAppHangTracking = true - } - } -} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift index b486758bc79..0468afebab5 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-LiveActivity/Sources/LiveActivityWidget.swift @@ -22,36 +22,68 @@ struct LiveActivityWidget: Widget { var body: some WidgetConfiguration { ActivityConfiguration(for: LiveActivityAttributes.self) { context in - // Lock screen/banner UI goes here - VStack { - Text("Hello \(context.state.anrTrackingStatus)") + VStack(alignment: .leading, spacing: 8) { + Text("Sentry") + .font(.headline) + + Text("SDK Enabled? \(isSentryEnabled ? "✅" : "❌")") + .font(.caption) + .foregroundColor(isSentryEnabled ? .green : .red) + .bold() + + Text("ANR Disabled? \(!isANRTrackingEnabled ? "✅" : "❌")") + .font(.caption2) + .foregroundColor(!isANRTrackingEnabled ? .green : .red) + .bold() + + Text(context.state.timestamp, style: .time) + .font(.caption2) } - .activityBackgroundTint(Color.cyan) - .activitySystemActionForegroundColor(Color.black) + .padding() - } dynamicIsland: { context in + } dynamicIsland: { _ in DynamicIsland { // Expanded UI goes here. Compose the expanded UI through // various regions, like leading/trailing/center/bottom DynamicIslandExpandedRegion(.leading) { - Text("Leading") + Text("SDK Enabled? \(isSentryEnabled ? "✅" : "❌")") + .font(.caption) + .foregroundColor(isSentryEnabled ? .green : .red) + .bold() } DynamicIslandExpandedRegion(.trailing) { - Text("Trailing") + Text("ANR Disabled? \(!isANRTrackingEnabled ? "✅" : "❌")") + .font(.caption2) + .foregroundColor(!isANRTrackingEnabled ? .green : .red) + .bold() } DynamicIslandExpandedRegion(.bottom) { - Text("Bottom \(context.state.anrTrackingStatus)") - // more content + Text("SDK Enabled? \(isSentryEnabled ? "✅" : "❌")") + .font(.caption) + .foregroundColor(isSentryEnabled ? .green : .red) + .bold() + Text("ANR Disabled? \(!isANRTrackingEnabled ? "✅" : "❌")") + .font(.caption2) + .foregroundColor(!isANRTrackingEnabled ? .green : .red) + .bold() } } compactLeading: { - Text("L") + Text(isSentryEnabled ? "✅" : "❌") } compactTrailing: { - Text("T \(context.state.anrTrackingStatus.prefix(1))") + Text(!isANRTrackingEnabled ? "✅" : "❌") } minimal: { - Text(context.state.anrTrackingStatus) + Text("\(isSentryEnabled ? "✅" : "❌") - \(!isANRTrackingEnabled ? "✅" : "❌")") } - .widgetURL(URL(string: "http://www.apple.com")) - .keylineTint(Color.red) + .widgetURL(URL(string: "http://sentry.io")) + .keylineTint(isSentryEnabled && !isANRTrackingEnabled ? .green : .red) } } + + var isSentryEnabled: Bool { + return SentrySDK.isEnabled + } + + var isANRTrackingEnabled: Bool { + return isSentryEnabled && SentrySDKInternal.trimmedInstalledIntegrationNames().contains("ANRTracking") + } } diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements index 2eb7e333a6f..6631ffa6f24 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements @@ -2,7 +2,5 @@ - com.apple.security.application-groups - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift index 13eb6b325df..cdf0b1f7450 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets-WidgetExtension/Sources/SampleWidget.swift @@ -26,9 +26,9 @@ fileprivate struct SampleWidgetEntryView: View { .font(.caption) .foregroundColor(isSentryEnabled ? .green : .red) .bold() - Text("ANR Disabled? \(isANRInstalled ? "❌" : "✅")") + Text("ANR Disabled? \(!isANRInstalled ? "✅" : "❌")") .font(.caption) - .foregroundColor(isANRInstalled ? .red : .green) + .foregroundColor(!isANRInstalled ? .green : .red) .bold() Text(entry.date, style: .time) diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj index 75986892c4d..30d5b6f6bf1 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj @@ -32,7 +32,6 @@ D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; E250C0921C219246793FC8E9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A5BE5B3A3FDBEE3FB8D52EF /* Assets.xcassets */; }; - F2C97A3B5423E032BA89E78E /* LiveActivityConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE873C816BD3A74B547E341 /* LiveActivityConfiguration.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -152,7 +151,6 @@ 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetControl.swift; sourceTree = ""; }; 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityWidget.swift; sourceTree = ""; }; 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityAttributes.swift; sourceTree = ""; }; - 3AE873C816BD3A74B547E341 /* LiveActivityConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityConfiguration.swift; sourceTree = ""; }; 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; 51774442E9250743D901AE0A /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; @@ -359,7 +357,6 @@ isa = PBXGroup; children = ( 2BBDA2A81E64F7A5789BD5D5 /* LiveActivityBundle.swift */, - 3AE873C816BD3A74B547E341 /* LiveActivityConfiguration.swift */, 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */, ); path = Sources; @@ -602,7 +599,6 @@ files = ( 13023A9E33DCCAA00AE04919 /* LiveActivityAttributes.swift in Sources */, B120A7FC1173608E28B32878 /* LiveActivityBundle.swift in Sources */, - F2C97A3B5423E032BA89E78E /* LiveActivityConfiguration.swift in Sources */, 221EDE644A6F0F0721AEBB6B /* LiveActivityWidget.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements index 127fedee84b..903def2af53 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements @@ -4,7 +4,5 @@ aps-environment development - com.apple.security.application-groups - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift index 803f2b35e54..08ab83b087a 100644 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift +++ b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets/Sources/LiveActivityViewModel.swift @@ -15,7 +15,7 @@ final class LiveActivityViewModel: ObservableObject { private var currentActivity: Activity? - private let logger = Logger(subsystem: "io.sentry.sentry-cocoa.samples.iOS-SwiftUI-Widgets", category: "LiveActivity") + private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "LiveActivity") func startLiveActivity() { logger.info("Starting Live Activity...") @@ -37,10 +37,7 @@ final class LiveActivityViewModel: ObservableObject { let attributes = LiveActivityAttributes( id: "" ) - let initialState = LiveActivityAttributes.ContentState( - anrTrackingStatus: "Enabled", - timestamp: Date() - ) + let initialState = LiveActivityAttributes.ContentState(timestamp: Date()) logger.info("Requesting activity with attributes name: \(attributes.id)") @@ -51,7 +48,6 @@ final class LiveActivityViewModel: ObservableObject { ) logger.info("Activity created successfully! ID: \(activity.id), State: \(String(describing: activity.activityState))") - logger.info("Activity content state: emoji=\(initialState.anrTrackingStatus)") logger.info("Activity pushToken initially: \(activity.pushToken?.hexadecimalString ?? "nil")") currentActivity = activity @@ -98,7 +94,6 @@ final class LiveActivityViewModel: ObservableObject { group.addTask { @MainActor in for await contentState in activity.contentUpdates { - self.logger.info("Content state updated: emoji=\(contentState.state.anrTrackingStatus)") self.activityViewState?.contentState = contentState.state } } @@ -132,11 +127,7 @@ final class LiveActivityViewModel: ObservableObject { logger.info("Ending activity: \(activity.id)") - let finalState = LiveActivityAttributes.ContentState( - anrTrackingStatus: "Disabled", - timestamp: Date() - ) - + let finalState = LiveActivityAttributes.ContentState(timestamp: Date()) await activity.end( ActivityContent(state: finalState, staleDate: nil), dismissalPolicy: .immediate From 403874a0620b9aef267b8c16dcc06038dd820c23 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Fri, 7 Nov 2025 21:33:57 +0100 Subject: [PATCH 15/19] Remove generated project --- .gitignore | 2 +- .../project.pbxproj | 888 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/WorkspaceSettings.xcsettings | 10 - .../iOS-SwiftUI-Widgets-LiveActivity.xcscheme | 121 --- ...iOS-SwiftUI-Widgets-WidgetControl.xcscheme | 113 --- ...S-SwiftUI-Widgets-WidgetExtension.xcscheme | 113 --- .../xcschemes/iOS-SwiftUI-Widgets.xcscheme | 121 --- 8 files changed, 1 insertion(+), 1374 deletions(-) delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme delete mode 100644 Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme diff --git a/.gitignore b/.gitignore index ea727e47999..140bb8bf791 100644 --- a/.gitignore +++ b/.gitignore @@ -87,7 +87,7 @@ Samples/iOS-ObjectiveC/iOS-ObjectiveC.xcodeproj Samples/iOS-Swift/iOS-Swift.xcodeproj Samples/iOS-Swift6/iOS-Swift6.xcodeproj Samples/iOS-SwiftUI/iOS-SwiftUI.xcodeproj -# Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj +Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj Samples/iOS15-SwiftUI/iOS15-SwiftUI.xcodeproj Samples/macOS-Swift/macOS-Swift.xcodeproj Samples/macOS-SwiftUI/macOS-SwiftUI.xcodeproj diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj deleted file mode 100644 index 30d5b6f6bf1..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.pbxproj +++ /dev/null @@ -1,888 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 00A2B42B73A20D0E31281668 /* Sentry-iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 00EBFD85C8FF0BFE4AE51444 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; }; - 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */; }; - 13023A9E33DCCAA00AE04919 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; - 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; - 221EDE644A6F0F0721AEBB6B /* LiveActivityWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */; }; - 2BB0F033107EE1C3AA8BB113 /* LiveActivityViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809F2A3935C158DCDB81C66F /* LiveActivityViewModel.swift */; }; - 2ED227B9E061B91DAF58D7BF /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; }; - 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */; }; - 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */; }; - 4D81FA541F8607E47AB1C935 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; }; - 76E1B2896321F787F12BE2C3 /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; }; - 82492D9C0F314B1CFA96B93C /* Sentry-iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B538B101740BB92239F1040 /* Sentry-iOS.framework */; }; - 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA164E21124BB974CA55E4A /* MainApp.swift */; }; - 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */; }; - AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */; }; - B120A7FC1173608E28B32878 /* LiveActivityBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BBDA2A81E64F7A5789BD5D5 /* LiveActivityBundle.swift */; }; - BAF881547EAE2CACBC169131 /* SentrySampleShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - C410658755005122CB7BD031 /* iOS-SwiftUI-Widgets-LiveActivity.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - C5B3BFA8FEA22383570D0465 /* SentrySampleShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */; }; - CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B88304703D152A6C3A6249F8 /* Assets.xcassets */; }; - CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */; }; - D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */; }; - DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - E250C0921C219246793FC8E9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A5BE5B3A3FDBEE3FB8D52EF /* Assets.xcassets */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 02562A2AAA09F57681225B4F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - 206F31F59F2C041805232A2F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D6B98D3A58C262EE28C50B9E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A1C22273766A4B9F99FB9F6; - remoteInfo = "iOS-SwiftUI-Widgets-WidgetExtension"; - }; - 2E946D944F47996BBCAFE14D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; - proxyType = 2; - remoteGlobalIDString = 431A3FE213391C00C3CE66D2; - remoteInfo = SentrySampleShared; - }; - 3EDDB1E318FA394FDD463EEF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - 62B95AE82B7A9CD381695B73 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - 6347742289F4EDE3C00D212E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; - proxyType = 2; - remoteGlobalIDString = 63AA759B1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - 685DC4895809A5DBE2D1CDCC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D6B98D3A58C262EE28C50B9E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 37173ED846C393202EDE6F71; - remoteInfo = "iOS-SwiftUI-Widgets-LiveActivity"; - }; - 705952D4A520D3DAAC164744 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; - CCE7D3B7939D3B6F6C51E7AA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = F093C2215D4DE0E4EFA6D980 /* Sentry */; - proxyType = 1; - remoteGlobalIDString = 63AA759A1EB8AEF500D153DE; - remoteInfo = Sentry; - }; - F4B89680F2E6B9CE127ADFF2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; - proxyType = 1; - remoteGlobalIDString = F38DF624CDB2F74181F2A29B; - remoteInfo = SentrySampleShared; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - DDB3989A2B1B79F9A3552261 /* iOS-SwiftUI-Widgets-WidgetExtension.appex in Embed Foundation Extensions */, - C410658755005122CB7BD031 /* iOS-SwiftUI-Widgets-LiveActivity.appex in Embed Foundation Extensions */, - ); - name = "Embed Foundation Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; - D8886BC84AB9B150C1ED7905 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 00A2B42B73A20D0E31281668 /* Sentry-iOS.framework in Embed Frameworks */, - BAF881547EAE2CACBC169131 /* SentrySampleShared.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets-WidgetExtension.xcconfig"; sourceTree = ""; }; - 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidget.swift; sourceTree = ""; }; - 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets.xcconfig"; sourceTree = ""; }; - 149B790B19CCDCCD77651B49 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsObjC.xcconfig; sourceTree = ""; }; - 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AssetCatalog.xcconfig; sourceTree = ""; }; - 1C10E740433EC0862705BD2B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 1E1192AED22950F7264B3282 /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; - 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetBundle.swift; sourceTree = ""; }; - 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "iOS-SwiftUI-Widgets.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarnings.xcconfig; sourceTree = ""; }; - 2BBDA2A81E64F7A5789BD5D5 /* LiveActivityBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityBundle.swift; sourceTree = ""; }; - 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangLanguage.xcconfig; sourceTree = ""; }; - 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleWidgetControl.swift; sourceTree = ""; }; - 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityWidget.swift; sourceTree = ""; }; - 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityAttributes.swift; sourceTree = ""; }; - 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; - 51774442E9250743D901AE0A /* Localization.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Localization.xcconfig; sourceTree = ""; }; - 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Packaging.xcconfig; sourceTree = ""; }; - 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-SwiftUI-Widgets-LiveActivity.xcconfig"; sourceTree = ""; }; - 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangWarningsCpp.xcconfig; sourceTree = ""; }; - 5C379869BA6B600711B514AA /* Deployment.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Deployment.xcconfig; sourceTree = ""; }; - 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SentrySampleShared; path = ../SentrySampleShared/SentrySampleShared.xcodeproj; sourceTree = ""; }; - 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Architectures.xcconfig; sourceTree = ""; }; - 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; - 7A5BE5B3A3FDBEE3FB8D52EF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 809F2A3935C158DCDB81C66F /* LiveActivityViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityViewModel.swift; sourceTree = ""; }; - 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS-Swift-Widget-Bridging-Header.h"; sourceTree = ""; }; - 844E572B807D8AFDAFA2BBE7 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; - 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = BuildOptions.xcconfig; sourceTree = ""; }; - 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangAnalyzer.xcconfig; sourceTree = ""; }; - 963761122A7CD280F6EC496C /* SentryExposure.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SentryExposure.h; sourceTree = ""; }; - 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangCppLanguage.xcconfig; sourceTree = ""; }; - AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-SwiftUI-Widgets-LiveActivity.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleConfigurationAppIntent.swift; sourceTree = ""; }; - B88304703D152A6C3A6249F8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "iOS-SwiftUI-Widgets.yml"; sourceTree = ""; }; - C7A32DBA6D6A3A3014F75EBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangPreprocessing.xcconfig; sourceTree = ""; }; - CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = "iOS-SwiftUI-Widgets-WidgetExtension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - D214D209886146D158EBF653 /* Entitlements.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Entitlements.entitlements; sourceTree = ""; }; - D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityView.swift; sourceTree = ""; }; - DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SearchPaths.xcconfig; sourceTree = ""; }; - DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Swift.xcconfig; sourceTree = ""; }; - E4689ECE0E21A2872542D677 /* Linking.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Linking.xcconfig; sourceTree = ""; }; - EDA164E21124BB974CA55E4A /* MainApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainApp.swift; sourceTree = ""; }; - F081F749B3F69ED90E1641EE /* _Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = _Common.xcconfig; sourceTree = ""; }; - F093C2215D4DE0E4EFA6D980 /* Sentry */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sentry; path = ../../Sentry.xcodeproj; sourceTree = ""; }; - F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangModules.xcconfig; sourceTree = ""; }; - FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = ClangObjCLanguage.xcconfig; sourceTree = ""; }; - FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeGeneration.xcconfig; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0E4763FB42D7C7D1B6F14108 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 82492D9C0F314B1CFA96B93C /* Sentry-iOS.framework in Frameworks */, - 4D81FA541F8607E47AB1C935 /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 52E949549D99168E88C209CA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 00EBFD85C8FF0BFE4AE51444 /* Sentry-iOS.framework in Frameworks */, - C5B3BFA8FEA22383570D0465 /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F7CAEAD643B385975C4240F5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 76E1B2896321F787F12BE2C3 /* Sentry-iOS.framework in Frameworks */, - 2ED227B9E061B91DAF58D7BF /* SentrySampleShared.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 12412823A76950EA3A6F4A1E /* Config */ = { - isa = PBXGroup; - children = ( - F081F749B3F69ED90E1641EE /* _Common.xcconfig */, - 5FBF1819E3DFF47177E3A36F /* Architectures.xcconfig */, - 196310663CB3EBF6BDF6E9B1 /* AssetCatalog.xcconfig */, - 8B35BEDC69F0FD564764FFE3 /* BuildOptions.xcconfig */, - 94D2B03D743F5910FB70E3DD /* ClangAnalyzer.xcconfig */, - 96A4523297DE6A9161AD4EE9 /* ClangCppLanguage.xcconfig */, - 2F3B322F45887E1CB5391F28 /* ClangLanguage.xcconfig */, - F32507DB78E3E799B83145F5 /* ClangModules.xcconfig */, - FE2BFF17E51BB98851744650 /* ClangObjCLanguage.xcconfig */, - CA6671B6A99DBC03A3E7A774 /* ClangPreprocessing.xcconfig */, - 2B6B30E5B007A80F47E9B209 /* ClangWarnings.xcconfig */, - 5852B8D937B9A717AC9E2783 /* ClangWarningsCpp.xcconfig */, - 17618448664A3684815F1573 /* ClangWarningsObjC.xcconfig */, - FF4F4E737A195B0D1626B659 /* CodeGeneration.xcconfig */, - 5C379869BA6B600711B514AA /* Deployment.xcconfig */, - E4689ECE0E21A2872542D677 /* Linking.xcconfig */, - 51774442E9250743D901AE0A /* Localization.xcconfig */, - 1E1192AED22950F7264B3282 /* Metal.xcconfig */, - 51A88DFDADBA85F4DAE38202 /* Packaging.xcconfig */, - DA21F50E48AC49A11322CCB1 /* SearchPaths.xcconfig */, - 6525F4DD1BBD1B4C36B4ABF8 /* Signing.xcconfig */, - DE44B5C60A0E77AA51A99EA9 /* Swift.xcconfig */, - ); - name = Config; - path = ../Shared/Config; - sourceTree = ""; - }; - 1688693D4D74BC2FEEC77F10 /* Products */ = { - isa = PBXGroup; - children = ( - 8B538B101740BB92239F1040 /* Sentry-iOS.framework */, - ); - name = Products; - sourceTree = ""; - }; - 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */ = { - isa = PBXGroup; - children = ( - F351AB0C79B4F4A26405F7B8 /* Resources */, - 37F2198026D3702138A1C8FA /* Sources */, - ); - path = "iOS-SwiftUI-Widgets"; - sourceTree = ""; - }; - 224704913839EB7C391AF43A /* Products */ = { - isa = PBXGroup; - children = ( - 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */, - ); - name = Products; - sourceTree = ""; - }; - 37F2198026D3702138A1C8FA /* Sources */ = { - isa = PBXGroup; - children = ( - D4837BEB5534D01407FD9E75 /* LiveActivityView.swift */, - 809F2A3935C158DCDB81C66F /* LiveActivityViewModel.swift */, - EDA164E21124BB974CA55E4A /* MainApp.swift */, - ); - path = Sources; - sourceTree = ""; - }; - 4291BCC5BFC3E8A546501509 /* iOS-SwiftUI-Widgets-LiveActivity */ = { - isa = PBXGroup; - children = ( - A4D65D144C8D1D0EF0CC3FFA /* Resources */, - 7E832A7867F1B9965A7AEA73 /* Sources */, - ); - path = "iOS-SwiftUI-Widgets-LiveActivity"; - sourceTree = ""; - }; - 5BCF46669C95D0C5AA64EB32 /* Headers */ = { - isa = PBXGroup; - children = ( - 839CA37AFE468F8DB114B7EA /* iOS-Swift-Widget-Bridging-Header.h */, - 963761122A7CD280F6EC496C /* SentryExposure.h */, - ); - path = Headers; - sourceTree = ""; - }; - 64610524F65A780DF9BFB212 /* Products */ = { - isa = PBXGroup; - children = ( - AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */, - CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */, - 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */, - ); - name = Products; - sourceTree = ""; - }; - 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */ = { - isa = PBXGroup; - children = ( - 8F7F6649D6F4D4D09A89EDCF /* Resources */, - 784318D35811F9E6AA983341 /* Sources */, - ); - path = "iOS-SwiftUI-Widgets-WidgetExtension"; - sourceTree = ""; - }; - 6ECE8158CD72EC6778BD4F1E /* Projects */ = { - isa = PBXGroup; - children = ( - F093C2215D4DE0E4EFA6D980 /* Sentry */, - 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */, - ); - name = Projects; - sourceTree = ""; - }; - 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */ = { - isa = PBXGroup; - children = ( - 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */, - 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */, - 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */, - ); - name = "iOS-SwiftUI-Widgets"; - path = .; - sourceTree = ""; - }; - 784318D35811F9E6AA983341 /* Sources */ = { - isa = PBXGroup; - children = ( - B120A7B7E7CDA2E13EA357A4 /* SampleConfigurationAppIntent.swift */, - 0ECE10C04AF177DEE39C3741 /* SampleWidget.swift */, - 237FEC1550A67DDF7948CFC8 /* SampleWidgetBundle.swift */, - 35D83218361FAB3360A43FF8 /* SampleWidgetControl.swift */, - ); - path = Sources; - sourceTree = ""; - }; - 7E832A7867F1B9965A7AEA73 /* Sources */ = { - isa = PBXGroup; - children = ( - 2BBDA2A81E64F7A5789BD5D5 /* LiveActivityBundle.swift */, - 390E7D5C87007CF8A805C089 /* LiveActivityWidget.swift */, - ); - path = Sources; - sourceTree = ""; - }; - 8F7F6649D6F4D4D09A89EDCF /* Resources */ = { - isa = PBXGroup; - children = ( - DBAB8A46BE0E35ECF5DE304A /* Assets.xcassets */, - D214D209886146D158EBF653 /* Entitlements.entitlements */, - C7A32DBA6D6A3A3014F75EBF /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - 97261E177AEFD1FBF9AFD26C /* Data */ = { - isa = PBXGroup; - children = ( - 390EE81AB45CB2CFB0C302D5 /* LiveActivityAttributes.swift */, - ); - path = Data; - sourceTree = ""; - }; - A4D65D144C8D1D0EF0CC3FFA /* Resources */ = { - isa = PBXGroup; - children = ( - 7A5BE5B3A3FDBEE3FB8D52EF /* Assets.xcassets */, - 844E572B807D8AFDAFA2BBE7 /* Entitlements.entitlements */, - 149B790B19CCDCCD77651B49 /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; - B067CD4E68396FF941842D6F /* Shared */ = { - isa = PBXGroup; - children = ( - 97261E177AEFD1FBF9AFD26C /* Data */, - 5BCF46669C95D0C5AA64EB32 /* Headers */, - ); - path = Shared; - sourceTree = ""; - }; - B881B0C8A980D4462DB07732 = { - isa = PBXGroup; - children = ( - B9FF238E8ACED2C98ED3E004 /* iOS-SwiftUI-Widgets.yml */, - 12412823A76950EA3A6F4A1E /* Config */, - 20C2ED16047494F4E7A3CB64 /* iOS-SwiftUI-Widgets */, - 713ECB770FFEB2DC09060073 /* iOS-SwiftUI-Widgets */, - 4291BCC5BFC3E8A546501509 /* iOS-SwiftUI-Widgets-LiveActivity */, - 6D269449F86664A48307455D /* iOS-SwiftUI-Widgets-WidgetExtension */, - B067CD4E68396FF941842D6F /* Shared */, - 64610524F65A780DF9BFB212 /* Products */, - 6ECE8158CD72EC6778BD4F1E /* Projects */, - ); - sourceTree = ""; - }; - F351AB0C79B4F4A26405F7B8 /* Resources */ = { - isa = PBXGroup; - children = ( - B88304703D152A6C3A6249F8 /* Assets.xcassets */, - 45D0B752BDA7CA6AC5F9E734 /* Entitlements.entitlements */, - 1C10E740433EC0862705BD2B /* Info.plist */, - ); - path = Resources; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 37173ED846C393202EDE6F71 /* iOS-SwiftUI-Widgets-LiveActivity */ = { - isa = PBXNativeTarget; - buildConfigurationList = 070200C57AB30631FE740A64 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-LiveActivity" */; - buildPhases = ( - 4CAE9BE46F6A17062C743956 /* Sources */, - D97E6CEC931D92D395E54FFE /* Resources */, - 52E949549D99168E88C209CA /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 16AE9AF1906E06B23E66FBEF /* PBXTargetDependency */, - 2901C059CC4BE9D9A8FFB118 /* PBXTargetDependency */, - ); - name = "iOS-SwiftUI-Widgets-LiveActivity"; - packageProductDependencies = ( - ); - productName = "iOS-SwiftUI-Widgets-LiveActivity"; - productReference = AC285AB73685ECC7333910FD /* iOS-SwiftUI-Widgets-LiveActivity.appex */; - productType = "com.apple.product-type.app-extension"; - }; - 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */; - buildPhases = ( - 79071996082F166983FE9D74 /* Sources */, - B70BBFEAC3F6528B1EBF1FF7 /* Resources */, - 0E4763FB42D7C7D1B6F14108 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 6E995F902ABB799E207C4DB3 /* PBXTargetDependency */, - 65CA940D29A6140EFDA46135 /* PBXTargetDependency */, - ); - name = "iOS-SwiftUI-Widgets-WidgetExtension"; - packageProductDependencies = ( - ); - productName = "iOS-SwiftUI-Widgets-WidgetExtension"; - productReference = CAB2A45774261B103D71A7D8 /* iOS-SwiftUI-Widgets-WidgetExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; - 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */ = { - isa = PBXNativeTarget; - buildConfigurationList = 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */; - buildPhases = ( - DC38EC959ED2BB986CE38BD2 /* Sources */, - 769D4ACB4830B4AE8EE3EF73 /* Resources */, - F7CAEAD643B385975C4240F5 /* Frameworks */, - 6856E2BCC9C43B477A5C69B6 /* Embed Foundation Extensions */, - D8886BC84AB9B150C1ED7905 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 9AAE14BE8CD74FFC79074594 /* PBXTargetDependency */, - F165474953FA4A56979356D4 /* PBXTargetDependency */, - A2F9A537196C85E11DA332B6 /* PBXTargetDependency */, - 6D26E5089C9C2F00B5B3407D /* PBXTargetDependency */, - ); - name = "iOS-SwiftUI-Widgets"; - packageProductDependencies = ( - ); - productName = "iOS-SwiftUI-Widgets"; - productReference = 24907997E8B40A8FD762AB32 /* iOS-SwiftUI-Widgets.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D6B98D3A58C262EE28C50B9E /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; - TargetAttributes = { - 37173ED846C393202EDE6F71 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - 5A1C22273766A4B9F99FB9F6 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - 8E239B450D0DE382D706B6B7 = { - DevelopmentTeam = 97JCY7859U; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = B881B0C8A980D4462DB07732; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 1688693D4D74BC2FEEC77F10 /* Products */; - ProjectRef = F093C2215D4DE0E4EFA6D980 /* Sentry */; - }, - { - ProductGroup = 224704913839EB7C391AF43A /* Products */; - ProjectRef = 5C4562FFFCFD862D46C6E4C8 /* SentrySampleShared */; - }, - ); - projectRoot = ""; - targets = ( - 8E239B450D0DE382D706B6B7 /* iOS-SwiftUI-Widgets */, - 37173ED846C393202EDE6F71 /* iOS-SwiftUI-Widgets-LiveActivity */, - 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 408F6B39917ABFDF950B9EED /* SentrySampleShared.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = SentrySampleShared.framework; - remoteRef = 2E946D944F47996BBCAFE14D /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 8B538B101740BB92239F1040 /* Sentry-iOS.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = "Sentry-iOS.framework"; - remoteRef = 6347742289F4EDE3C00D212E /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 769D4ACB4830B4AE8EE3EF73 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CC0C276151989F36BF0EC57C /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B70BBFEAC3F6528B1EBF1FF7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4B4916E51E50A0ED3F3E0307 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D97E6CEC931D92D395E54FFE /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E250C0921C219246793FC8E9 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4CAE9BE46F6A17062C743956 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 13023A9E33DCCAA00AE04919 /* LiveActivityAttributes.swift in Sources */, - B120A7FC1173608E28B32878 /* LiveActivityBundle.swift in Sources */, - 221EDE644A6F0F0721AEBB6B /* LiveActivityWidget.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 79071996082F166983FE9D74 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 20815A5C341E5E7AF2D951E7 /* LiveActivityAttributes.swift in Sources */, - 3EBFF7B8B288199DE5D9280E /* SampleConfigurationAppIntent.swift in Sources */, - AA3429207848D8ACF0DC2563 /* SampleWidget.swift in Sources */, - 9BE92817B8CEC595E584EF28 /* SampleWidgetBundle.swift in Sources */, - 0734E10B2932AE6D6C6BFEED /* SampleWidgetControl.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DC38EC959ED2BB986CE38BD2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D227C1CF3F22B3BB0C0A3359 /* LiveActivityAttributes.swift in Sources */, - CEB7A4AD93EC93B09BADC6A3 /* LiveActivityView.swift in Sources */, - 2BB0F033107EE1C3AA8BB113 /* LiveActivityViewModel.swift in Sources */, - 96EA82C3A685F953DC0EF095 /* MainApp.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 16AE9AF1906E06B23E66FBEF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = 62B95AE82B7A9CD381695B73 /* PBXContainerItemProxy */; - }; - 2901C059CC4BE9D9A8FFB118 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = 3EDDB1E318FA394FDD463EEF /* PBXContainerItemProxy */; - }; - 65CA940D29A6140EFDA46135 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = F4B89680F2E6B9CE127ADFF2 /* PBXContainerItemProxy */; - }; - 6D26E5089C9C2F00B5B3407D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 37173ED846C393202EDE6F71 /* iOS-SwiftUI-Widgets-LiveActivity */; - targetProxy = 685DC4895809A5DBE2D1CDCC /* PBXContainerItemProxy */; - }; - 6E995F902ABB799E207C4DB3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = CCE7D3B7939D3B6F6C51E7AA /* PBXContainerItemProxy */; - }; - 9AAE14BE8CD74FFC79074594 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Sentry; - targetProxy = 02562A2AAA09F57681225B4F /* PBXContainerItemProxy */; - }; - A2F9A537196C85E11DA332B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A1C22273766A4B9F99FB9F6 /* iOS-SwiftUI-Widgets-WidgetExtension */; - targetProxy = 206F31F59F2C041805232A2F /* PBXContainerItemProxy */; - }; - F165474953FA4A56979356D4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SentrySampleShared; - targetProxy = 705952D4A520D3DAAC164744 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 180D348244D8D9212C67AE1A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements"; - INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; - }; - name = Release; - }; - 1B9F865ECE37130BDBB5A023 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 12171C856F4A0A8AB628D056 /* iOS-SwiftUI-Widgets.xcconfig */; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets/Resources/Entitlements.entitlements"; - INFOPLIST_FILE = "iOS-SwiftUI-Widgets/Resources/Info.plist"; - }; - name = Debug; - }; - 221CEBB496C7E9ADB264FBDE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements"; - INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; - }; - name = Release; - }; - 6CA1E23D2E331683FA217276 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "DEBUG=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 761A2113671B4BD4CF6F2759 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 8BDFA6BD2B7E61EAB0B43EB2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements"; - INFOPLIST_FILE = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist"; - }; - name = Debug; - }; - 9CE8FF7BC1499AAC7538B778 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 015A3634E549DECA810DA5C6 /* iOS-SwiftUI-Widgets-WidgetExtension.xcconfig */; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Entitlements.entitlements"; - INFOPLIST_FILE = "iOS-SwiftUI-Widgets-WidgetExtension/Resources/Info.plist"; - }; - name = Debug; - }; - E9C055E9DD3FE2CBB51EF61F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 553AF3F0937DC6C4C9ECDB17 /* iOS-SwiftUI-Widgets-LiveActivity.xcconfig */; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Entitlements.entitlements"; - INFOPLIST_FILE = "iOS-SwiftUI-Widgets-LiveActivity/Resources/Info.plist"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 070200C57AB30631FE740A64 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-LiveActivity" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8BDFA6BD2B7E61EAB0B43EB2 /* Debug */, - E9C055E9DD3FE2CBB51EF61F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 1458D1D214F0C9E5A81F1482 /* Build configuration list for PBXProject "iOS-SwiftUI-Widgets" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6CA1E23D2E331683FA217276 /* Debug */, - 761A2113671B4BD4CF6F2759 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 30A33C7A02ED7CC864553D30 /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1B9F865ECE37130BDBB5A023 /* Debug */, - 180D348244D8D9212C67AE1A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 43FCF799CF2ABEAF734043DB /* Build configuration list for PBXNativeTarget "iOS-SwiftUI-Widgets-WidgetExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9CE8FF7BC1499AAC7538B778 /* Debug */, - 221CEBB496C7E9ADB264FBDE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; -/* End XCConfigurationList section */ - }; - rootObject = D6B98D3A58C262EE28C50B9E /* Project object */; -} diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 280eff1f10b..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,10 +0,0 @@ - - - - - BuildSystemType - Latest - DerivedDataLocationStyle - Default - - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme deleted file mode 100644 index 4605628dff7..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-LiveActivity.xcscheme +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme deleted file mode 100644 index 6e98cd75439..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetControl.xcscheme +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme deleted file mode 100644 index e2670c797e6..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets-WidgetExtension.xcscheme +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme b/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme deleted file mode 100644 index 4605628dff7..00000000000 --- a/Samples/iOS-SwiftUI-Widgets/iOS-SwiftUI-Widgets.xcodeproj/xcshareddata/xcschemes/iOS-SwiftUI-Widgets.xcscheme +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 104048f992419130ac32a328388154f8d547b632 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 10 Nov 2025 08:46:42 +0000 Subject: [PATCH 16/19] Test: Restore SentryExtensionDetector in ANR tests Co-authored-by: phil.niedertscheider --- .../ANR/SentryANRTrackingIntegrationTests.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift index d93ba03da7c..97ab57ac498 100644 --- a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift +++ b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift @@ -24,6 +24,7 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { private var fixture: Fixture! private var sut: SentryANRTrackingIntegration! + private var originalExtensionDetector: SentryExtensionDetector! override var options: Options { self.fixture.options @@ -32,6 +33,9 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { override func setUp() { super.setUp() fixture = Fixture() + + // Store original extensionDetector to restore in tearDown + originalExtensionDetector = Dependencies.extensionDetector SentryDependencyContainer.sharedInstance().dispatchQueueWrapper = TestSentryDispatchQueueWrapper() SentryDependencyContainer.sharedInstance().debugImageProvider = fixture.debugImageProvider @@ -39,6 +43,12 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { override func tearDown() { sut?.uninstall() + + // Restore original extensionDetector to prevent test pollution + if let originalExtensionDetector = originalExtensionDetector { + Dependencies.extensionDetector = originalExtensionDetector + } + clearTestState() super.tearDown() } From 4606e3591f4ad082b2dfb2dc876cdf4f6ea9bd2b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 10 Nov 2025 09:17:31 +0000 Subject: [PATCH 17/19] Fix: Update Info.plist path in ActionExtension config Co-authored-by: phil.niedertscheider --- Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig b/Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig index 701eed0f9d9..061f3edfaba 100644 --- a/Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension.xcconfig @@ -1,7 +1,7 @@ #include "../Shared/Config/_Common.xcconfig" PRODUCT_BUNDLE_IDENTIFIER = io.sentry.sample.iOS-Swift.ActionExtension -INFOPLIST_FILE = iOS-Swift-ActionExtension/Info.plist +INFOPLIST_FILE = iOS-Swift-ActionExtension/Resources/Info.plist PROVISIONING_PROFILE_SPECIFIER_Debug = match Development io.sentry.sample.iOS-Swift.ActionExtension PROVISIONING_PROFILE_SPECIFIER_Test = match Development io.sentry.sample.iOS-Swift.ActionExtension From 3f3b3b92fa30c04811f0110a45a704ea53cc56cc Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Thu, 13 Nov 2025 13:06:56 +0100 Subject: [PATCH 18/19] refactor ANR tests --- CHANGELOG.md | 9 +- Samples/iOS-Swift/iOS-Swift.yml | 1 - Sources/Swift/Helper/Dependencies.swift | 2 +- .../SentryANRTrackingIntegrationTests.swift | 148 +++++++++--------- 4 files changed, 79 insertions(+), 81 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a70f855936f..93da1296c0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +### Breaking Changes + +- App hang tracking is now automatically disabled for Widgets, Live Activities, Action Extensions, (Siri) Intent Extensions, and Share Extensions (#6670). + These components run in separate processes or sandboxes with different execution characteristics, which can cause false positive app hang reports. + ## 9.0.0-alpha.1 ### Breaking Changes @@ -107,8 +114,6 @@ If you need a precompiled XCFramework built with Xcode 15, continue using Sentry SDK 8.x.x. - Set `SentryException.type` to `nil` when `NSException` has no `reason` (#6653). The backend then can provide a proper message when there is no reason. - Rename `SentryLog.Level` and `SentryLog.Attribute` for ObjC (#6666) -- App hang tracking is now automatically disabled for Widgets, Live Activities, Action Extensions, (Siri) Intent Extensions, and Share Extensions (#6670). - These components run in separate processes or sandboxes with different execution characteristics, which can cause false positive app hang reports. ### Fixes diff --git a/Samples/iOS-Swift/iOS-Swift.yml b/Samples/iOS-Swift/iOS-Swift.yml index 3d22068e70b..ea658b3cc51 100644 --- a/Samples/iOS-Swift/iOS-Swift.yml +++ b/Samples/iOS-Swift/iOS-Swift.yml @@ -36,7 +36,6 @@ targets: - target: iOS-Swift-ShareExtension - target: iOS-Swift-ActionExtension - target: iOS-Swift-IntentExtension - - target: Sentry/SentrySwiftLog configFiles: Debug: iOS-Swift.xcconfig Release: iOS-Swift.xcconfig diff --git a/Sources/Swift/Helper/Dependencies.swift b/Sources/Swift/Helper/Dependencies.swift index 3dbc5656579..d98c66464f4 100644 --- a/Sources/Swift/Helper/Dependencies.swift +++ b/Sources/Swift/Helper/Dependencies.swift @@ -8,7 +8,7 @@ @objc public static let sessionReplayEnvironmentChecker: SentrySessionReplayEnvironmentChecker = { SentrySessionReplayEnvironmentChecker(infoPlistWrapper: Dependencies.infoPlistWrapper) }() - @objc public static let extensionDetector: SentryExtensionDetector = { + @objc public static var extensionDetector: SentryExtensionDetector = { SentryExtensionDetector(infoPlistWrapper: Dependencies.infoPlistWrapper) }() @objc public static let dispatchQueueWrapper = SentryDispatchQueueWrapper() diff --git a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift index 97ab57ac498..408720f1c6b 100644 --- a/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift +++ b/Tests/SentryTests/Integrations/ANR/SentryANRTrackingIntegrationTests.swift @@ -11,6 +11,10 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { let currentDate = TestCurrentDateProvider() let debugImageProvider = TestDebugImageProvider() + let infoPlistWrapper = TestInfoPlistWrapper() + let dispatchQueueWrapper = TestSentryDispatchQueueWrapper() + + private var originalExtensionDetector: SentryExtensionDetector! init() { options = Options() @@ -20,11 +24,28 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { debugImageProvider.debugImages = [TestData.debugImage] } + + func setUpDI(extensionDetector: SentryExtensionDetector) throws { + SentryDependencyContainer.sharedInstance().fileManager = try TestFileManager( + options: options, + dateProvider: currentDate, + dispatchQueueWrapper: dispatchQueueWrapper + ) + + originalExtensionDetector = Dependencies.extensionDetector + Dependencies.extensionDetector = extensionDetector + } + + func tearDownDI() throws { + SentryDependencyContainer.sharedInstance().fileManager = nil + if let extensionDetector = originalExtensionDetector { + Dependencies.extensionDetector = extensionDetector + } + } } private var fixture: Fixture! private var sut: SentryANRTrackingIntegration! - private var originalExtensionDetector: SentryExtensionDetector! override var options: Options { self.fixture.options @@ -33,21 +54,15 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { override func setUp() { super.setUp() fixture = Fixture() - - // Store original extensionDetector to restore in tearDown - originalExtensionDetector = Dependencies.extensionDetector - SentryDependencyContainer.sharedInstance().dispatchQueueWrapper = TestSentryDispatchQueueWrapper() + SentryDependencyContainer.sharedInstance().dispatchQueueWrapper = fixture.dispatchQueueWrapper SentryDependencyContainer.sharedInstance().debugImageProvider = fixture.debugImageProvider } - override func tearDown() { + override func tearDownWithError() throws { sut?.uninstall() - - // Restore original extensionDetector to prevent test pollution - if let originalExtensionDetector = originalExtensionDetector { - Dependencies.extensionDetector = originalExtensionDetector - } + + try fixture.tearDownDI() clearTestState() super.tearDown() @@ -731,22 +746,18 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { func testEventIsNotANR() { XCTAssertFalse(Event().isAppHangEvent) } - - func testInstall_notRunningInExtension_shouldInstall() { + + func testInstall_notRunningInExtension_shouldInstall() throws { // Arrange - let mockInfoPlist = TestInfoPlistWrapper() - mockInfoPlist.mockGetAppValueDictionaryThrowError( + fixture.infoPlistWrapper.mockGetAppValueDictionaryThrowError( forKey: SentryInfoPlistKey.extension.rawValue, error: SentryInfoPlistError.keyNotFound(key: SentryInfoPlistKey.extension.rawValue) ) - Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) - - let options = Options() - options.dsn = SentryANRTrackingIntegrationTests.dsn - options.enableAppHangTracking = true - options.appHangTimeoutInterval = 2.0 - + try fixture.setUpDI( + extensionDetector: SentryExtensionDetector(infoPlistWrapper: fixture.infoPlistWrapper) + ) crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() // Act @@ -757,23 +768,19 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { XCTAssertNotNil(Dynamic(sut).tracker.asAnyObject, "Tracker should be initialized") } - func testInstall_runningInWidgetExtension_shouldNotInstall() { + func testInstall_runningInWidgetExtension_shouldNotInstall() throws { // Arrange - let mockInfoPlist = TestInfoPlistWrapper() - mockInfoPlist.mockGetAppValueDictionaryReturnValue( + fixture.infoPlistWrapper.mockGetAppValueDictionaryReturnValue( forKey: SentryInfoPlistKey.extension.rawValue, value: ["NSExtensionPointIdentifier": "com.apple.widgetkit-extension"] ) - Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) - - let options = Options() - options.dsn = SentryANRTrackingIntegrationTests.dsn - options.enableAppHangTracking = true - options.appHangTimeoutInterval = 2.0 - + try fixture.setUpDI( + extensionDetector: SentryExtensionDetector(infoPlistWrapper: fixture.infoPlistWrapper) + ) crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() - + // Act let result = sut.install(with: options) @@ -782,23 +789,19 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") } - func testInstall_runningInIntentExtension_shouldNotInstall() { + func testInstall_runningInIntentExtension_shouldNotInstall() throws { // Arrange - let mockInfoPlist = TestInfoPlistWrapper() - mockInfoPlist.mockGetAppValueDictionaryReturnValue( + fixture.infoPlistWrapper.mockGetAppValueDictionaryReturnValue( forKey: SentryInfoPlistKey.extension.rawValue, value: ["NSExtensionPointIdentifier": "com.apple.intents-service"] ) - Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) - - let options = Options() - options.dsn = SentryANRTrackingIntegrationTests.dsn - options.enableAppHangTracking = true - options.appHangTimeoutInterval = 2.0 - + try fixture.setUpDI( + extensionDetector: SentryExtensionDetector(infoPlistWrapper: fixture.infoPlistWrapper) + ) crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() - + // Act let result = sut.install(with: options) @@ -807,23 +810,19 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") } - func testInstall_runningInActionExtension_shouldNotInstall() { + func testInstall_runningInActionExtension_shouldNotInstall() throws { // Arrange - let mockInfoPlist = TestInfoPlistWrapper() - mockInfoPlist.mockGetAppValueDictionaryReturnValue( + fixture.infoPlistWrapper.mockGetAppValueDictionaryReturnValue( forKey: SentryInfoPlistKey.extension.rawValue, value: ["NSExtensionPointIdentifier": "com.apple.ui-services"] ) - Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) - - let options = Options() - options.dsn = SentryANRTrackingIntegrationTests.dsn - options.enableAppHangTracking = true - options.appHangTimeoutInterval = 2.0 - + try fixture.setUpDI( + extensionDetector: SentryExtensionDetector(infoPlistWrapper: fixture.infoPlistWrapper) + ) crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() - + // Act let result = sut.install(with: options) @@ -832,23 +831,19 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") } - func testInstall_runningInShareExtension_shouldNotInstall() { + func testInstall_runningInShareExtension_shouldNotInstall() throws { // Arrange - let mockInfoPlist = TestInfoPlistWrapper() - mockInfoPlist.mockGetAppValueDictionaryReturnValue( + fixture.infoPlistWrapper.mockGetAppValueDictionaryReturnValue( forKey: SentryInfoPlistKey.extension.rawValue, value: ["NSExtensionPointIdentifier": "com.apple.share-services"] ) - Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) - - let options = Options() - options.dsn = SentryANRTrackingIntegrationTests.dsn - options.enableAppHangTracking = true - options.appHangTimeoutInterval = 2.0 - + try fixture.setUpDI( + extensionDetector: SentryExtensionDetector(infoPlistWrapper: fixture.infoPlistWrapper) + ) crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() - + // Act let result = sut.install(with: options) @@ -857,23 +852,22 @@ class SentryANRTrackingIntegrationTests: SentrySDKIntegrationTestsBase { XCTAssertNil(Dynamic(sut).tracker.asAnyObject, "Tracker should not be initialized") } - func testInstall_runningInUnknownExtension_shouldInstall() { + func testInstall_runningInUnknownExtension_shouldInstall() throws { // Arrange - let mockInfoPlist = TestInfoPlistWrapper() - mockInfoPlist.mockGetAppValueDictionaryReturnValue( + fixture.infoPlistWrapper.mockGetAppValueDictionaryReturnValue( forKey: SentryInfoPlistKey.extension.rawValue, value: ["NSExtensionPointIdentifier": "com.apple.unknown-extension"] ) - Dependencies.extensionDetector = SentryExtensionDetector(infoPlistWrapper: mockInfoPlist) - - let options = Options() - options.dsn = SentryANRTrackingIntegrationTests.dsn - options.enableAppHangTracking = true - options.appHangTimeoutInterval = 2.0 - + try fixture.setUpDI( + extensionDetector: SentryExtensionDetector(infoPlistWrapper: fixture.infoPlistWrapper) + ) + defer { + try? fixture.tearDownDI() + } crashWrapper.internalIsBeingTraced = false + sut = SentryANRTrackingIntegration() - + // Act let result = sut.install(with: options) From c289fbf83b1b98b5dbc6e1cc0f727c0b6cffd7d6 Mon Sep 17 00:00:00 2001 From: Philip Niedertscheider Date: Thu, 13 Nov 2025 13:33:24 +0100 Subject: [PATCH 19/19] refactor: Remove @testable from Sentry imports in ActionViewController, IntentHandler, and ShareViewController --- .../Sources/ActionViewController.swift | 2 +- .../iOS-Swift-IntentExtension/Sources/IntentHandler.swift | 2 +- .../iOS-Swift-ShareExtension/Sources/ShareViewController.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift index fb1d90e6f43..f11aa05216f 100644 --- a/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift-ActionExtension/Sources/ActionViewController.swift @@ -1,5 +1,5 @@ import Sentry -@_spi(Private) @testable import Sentry +@_spi(Private) import Sentry import SentrySampleShared import UIKit import UniformTypeIdentifiers diff --git a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift index b00062c07ff..2a90af36828 100644 --- a/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift +++ b/Samples/iOS-Swift/iOS-Swift-IntentExtension/Sources/IntentHandler.swift @@ -1,6 +1,6 @@ import Intents import Sentry -@_spi(Private) @testable import Sentry +@_spi(Private) import Sentry import SentrySampleShared class IntentHandler: INExtension, INSendMessageIntentHandling { diff --git a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift index 5c6b630a19f..666883156c0 100644 --- a/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift +++ b/Samples/iOS-Swift/iOS-Swift-ShareExtension/Sources/ShareViewController.swift @@ -1,4 +1,4 @@ -@_spi(Private) @testable import Sentry +@_spi(Private) import Sentry import SentrySampleShared import Social import UIKit