From bc50957010f3010cd3ff5f3943eaf1ca397c6e2e Mon Sep 17 00:00:00 2001 From: Karl Stenerud Date: Wed, 2 Oct 2024 10:19:30 +0200 Subject: [PATCH 01/51] Add initial infrastructure check scenarios --- .../default/00_infrastructure_check.feature | 10 +++++++ .../ios/Fixture.xcodeproj/project.pbxproj | 8 ++++++ .../InfraCheckMinimalBugsnagScenario.swift | 20 ++++++++++++++ .../InfraCheckNoBugsnagScenario.swift | 26 +++++++++++++++++++ .../fixtures/ios/Scenarios/Scenario.swift | 21 +++++++++------ 5 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 features/default/00_infrastructure_check.feature create mode 100644 features/fixtures/ios/Scenarios/InfraCheckMinimalBugsnagScenario.swift create mode 100644 features/fixtures/ios/Scenarios/InfraCheckNoBugsnagScenario.swift diff --git a/features/default/00_infrastructure_check.feature b/features/default/00_infrastructure_check.feature new file mode 100644 index 00000000..b88a07e3 --- /dev/null +++ b/features/default/00_infrastructure_check.feature @@ -0,0 +1,10 @@ +Feature: Infrastructure checks + + Scenario: Check infrastructure when Bugsnag is never started + Given I run "InfraCheckNoBugsnagScenario" + And I wait to receive a reflection + + Scenario: Check infrastructure with minimal Bugsnag activity + Given I run "InfraCheckMinimalBugsnagScenario" + And I wait to receive a reflection + And I wait for 1 span diff --git a/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj b/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj index 084e1aeb..d431c0ae 100644 --- a/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj +++ b/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj @@ -39,6 +39,8 @@ 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */; }; 0983A17B2B14BB2000DDF4FF /* BugsnagPerformanceSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0983A17A2B14BB2000DDF4FF /* BugsnagPerformanceSwift */; }; 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */; }; + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */; }; + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */; }; 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */; }; 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */; }; 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */; }; @@ -123,6 +125,8 @@ 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNullNetworkCallbackScenario.swift; sourceTree = ""; }; 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIScenario.swift; sourceTree = ""; }; 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadPhaseScenario.swift; sourceTree = ""; }; + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckNoBugsnagScenario.swift; sourceTree = ""; }; + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckMinimalBugsnagScenario.swift; sourceTree = ""; }; 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnEndCallbackScenario.swift; sourceTree = ""; }; 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ErrorGenerator.h; sourceTree = ""; }; 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ErrorGenerator.m; sourceTree = ""; }; @@ -292,6 +296,8 @@ 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */, 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */, 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */, + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */, + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */, CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */, 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */, 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */, @@ -467,6 +473,7 @@ 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */, CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */, 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */, + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */, CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */, 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */, 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */, @@ -476,6 +483,7 @@ 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */, CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */, 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */, + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */, CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */, CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */, 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */, diff --git a/features/fixtures/ios/Scenarios/InfraCheckMinimalBugsnagScenario.swift b/features/fixtures/ios/Scenarios/InfraCheckMinimalBugsnagScenario.swift new file mode 100644 index 00000000..dc8245f7 --- /dev/null +++ b/features/fixtures/ios/Scenarios/InfraCheckMinimalBugsnagScenario.swift @@ -0,0 +1,20 @@ +// +// InfraCheckMinimalBugsnagScenario.swift +// Fixture +// +// Created by Karl Stenerud on 02.10.24. +// + +import Foundation + +// Scenario for testing the infrastructure with minimal Bugsnag involvement. +@objcMembers +class InfraCheckMinimalBugsnagScenario: Scenario { + override func run() { + logDebug("InfraCheckMinimalBugsnagScenario.run(): Calling reflect URL") + callReflectUrl(appendingToUrl: "?status=200") + logDebug("InfraCheckMinimalBugsnagScenario.run(): Opening and closing a basic span") + BugsnagPerformance.startSpan(name: "test").end() + logDebug("InfraCheckMinimalBugsnagScenario.run(): Done") + } +} diff --git a/features/fixtures/ios/Scenarios/InfraCheckNoBugsnagScenario.swift b/features/fixtures/ios/Scenarios/InfraCheckNoBugsnagScenario.swift new file mode 100644 index 00000000..a2e5b9bd --- /dev/null +++ b/features/fixtures/ios/Scenarios/InfraCheckNoBugsnagScenario.swift @@ -0,0 +1,26 @@ +// +// InfraCheckNoBugsnagScenario.swift +// Fixture +// +// Created by Karl Stenerud on 02.10.24. +// + +import Foundation + +// Scenario for testing the infrastructure with NO Bugsnag involvement. +@objcMembers +class InfraCheckNoBugsnagScenario: Scenario { + override func configure() { + logDebug("InfraCheckNoBugsnagScenario.configure(): Doing nothing") + } + + override func startBugsnag() { + logDebug("InfraCheckNoBugsnagScenario.startBugsnag(): Doing nothing") + } + + override func run() { + logDebug("InfraCheckNoBugsnagScenario.run(): Calling reflect URL") + callReflectUrl(appendingToUrl: "?status=200") + logDebug("InfraCheckNoBugsnagScenario.run(): Done") + } +} diff --git a/features/fixtures/ios/Scenarios/Scenario.swift b/features/fixtures/ios/Scenarios/Scenario.swift index ac5d9d9e..c08de86f 100644 --- a/features/fixtures/ios/Scenarios/Scenario.swift +++ b/features/fixtures/ios/Scenarios/Scenario.swift @@ -15,11 +15,11 @@ class Scenario: NSObject { let fixtureConfig: FixtureConfig var config = BugsnagPerformanceConfiguration.loadConfig() var pendingMeasurements: [MazerunnerMeasurement] = [] - + private override init() { fatalError("do not use the default init of Scenario") } - + required init(fixtureConfig: FixtureConfig) { self.fixtureConfig = fixtureConfig } @@ -50,11 +50,11 @@ class Scenario: NSObject { prefixes: [URL]) -> BugsnagPerformanceNetworkRequestInfo { if info.url == nil { return info - } + } if urlHasAnyPrefixIn(url: info.url!, prefixes: prefixes) { - info.url = nil - } + info.url = nil + } return info } @@ -102,7 +102,7 @@ class Scenario: NSObject { BugsnagPerformance.start(configuration: config) }, measurement: "start") } - + func run() { logError("Scenario.run() has not been overridden!") fatalError("To be implemented by subclass") @@ -136,7 +136,7 @@ class Scenario: NSObject { // Wait long enough to allow the current batch to be packaged and sent Thread.sleep(forTimeInterval: 1.0) } - + func performAndReportDuration(_ body: () -> Void, measurement: String) { let startDate = Date() body() @@ -147,7 +147,7 @@ class Scenario: NSObject { let metrics = ["duration.nanos": "\(duration.nanosecond ?? 0)"] pendingMeasurements.append((name: measurement, metrics: metrics)) } - + func report(metrics: [String: Any], name: String) { var request = URLRequest(url: fixtureConfig.metricsURL) request.httpMethod = "POST" @@ -167,4 +167,9 @@ class Scenario: NSObject { URLSession.shared.dataTask(with: request).resume() } + + func callReflectUrl(appendingToUrl: String) { + let url = URL(string: appendingToUrl, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } } From 9582c968962f13edead27f9660ea7b74d73e1cdf Mon Sep 17 00:00:00 2001 From: Karl Stenerud Date: Wed, 2 Oct 2024 16:33:32 +0200 Subject: [PATCH 02/51] Fix visionOS compile issues --- CHANGELOG.md | 7 +++++++ Package.swift | 2 +- Sources/BugsnagPerformance/Private/ResourceAttributes.mm | 2 ++ .../BugsnagPerformance/Private/SpanAttributesProvider.mm | 4 ++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51120a8d..9161d117 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========= +## TBD + +### Bug fixes + +* Fix visionOS compilation errors. Note that visionOS is not yet officially supported. + [327](https://github.com/bugsnag/bugsnag-cocoa-performance/pull/327) + ## 1.10.0 (2024-09-30) ### Enhancements diff --git a/Package.swift b/Package.swift index 6609d1de..bac2ea57 100644 --- a/Package.swift +++ b/Package.swift @@ -29,7 +29,7 @@ let package = Package( linkerSettings: [ .linkedFramework("SystemConfiguration"), .linkedFramework("UIKit"), - .linkedFramework("CoreTelephony"), + .linkedFramework("CoreTelephony", .when(platforms: [.iOS])), ] ), .target( diff --git a/Sources/BugsnagPerformance/Private/ResourceAttributes.mm b/Sources/BugsnagPerformance/Private/ResourceAttributes.mm index ff4a5098..8a5389b9 100644 --- a/Sources/BugsnagPerformance/Private/ResourceAttributes.mm +++ b/Sources/BugsnagPerformance/Private/ResourceAttributes.mm @@ -49,6 +49,8 @@ static NSString *osName() noexcept { #if TARGET_OS_IOS return @"iOS"; +#elif TARGET_OS_VISION + return @"iOS"; #else #error Other platforms not supported yet #endif diff --git a/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm b/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm index ceb4d9c4..5b489cbd 100644 --- a/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm +++ b/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm @@ -62,6 +62,7 @@ static dispatch_once_t onceT; dispatch_once(&onceT, ^(){ accessTechnologyMapping = [@{ +#if TARGET_OS_IOS CTRadioAccessTechnologyGPRS: @"gprs", CTRadioAccessTechnologyEdge: @"edge", CTRadioAccessTechnologyWCDMA: @"wcdma", @@ -73,11 +74,14 @@ CTRadioAccessTechnologyCDMAEVDORevB: @"evdo_b", CTRadioAccessTechnologyeHRPD: @"ehrpd", CTRadioAccessTechnologyLTE: @"lte", +#endif } mutableCopy]; +#if TARGET_OS_IOS if (@available(iOS 14.1, *)) { accessTechnologyMapping[CTRadioAccessTechnologyNRNSA] = @"nrnsa"; accessTechnologyMapping[CTRadioAccessTechnologyNR] = @"nr"; } +#endif }); return accessTechnologyMapping; } From b744c5a5b0ebd6e2031679a7241656557b534f3d Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 4 Oct 2024 12:29:43 +0200 Subject: [PATCH 03/51] Added CODEOWNERS.md file --- CODEOWNERS.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 CODEOWNERS.md diff --git a/CODEOWNERS.md b/CODEOWNERS.md new file mode 100644 index 00000000..c0541d81 --- /dev/null +++ b/CODEOWNERS.md @@ -0,0 +1 @@ +* @robert-smartbear @kstenerud @tomlongridge From 587e1d0ac91d361bed1497f848f0d4cc1f5c8db9 Mon Sep 17 00:00:00 2001 From: robert-smartbear <126675445+robert-smartbear@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:25:09 +0200 Subject: [PATCH 04/51] Set token permissions and dependency versions for Github workflows (#330) Co-authored-by: Robert --- .github/workflows/pull_request.yml | 3 +++ CODEOWNERS.md => CODEOWNERS | 0 2 files changed, 3 insertions(+) rename CODEOWNERS.md => CODEOWNERS (100%) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 9c9a2572..0e7d8467 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -3,6 +3,9 @@ on: [pull_request] jobs: danger: + permissions: + pull-requests: write + statuses: write runs-on: macos-latest steps: - name: Checkout target branch diff --git a/CODEOWNERS.md b/CODEOWNERS similarity index 100% rename from CODEOWNERS.md rename to CODEOWNERS From 0d27fd4c698d3bfddad34ecfbafb490e80bc2758 Mon Sep 17 00:00:00 2001 From: robert-smartbear <126675445+robert-smartbear@users.noreply.github.com> Date: Tue, 8 Oct 2024 14:27:58 +0200 Subject: [PATCH 05/51] Workflow security update (#331) Co-authored-by: Robert --- .github/workflows/pull_request.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 0e7d8467..cda9c94f 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,5 +1,6 @@ name: "Pull Request" on: [pull_request] +permissions: read-all jobs: danger: @@ -9,13 +10,13 @@ jobs: runs-on: macos-latest steps: - name: Checkout target branch - uses: actions/checkout@v2 + uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 with: ref: ${{ github.base_ref }} - name: Build run: xcodebuild -scheme BugsnagPerformance-iOS -destination generic/platform=iOS -configuration Release -quiet -derivedDataPath $PWD/DerivedData.old VALID_ARCHS=arm64 - name: Checkout pull request merge branch - uses: actions/checkout@v2 + uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 with: clean: false fetch-depth: 100 From 1192f6e8be208d2519ef4535d0f4f31e8269fadd Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 11:17:52 +0100 Subject: [PATCH 06/51] add XcFramework fixture --- .buildkite/pipeline.yml | 20 +- features/fixtures/iosXcFramework/.gitignore | 2 + .../iosXcFramework/ExportOptions.plist | 18 + .../Fixture.xcodeproj/project.pbxproj | 762 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Fixture.xcscheme | 93 +++ .../iosXcFramework/Fixture/AppDelegate.swift | 37 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../Fixture/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Fixture/Base.lproj/Main.storyboard | 33 + .../Fixture/CommandReaderThread.swift | 126 +++ .../iosXcFramework/Fixture/ErrorGenerator.h | 19 + .../iosXcFramework/Fixture/ErrorGenerator.m | 36 + .../Fixture/Fixture-Bridging-Header.h | 10 + .../iosXcFramework/Fixture/Fixture.swift | 203 +++++ .../Fixture/FixtureConfig.swift | 51 ++ .../iosXcFramework/Fixture/Info.plist | 61 ++ .../Fixture/Info.template.plist | 61 ++ .../Fixture/MazeRunnerCommand.swift | 29 + .../Fixture/SceneDelegate.swift | 53 ++ .../Fixture/SwiftErrorGenerator.swift | 21 + .../Fixture/ViewController.swift | 18 + .../Scenarios/AppDataOverrideScenario.swift | 24 + .../AutoInstrumentAVAssetScenario.swift | 42 + .../AutoInstrumentAppStartsScenario.swift | 20 + ...AutoInstrumentFileURLRequestScenario.swift | 24 + ...utoInstrumentGenericViewLoadScenario.swift | 49 ++ ...InstrumentNavigationViewLoadScenario.swift | 47 ++ ...oInstrumentNetworkBadAddressScenario.swift | 28 + ...utoInstrumentNetworkCallbackScenario.swift | 50 ++ .../AutoInstrumentNetworkMultiple.swift | 40 + ...utoInstrumentNetworkNoParentScenario.swift | 30 + ...AutoInstrumentNetworkNullURLScenario.swift | 32 + ...umentNetworkPreStartDisabledScenario.swift | 34 + ...utoInstrumentNetworkPreStartScenario.swift | 34 + ...umentNetworkTracePropagationScenario.swift | 44 + ...oInstrumentNetworkWithParentScenario.swift | 30 + ...nstrumentNullNetworkCallbackScenario.swift | 31 + ...oInstrumentPreLoadedViewLoadScenario.swift | 42 + .../AutoInstrumentSubViewLoadScenario.swift | 65 ++ ...utoInstrumentSwiftUIDeferredScenario.swift | 72 ++ .../AutoInstrumentSwiftUIScenario.swift | 59 ++ .../AutoInstrumentTabViewLoadScenario.swift | 47 ++ .../AutoInstrumentViewLoadScenario.swift | 37 + .../BackgroundForegroundScenario.swift | 25 + .../Scenarios/BatchingScenario.swift | 22 + .../BatchingWithTimeoutScenario.swift | 22 + .../Scenarios/ComplexViewScenario.swift | 285 +++++++ .../Scenarios/EarlySpanOnEndScenario.swift | 34 + .../Scenarios/FirstClassNoScenario.swift | 17 + .../Scenarios/FirstClassYesScenario.swift | 17 + .../FixedSamplingProbabilityOneScenario.swift | 25 + ...FixedSamplingProbabilityZeroScenario.swift | 21 + .../iosXcFramework/Scenarios/ForceUBSan.h | 20 + .../iosXcFramework/Scenarios/ForceUBSan.m | 12 + ...csAutoInstrumentRenderingOffScenario.swift | 35 + .../FrameMetricsFronzenFramesScenario.swift | 38 + .../FrameMetricsNoSlowFramesScenario.swift | 26 + ...assSpanInstrumentRenderingOnScenario.swift | 38 + .../FrameMetricsSlowFramesScenario.swift | 35 + ...csSpanInstrumentRenderingOffScenario.swift | 37 + .../InfraCheckMinimalBugsnagScenario.swift | 20 + .../InfraCheckNoBugsnagScenario.swift | 26 + .../Scenarios/InitialPScenario.swift | 27 + .../ManualNetworkCallbackScenario.swift | 63 ++ ...lNetworkSpanCallbackSetToNilScenario.swift | 44 + .../Scenarios/ManualNetworkSpanScenario.swift | 39 + ...anualNetworkTracePropagationScenario.swift | 58 ++ .../Scenarios/ManualParentSpanScenario.swift | 26 + .../ManualSpanBeforeStartScenario.swift | 22 + .../Scenarios/ManualSpanScenario.swift | 31 + .../Scenarios/ManualUIViewLoadScenario.swift | 19 + .../ManualViewLoadPhaseScenario.swift | 19 + .../Scenarios/ManualViewLoadScenario.swift | 18 + .../Scenarios/MaxPayloadSizeScenario.swift | 23 + .../Scenarios/ModifyEarlySpansScenario.swift | 32 + .../iosXcFramework/Scenarios/ObjCURLSession.h | 15 + .../iosXcFramework/Scenarios/ObjCURLSession.m | 16 + .../Scenarios/OnEndCallbackScenario.swift | 46 ++ .../Scenarios/ParentSpanScenario.swift | 24 + .../Scenarios/ProbabilityExpiryScenario.swift | 28 + .../ReleaseStageNotEnabledScenario.swift | 23 + .../Scenarios/RetryScenario.swift | 20 + .../SamplingProbabilityZeroScenario.swift | 28 + .../iosXcFramework/Scenarios/Scenario.swift | 175 ++++ .../SetAttributeCountLimitScenario.swift | 23 + .../Scenarios/SetAttributesScenario.swift | 25 + .../SetAttributesWithLimitsScenario.swift | 25 + .../ViewDidLoadDoesntTriggerScenario.swift | 39 + features/fixtures/iosXcFramework/build.sh | 50 ++ .../fixtures/iosXcFramework/utils/Logging.h | 25 + .../fixtures/iosXcFramework/utils/Logging.m | 51 ++ .../iosXcFramework/utils/Logging.swift | 45 ++ 96 files changed, 4437 insertions(+), 1 deletion(-) create mode 100644 features/fixtures/iosXcFramework/.gitignore create mode 100644 features/fixtures/iosXcFramework/ExportOptions.plist create mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj create mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme create mode 100644 features/fixtures/iosXcFramework/Fixture/AppDelegate.swift create mode 100644 features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json create mode 100644 features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard create mode 100644 features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard create mode 100644 features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift create mode 100644 features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h create mode 100644 features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m create mode 100644 features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h create mode 100644 features/fixtures/iosXcFramework/Fixture/Fixture.swift create mode 100644 features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift create mode 100644 features/fixtures/iosXcFramework/Fixture/Info.plist create mode 100644 features/fixtures/iosXcFramework/Fixture/Info.template.plist create mode 100644 features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift create mode 100644 features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift create mode 100644 features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift create mode 100644 features/fixtures/iosXcFramework/Fixture/ViewController.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h create mode 100644 features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m create mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h create mode 100644 features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m create mode 100644 features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/Scenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift create mode 100644 features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift create mode 100755 features/fixtures/iosXcFramework/build.sh create mode 100644 features/fixtures/iosXcFramework/utils/Logging.h create mode 100644 features/fixtures/iosXcFramework/utils/Logging.m create mode 100644 features/fixtures/iosXcFramework/utils/Logging.swift diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 2433ebb3..d4b752d0 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -15,7 +15,9 @@ steps: - make build_xcframework plugins: - artifacts#v1.9.3: - upload: "BugsnagPerformance.xcframework.zip" + upload: + - "BugsnagPerformance.xcframework.zip" + - "BugsnagPerformanceSwift.xcframework.zip" - label: "Carthage" commands: @@ -43,6 +45,22 @@ steps: - features/fixtures/ios/output/bb_ipa_url.txt - features/fixtures/ios/output/bs_ipa_url.txt + - label: "Fixture with XcFramework" + key: ios_fixture_xcframework + plugins: + - artifacts#v1.9.3: + download: + - "BugsnagPerformance.xcframework.zip" + - "BugsnagPerformanceSwift.xcframework.zip" + commands: + - ./features/fixtures/iosXcFramework/build.sh + - bundle install + - bundle exec upload-app --farm=bb --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt + - bundle exec upload-app --farm=bs --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bs_xcframework_ipa_url.txt + artifact_paths: + - features/fixtures/ios/output/bb_xcframework_ipa_url.txt + - features/fixtures/ios/output/bs_xcframework_ipa_url.txt + - label: "Fixture swizzling disabled" key: ios_fixture_swizzling_disabled commands: diff --git a/features/fixtures/iosXcFramework/.gitignore b/features/fixtures/iosXcFramework/.gitignore new file mode 100644 index 00000000..7e48d904 --- /dev/null +++ b/features/fixtures/iosXcFramework/.gitignore @@ -0,0 +1,2 @@ +Fixture.xcarchive +output diff --git a/features/fixtures/iosXcFramework/ExportOptions.plist b/features/fixtures/iosXcFramework/ExportOptions.plist new file mode 100644 index 00000000..c8002a2b --- /dev/null +++ b/features/fixtures/iosXcFramework/ExportOptions.plist @@ -0,0 +1,18 @@ + + + + + compileBitcode + + method + development + signingStyle + automatic + stripSwiftSymbols + + teamID + 7W9PZ27Y5F + thinning + <none> + + diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj new file mode 100644 index 00000000..99c0ec4c --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj @@ -0,0 +1,762 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */; }; + 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */ = {isa = PBXBuildFile; productRef = 01A414C72912CA18003152A4 /* Bugsnag */; }; + 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */; }; + 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */; }; + 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */; }; + 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */; }; + 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */; }; + 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */; }; + 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */; }; + 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */; }; + 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */; }; + 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */; }; + 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */; }; + 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC428E1AF9600D1F239 /* Scenario.swift */; }; + 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC628E1D5A400D1F239 /* Fixture.swift */; }; + 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */; }; + 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */; }; + 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */; }; + 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */; }; + 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */; }; + 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */; }; + 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3B2B0607F300F4F776 /* Logging.swift */; }; + 09637A3F2B06082200F4F776 /* Logging.m in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3E2B06082200F4F776 /* Logging.m */; }; + 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */; }; + 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */; }; + 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A442B0B883B00F4F776 /* FixtureConfig.swift */; }; + 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */; }; + 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */; }; + 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */; }; + 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */; }; + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */; }; + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */; }; + 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */; }; + 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */; }; + 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */; }; + 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */; }; + 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */; }; + 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */; }; + 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */; }; + 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */; }; + 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */; }; + 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */; }; + 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */; }; + 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 09F025062BA08804007D9F73 /* ObjCURLSession.m */; }; + 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */; }; + 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */; }; + 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; }; + 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; }; + 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */; }; + 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */; }; + 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */; }; + 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */; }; + 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */; }; + 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */; }; + 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */; }; + 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */; }; + 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */; }; + 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */; }; + 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */; }; + 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */; }; + 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */; }; + 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */; }; + 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */; }; + CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */; }; + CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */; }; + CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */; }; + CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */; }; + CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */; }; + CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */; }; + CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */; }; + CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */; }; + CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */ = {isa = PBXBuildFile; fileRef = CBC90C4229C466BD00280884 /* ForceUBSan.m */; }; + CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */; }; + CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */; }; + CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */; }; + CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */; }; + CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */; }; + CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */; }; + CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */; }; + CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */; }; + CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */; }; + CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF62108291A4F47004BEE0B /* RetryScenario.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 55155E072CBD1DB100B5B3FE /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */, + 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentViewLoadScenario.swift; sourceTree = ""; }; + 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SamplingProbabilityZeroScenario.swift; sourceTree = ""; }; + 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAppStartsScenario.swift; sourceTree = ""; }; + 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadScenario.swift; sourceTree = ""; }; + 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanBeforeStartScenario.swift; sourceTree = ""; }; + 01FE4DA528E1AEBD00D1F239 /* Fixture.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Fixture.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 01FE4DAF28E1AEBD00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 01FE4DB428E1AEBF00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 01FE4DB628E1AEBF00D1F239 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "bugsnag-cocoa-performance"; path = ../../..; sourceTree = ""; }; + 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanScenario.swift; sourceTree = ""; }; + 01FE4DC428E1AF9600D1F239 /* Scenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scenario.swift; sourceTree = ""; }; + 01FE4DC628E1D5A400D1F239 /* Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fixture.swift; sourceTree = ""; }; + 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartScenario.swift; sourceTree = ""; }; + 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartDisabledScenario.swift; sourceTree = ""; }; + 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkCallbackScenario.swift; sourceTree = ""; }; + 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplexViewScenario.swift; sourceTree = ""; }; + 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualParentSpanScenario.swift; sourceTree = ""; }; + 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesScenario.swift; sourceTree = ""; }; + 09637A3B2B0607F300F4F776 /* Logging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; + 09637A3D2B06082200F4F776 /* Logging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Logging.h; sourceTree = ""; }; + 09637A3E2B06082200F4F776 /* Logging.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Logging.m; sourceTree = ""; }; + 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandReaderThread.swift; sourceTree = ""; }; + 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MazeRunnerCommand.swift; sourceTree = ""; }; + 09637A442B0B883B00F4F776 /* FixtureConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixtureConfig.swift; sourceTree = ""; }; + 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIDeferredScenario.swift; sourceTree = ""; }; + 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNullNetworkCallbackScenario.swift; sourceTree = ""; }; + 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIScenario.swift; sourceTree = ""; }; + 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadPhaseScenario.swift; sourceTree = ""; }; + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckNoBugsnagScenario.swift; sourceTree = ""; }; + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckMinimalBugsnagScenario.swift; sourceTree = ""; }; + 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnEndCallbackScenario.swift; sourceTree = ""; }; + 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ErrorGenerator.h; sourceTree = ""; }; + 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ErrorGenerator.m; sourceTree = ""; }; + 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftErrorGenerator.swift; sourceTree = ""; }; + 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAVAssetScenario.swift; sourceTree = ""; }; + 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkTracePropagationScenario.swift; sourceTree = ""; }; + 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkTracePropagationScenario.swift; sourceTree = ""; }; + 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkCallbackScenario.swift; sourceTree = ""; }; + 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EarlySpanOnEndScenario.swift; sourceTree = ""; }; + 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesWithLimitsScenario.swift; sourceTree = ""; }; + 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributeCountLimitScenario.swift; sourceTree = ""; }; + 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModifyEarlySpansScenario.swift; sourceTree = ""; }; + 09F025052BA08804007D9F73 /* ObjCURLSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ObjCURLSession.h; sourceTree = ""; }; + 09F025062BA08804007D9F73 /* ObjCURLSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ObjCURLSession.m; sourceTree = ""; }; + 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNullURLScenario.swift; sourceTree = ""; }; + 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDidLoadDoesntTriggerScenario.swift; sourceTree = ""; }; + 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformance.xcframework; path = ../../../BugsnagPerformance.xcframework; sourceTree = ""; }; + 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformanceSwift.xcframework; path = ../../../BugsnagPerformanceSwift.xcframework; sourceTree = ""; }; + 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentGenericViewLoadScenario.swift; sourceTree = ""; }; + 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentPreLoadedViewLoadScenario.swift; sourceTree = ""; }; + 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentTabViewLoadScenario.swift; sourceTree = ""; }; + 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNavigationViewLoadScenario.swift; sourceTree = ""; }; + 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsFronzenFramesScenario.swift; sourceTree = ""; }; + 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSlowFramesScenario.swift; sourceTree = ""; }; + 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNoSlowFramesScenario.swift; sourceTree = ""; }; + 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseStageNotEnabledScenario.swift; sourceTree = ""; }; + 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsAutoInstrumentRenderingOffScenario.swift; sourceTree = ""; }; + 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSpanInstrumentRenderingOffScenario.swift; sourceTree = ""; }; + 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift; sourceTree = ""; }; + 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDataOverrideScenario.swift; sourceTree = ""; }; + 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityOneScenario.swift; sourceTree = ""; }; + 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityZeroScenario.swift; sourceTree = ""; }; + 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanCallbackSetToNilScenario.swift; sourceTree = ""; }; + CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingWithTimeoutScenario.swift; sourceTree = ""; }; + CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPScenario.swift; sourceTree = ""; }; + CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "BugsnagPerformanceConfiguration+Private.h"; path = "../../../../Sources/BugsnagPerformance/Private/BugsnagPerformanceConfiguration+Private.h"; sourceTree = ""; }; + CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentFileURLRequestScenario.swift; sourceTree = ""; }; + CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkBadAddressScenario.swift; sourceTree = ""; }; + CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkWithParentScenario.swift; sourceTree = ""; }; + CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundForegroundScenario.swift; sourceTree = ""; }; + CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualUIViewLoadScenario.swift; sourceTree = ""; }; + CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Fixture-Bridging-Header.h"; sourceTree = ""; }; + CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingScenario.swift; sourceTree = ""; }; + CBC90C4129C466BD00280884 /* ForceUBSan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForceUBSan.h; sourceTree = ""; }; + CBC90C4229C466BD00280884 /* ForceUBSan.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ForceUBSan.m; sourceTree = ""; }; + CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassNoScenario.swift; sourceTree = ""; }; + CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassYesScenario.swift; sourceTree = ""; }; + CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSubViewLoadScenario.swift; sourceTree = ""; }; + CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNoParentScenario.swift; sourceTree = ""; }; + CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProbabilityExpiryScenario.swift; sourceTree = ""; }; + CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParentSpanScenario.swift; sourceTree = ""; }; + CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanScenario.swift; sourceTree = ""; }; + CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkMultiple.swift; sourceTree = ""; }; + CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaxPayloadSizeScenario.swift; sourceTree = ""; }; + CBF62108291A4F47004BEE0B /* RetryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryScenario.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 01FE4DA228E1AEBD00D1F239 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */, + 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */, + 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 01FE4D9C28E1AEBD00D1F239 = { + isa = PBXGroup; + children = ( + 09637A3A2B0607DA00F4F776 /* utils */, + 01FE4DA728E1AEBD00D1F239 /* Fixture */, + 01FE4DC128E1AF0700D1F239 /* Scenarios */, + 01FE4DBC28E1AED000D1F239 /* Packages */, + 01FE4DA628E1AEBD00D1F239 /* Products */, + 01FE4DBE28E1AEDF00D1F239 /* Frameworks */, + ); + sourceTree = ""; + }; + 01FE4DA628E1AEBD00D1F239 /* Products */ = { + isa = PBXGroup; + children = ( + 01FE4DA528E1AEBD00D1F239 /* Fixture.app */, + ); + name = Products; + sourceTree = ""; + }; + 01FE4DA728E1AEBD00D1F239 /* Fixture */ = { + isa = PBXGroup; + children = ( + 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */, + 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */, + CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */, + 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */, + CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */, + 01FE4DC628E1D5A400D1F239 /* Fixture.swift */, + 01FE4DB628E1AEBF00D1F239 /* Info.plist */, + 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */, + 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */, + 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */, + 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */, + 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */, + 09637A442B0B883B00F4F776 /* FixtureConfig.swift */, + 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */, + 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */, + 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */, + ); + path = Fixture; + sourceTree = ""; + }; + 01FE4DBC28E1AED000D1F239 /* Packages */ = { + isa = PBXGroup; + children = ( + 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */, + ); + name = Packages; + sourceTree = ""; + }; + 01FE4DBE28E1AEDF00D1F239 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */, + 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 01FE4DC128E1AF0700D1F239 /* Scenarios */ = { + isa = PBXGroup; + children = ( + 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */, + 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */, + 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */, + CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */, + 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */, + 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */, + CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */, + 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */, + CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */, + CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */, + 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */, + 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */, + 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */, + 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */, + CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */, + 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */, + 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */, + CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */, + 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */, + 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */, + 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */, + 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */, + CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */, + CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */, + CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */, + 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */, + 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */, + CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */, + CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */, + 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */, + 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */, + CBC90C4129C466BD00280884 /* ForceUBSan.h */, + CBC90C4229C466BD00280884 /* ForceUBSan.m */, + 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */, + 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */, + 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */, + 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */, + 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */, + 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */, + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */, + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */, + CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */, + 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */, + 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */, + CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */, + 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */, + 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */, + 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */, + 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */, + CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */, + 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */, + 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */, + CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */, + 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */, + 09F025052BA08804007D9F73 /* ObjCURLSession.h */, + 09F025062BA08804007D9F73 /* ObjCURLSession.m */, + 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */, + CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */, + CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */, + 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */, + CBF62108291A4F47004BEE0B /* RetryScenario.swift */, + 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */, + 01FE4DC428E1AF9600D1F239 /* Scenario.swift */, + 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */, + 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */, + 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */, + 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */, + ); + path = Scenarios; + sourceTree = ""; + }; + 09637A3A2B0607DA00F4F776 /* utils */ = { + isa = PBXGroup; + children = ( + 09637A3B2B0607F300F4F776 /* Logging.swift */, + 09637A3D2B06082200F4F776 /* Logging.h */, + 09637A3E2B06082200F4F776 /* Logging.m */, + ); + path = utils; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 01FE4DA428E1AEBD00D1F239 /* Fixture */ = { + isa = PBXNativeTarget; + buildConfigurationList = 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "Fixture" */; + buildPhases = ( + 01FE4DA128E1AEBD00D1F239 /* Sources */, + 01FE4DA228E1AEBD00D1F239 /* Frameworks */, + 01FE4DA328E1AEBD00D1F239 /* Resources */, + 55155E072CBD1DB100B5B3FE /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Fixture; + packageProductDependencies = ( + 01A414C72912CA18003152A4 /* Bugsnag */, + ); + productName = Fixture; + productReference = 01FE4DA528E1AEBD00D1F239 /* Fixture.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 01FE4D9D28E1AEBD00D1F239 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 1400; + TargetAttributes = { + 01FE4DA428E1AEBD00D1F239 = { + CreatedOnToolsVersion = 14.0; + LastSwiftMigration = 1400; + }; + }; + }; + buildConfigurationList = 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "Fixture" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 01FE4D9C28E1AEBD00D1F239; + packageReferences = ( + 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */, + ); + productRefGroup = 01FE4DA628E1AEBD00D1F239 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 01FE4DA428E1AEBD00D1F239 /* Fixture */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 01FE4DA328E1AEBD00D1F239 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */, + 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */, + 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 01FE4DA128E1AEBD00D1F239 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */, + CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */, + 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */, + 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */, + 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */, + 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */, + 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */, + 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */, + 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */, + 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */, + 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */, + 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */, + 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */, + CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */, + 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */, + 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */, + 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */, + CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */, + 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */, + 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */, + 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */, + 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */, + 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */, + 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */, + 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */, + 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */, + CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */, + 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */, + 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */, + 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */, + 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */, + 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */, + 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */, + 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */, + CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */, + CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */, + 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */, + 09637A3F2B06082200F4F776 /* Logging.m in Sources */, + CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */, + 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */, + CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */, + 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */, + 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */, + 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */, + 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */, + 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */, + 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */, + CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */, + 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */, + 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */, + CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */, + CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */, + 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */, + CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */, + 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */, + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */, + CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */, + 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */, + 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */, + 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */, + 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */, + 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */, + 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */, + CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */, + 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */, + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */, + CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */, + CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */, + 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */, + 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */, + CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */, + 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */, + 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */, + 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */, + 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */, + CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 01FE4DAF28E1AEBD00D1F239 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 01FE4DB428E1AEBF00D1F239 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 01FE4DB728E1AEBF00D1F239 /* 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++20"; + 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 = ( + "DEBUG=1", + "$(inherited)", + ); + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 01FE4DB828E1AEBF00D1F239 /* 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++20"; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 01FE4DBA28E1AEBF00D1F239 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Fixture/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 01FE4DBB28E1AEBF00D1F239 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Fixture/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "Fixture" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 01FE4DB728E1AEBF00D1F239 /* Debug */, + 01FE4DB828E1AEBF00D1F239 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "Fixture" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 01FE4DBA28E1AEBF00D1F239 /* Debug */, + 01FE4DBB28E1AEBF00D1F239 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/bugsnag/bugsnag-cocoa"; + requirement = { + branch = master; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 01A414C72912CA18003152A4 /* Bugsnag */ = { + isa = XCSwiftPackageProductDependency; + package = 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */; + productName = Bugsnag; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 01FE4D9D28E1AEBD00D1F239 /* Project object */; +} diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme b/features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme new file mode 100644 index 00000000..b97c6859 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/features/fixtures/iosXcFramework/Fixture/AppDelegate.swift b/features/fixtures/iosXcFramework/Fixture/AppDelegate.swift new file mode 100644 index 00000000..1f2f0a8d --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/AppDelegate.swift @@ -0,0 +1,37 @@ +// +// AppDelegate.swift +// Fixture +// +// Created by Nick Dowell on 26/09/2022. +// + +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + logInfo(">>>>>>>>>> Fixture app has launched <<<<<<<<<<") + return true + } +} + +@available(iOS 13.0, *) +extension AppDelegate { + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..13613e3e --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard b/features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..865e9329 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard b/features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard new file mode 100644 index 00000000..477c04ee --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift b/features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift new file mode 100644 index 00000000..173db934 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift @@ -0,0 +1,126 @@ +// +// CommandReaderThread.swift +// iOSTestApp +// +// Created by Karl Stenerud on 16.11.23. +// Copyright © 2023 Bugsnag. All rights reserved. +// + +import UIKit +import os + +class CommandReaderThread: Thread { + var fixtureConfig: FixtureConfig + var commandReceiver: CommandReceiver + var lastCommandID: String = "" + + init(fixtureConfig: FixtureConfig, commandReceiver: CommandReceiver) { + self.fixtureConfig = fixtureConfig + self.commandReceiver = commandReceiver + } + + override func main() { + while true { + if self.commandReceiver.canReceiveCommand() { + receiveNextCommand() + } else { + logDebug("A command is already in progress, waiting 1 second more...") + } + Thread.sleep(forTimeInterval: 1) + } + } + + func newStartedFetchTask() -> CommandFetchTask { + let fetchTask = CommandFetchTask(url: fixtureConfig.commandURL, afterCommandID: lastCommandID) + fetchTask.start() + return fetchTask + } + + func receiveNextCommand() { + let maxWaitTime = 5.0 + let pollingInterval = 1.0 + + var fetchTask = newStartedFetchTask() + let startTime = Date() + + while true { + Thread.sleep(forTimeInterval: pollingInterval) + switch fetchTask.state { + case CommandFetchState.success: + logDebug("Command fetch: Request succeeded") + let command = fetchTask.command! + if (command.uuid != "") { + lastCommandID = command.uuid + } + commandReceiver.receiveCommand(command: command) + return + case CommandFetchState.fetching: + let duration = Date() - startTime + if duration < maxWaitTime { + logDebug("Command fetch: Server hasn't responded in \(duration)s (max \(maxWaitTime)). Waiting \(pollingInterval)s more...") + } else { + fetchTask.cancel() + logInfo("Command fetch: Server hasn't responded in \(duration)s (max \(maxWaitTime)). Trying again...") + fetchTask = newStartedFetchTask() + } + break + case CommandFetchState.failed: + logInfo("Command fetch: Request failed. Trying again...") + fetchTask = newStartedFetchTask() + break + } + } + } +} + +extension Date { + static func - (lhs: Date, rhs: Date) -> TimeInterval { + return lhs.timeIntervalSinceReferenceDate - rhs.timeIntervalSinceReferenceDate + } +} + +enum CommandFetchState { + case failed, fetching, success +} + +class CommandFetchTask { + var url: URL + var state = CommandFetchState.failed + var command: MazeRunnerCommand? + var task: URLSessionTask? + + init(url: URL, afterCommandID: String) { + self.url = URL(string: "\(url.absoluteString)?after=\(afterCommandID)")! + } + + func cancel() { + task?.cancel() + } + + func start() { + logInfo("Fetching next command from \(url)") + state = CommandFetchState.fetching + let request = URLRequest(url: url) + task = URLSession.shared.dataTask(with: request) { data, response, error in + if let data = data { + do { + let asString = String(data: data, encoding: .utf8)! + logInfo("Received command \(asString)") + let decoded = try JSONSerialization.jsonObject(with: data, options: []) as! [String: Any] + let command = MazeRunnerCommand.init(fromJSONDict: decoded) + logInfo("Command fetched and decoded") + self.command = command; + self.state = CommandFetchState.success + } catch { + self.state = CommandFetchState.failed + let dataAsString = String(data: data, encoding: .utf8) + logError("Failed to fetch command: Invalid Response from \(String(describing: self.url)): [\(String(describing: dataAsString))]: Error is: \(error)") + } + } else if let error = error { + self.state = CommandFetchState.failed + logError("Failed to fetch command: HTTP Request to \(String(describing: self.url)) failed: \(error)") + } + } + task?.resume() + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h b/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h new file mode 100644 index 00000000..85367af2 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h @@ -0,0 +1,19 @@ +// +// ErrorGenerator.h +// Fixture +// +// Created by Karl Stenerud on 26.07.24. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ErrorGenerator : NSObject + +- (void)throwObjCException; +- (NSError *)throwSwiftException; + +@end + +NS_ASSUME_NONNULL_END diff --git a/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m b/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m new file mode 100644 index 00000000..5ca45242 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m @@ -0,0 +1,36 @@ +// +// ErrorGenerator.m +// Fixture +// +// Created by Karl Stenerud on 26.07.24. +// + +#import "ErrorGenerator.h" +#import "Fixture-Swift.h" + +@interface ErrorGenerator () + +@property(nonatomic,readwrite) SwiftErrorGenerator *swiftErrorGenerator; + +@end + +@implementation ErrorGenerator + +- (instancetype)init { + if ((self = [super init])) { + _swiftErrorGenerator = [[SwiftErrorGenerator alloc] init]; + } + return self; +} + +- (void)throwObjCException { + [NSException raise:@"MyException" format:@"Oops..."]; +} + +- (NSError *)throwSwiftException { + NSError *error = nil; + [self.swiftErrorGenerator throwSwiftErrorAndReturnError:&error]; + return error; +} + +@end diff --git a/features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h b/features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h new file mode 100644 index 00000000..705b4143 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h @@ -0,0 +1,10 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#import +#import +#import "BugsnagPerformanceConfiguration+Private.h" +#import "Logging.h" +#import "ObjCURLSession.h" +#import "ErrorGenerator.h" diff --git a/features/fixtures/iosXcFramework/Fixture/Fixture.swift b/features/fixtures/iosXcFramework/Fixture/Fixture.swift new file mode 100644 index 00000000..83c1bb6e --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Fixture.swift @@ -0,0 +1,203 @@ +// +// Fixture.swift +// Fixture +// +// Created by Nick Dowell on 26/09/2022. +// + +import Foundation + +protocol CommandReceiver { + func canReceiveCommand() -> Bool + func receiveCommand(command: MazeRunnerCommand) +} + +class Fixture: NSObject, CommandReceiver { + static let defaultMazeRunnerURL = URL(string: "http://bs-local.com:9339")! + + var readyToReceiveCommand = false + var commandReaderThread: CommandReaderThread? + var fixtureConfig: FixtureConfig = FixtureConfig(mazeRunnerBaseAddress: defaultMazeRunnerURL) + var scenario: Scenario? = nil + + func start() { + DispatchQueue.global(qos: .userInitiated).async { + self.loadMazeRunnerAddress { address in + self.fixtureConfig = FixtureConfig(mazeRunnerBaseAddress: address) + self.beginReceivingCommands(fixtureConfig: self.fixtureConfig) + } + } + } + + func beginReceivingCommands(fixtureConfig: FixtureConfig) { + readyToReceiveCommand = true + commandReaderThread = CommandReaderThread(fixtureConfig: fixtureConfig, commandReceiver: self) + commandReaderThread!.start() + } + + func canReceiveCommand() -> Bool { + return readyToReceiveCommand + } + + func receiveCommand(command: MazeRunnerCommand) { + readyToReceiveCommand = false + DispatchQueue.main.async { + logInfo("Executing command [\(command.action)] with args \(command.args)") + switch command.action { + case "load_scenario": + self.loadScenario(scenarioName: command.args["scenario"] as! String) + self.readyToReceiveCommand = true + break + case "configure_bugsnag": + self.configureBugsnag(path: command.args["path"] as! String, + value: command.args["value"] as! String) + self.readyToReceiveCommand = true + break + case "start_bugsnag": + self.startBugsnag() + self.readyToReceiveCommand = true + break + case "run_loaded_scenario": + self.runLoadedScenario(completion: { + self.readyToReceiveCommand = true + }) + break + case "run_scenario": + self.runScenario(scenarioName: command.args["scenario"] as! String, completion: { + self.readyToReceiveCommand = true + }) + break + case "invoke_method": + self.invokeMethod(methodName: command.args["method"] as! String, + args: command.args["arguments"] as! [String]) + self.readyToReceiveCommand = true + break + case "background": + self.scenario?.enterBackground(forSeconds: Int(command.args["duration"] as! String)!) + self.readyToReceiveCommand = true + break + case "noop": + self.readyToReceiveCommand = true + break + default: + assertionFailure("\(command.action): Unknown command") + self.readyToReceiveCommand = true + } + } + } + + private func loadScenario(scenarioName: String) { + logInfo("========== Loading scenario \(scenarioName) ==========") + let scenarioClass: AnyClass = NSClassFromString("Fixture.\(scenarioName)")! + logInfo("Loaded scenario class: \(scenarioClass)") + scenario = (scenarioClass as! Scenario.Type).init(fixtureConfig: fixtureConfig) as Scenario? + logInfo("Configuring scenario in class \(scenarioClass)") + scenario!.configure() + logInfo("Clearing persistent data") + scenario!.clearPersistentData() + } + + private func configureBugsnag(path: String, value: String) { + logInfo("Configuring bugsnag [\(path)] to [\(value)]") + scenario!.configureBugsnag(path: path, value: value) + } + + private func startBugsnag() { + logInfo("Starting bugsnag performance") + scenario!.startBugsnag() + } + + private func runLoadedScenario(completion: @escaping () -> ()) { + logInfo("Starting scenario \(String(describing: scenario))") + scenario!.run() + logInfo("========== Completed scenario \(String(describing: scenario)) ==========") + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + self.scenario!.reportMeasurements() + DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { + completion() + } + } + } + + private func runScenario(scenarioName: String, completion: @escaping () -> ()) { + loadScenario(scenarioName: scenarioName) + startBugsnag() + runLoadedScenario(completion: completion) + } + + private func invokeMethod(methodName: String, args: Array) { + logInfo("Invoking method \(methodName) with args \(args) on \(String(describing: scenario!.self))") + + let sel = NSSelectorFromString(methodName) + if (!scenario!.responds(to: sel)) { + fatalError("\(String(describing: scenario!.self)) does not respond to \(methodName). Did you set the @objcMembers annotation on \(String(describing: scenario!.self))?") + } + + switch args.count { + case 0: + scenario!.perform(sel) + case 1: + // Note: Parameter must accept a string + scenario!.perform(sel, with: args[0]) + default: + fatalError("invoking \(methodName) with args \(args): Fixture currently only supports up to 1 argument") + } + } + + func loadMazeRunnerAddress(completion: (URL)->()) { + let defaultUrl = Fixture.defaultMazeRunnerURL + + // Only iOS 12 and above will run on BitBar for now + if #available(iOS 12.0, *) {} else { + completion(defaultUrl) + return + } + + for n in 1...60 { + let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] + + logInfo("Reading Maze Runner address from fixture_config.json") + do { + let fileUrl = URL(fileURLWithPath: "fixture_config", + relativeTo: documentsUrl).appendingPathExtension("json") + let savedData = try Data(contentsOf: fileUrl) + if let contents = String(data: savedData, encoding: .utf8) { + logInfo(String(format: "Found fixture_config.json after %d seconds", n)) + let decoder = JSONDecoder() + let jsonData = contents.data(using: .utf8) + let config = try decoder.decode(FixtureConfigJSON.self, from: jsonData!) + let address = "http://" + config.maze_address + logInfo("Using Maze Runner address: \(address)") + completion(URL(string: address)!) + return + } + } + catch let error as NSError { + logWarn("Failed to read fixture_config.json: \(error)") + } + logInfo("Waiting for fixture_config.json to appear") + sleep(1) + } + + logError("Unable to read from fixture_config.json, defaulting to BrowserStack environment") + completion(defaultUrl) + return + } + + private struct FixtureConfigJSON: Decodable { + var maze_address: String + } +} + +class PresetFixture: Fixture { + let scenarioName: String + init(scenarioName: String) { + self.scenarioName = scenarioName + } + + override func start() { + receiveCommand(command: MazeRunnerCommand(uuid: "0", action: "load_scenario", args: ["scenario": scenarioName], message: "")) + receiveCommand(command: MazeRunnerCommand(uuid: "0", action: "start_bugsnag", args: [:], message: "")) + receiveCommand(command: MazeRunnerCommand(uuid: "0", action: "run_loaded_scenario", args: [:], message: "")) + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift b/features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift new file mode 100644 index 00000000..f35b550f --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift @@ -0,0 +1,51 @@ +// +// FixtureConfig.swift +// Fixture +// +// Created by Karl Stenerud on 20.11.23. +// + +import Foundation + +class FixtureConfig { + // Base MazeRunner URL + let mazeRunnerURL: URL + + // Admin URLs we normally don't want to capture + let docsURL: URL + let tracesURL: URL + let commandURL: URL + let metricsURL: URL + let notifyURL: URL + let sessionsURL: URL + + // URLs explicitly used in tests + let reflectURL: URL + + // Convenience URL sets + let adminMazeRunnerURLs: [URL] + let allMazeRunnerURLs: [URL] + + init(mazeRunnerBaseAddress: URL) { + mazeRunnerURL = mazeRunnerBaseAddress + + docsURL = mazeRunnerBaseAddress.appendingPathComponent("docs") + tracesURL = mazeRunnerBaseAddress.appendingPathComponent("traces") + commandURL = mazeRunnerBaseAddress.appendingPathComponent("command") + metricsURL = mazeRunnerBaseAddress.appendingPathComponent("metrics") + notifyURL = mazeRunnerBaseAddress.appendingPathComponent("notify") + sessionsURL = mazeRunnerBaseAddress.appendingPathComponent("sessions") + + reflectURL = mazeRunnerBaseAddress.appendingPathComponent("reflect") + + adminMazeRunnerURLs = [ + docsURL, + tracesURL, + commandURL, + metricsURL, + notifyURL, + sessionsURL, + ] + allMazeRunnerURLs = [mazeRunnerURL] + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/Info.plist b/features/fixtures/iosXcFramework/Fixture/Info.plist new file mode 100644 index 00000000..44c52ff2 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Info.plist @@ -0,0 +1,61 @@ + + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + bugsnag + + performance + + + + + + bundleVersion + 30 + autoInstrumentNetworkRequests + + autoInstrumentViewControllers + + autoInstrumentAppStarts + + + enabledReleaseStages + + release + staging + + releaseStage + staging + bundleVersion + 40 + appVersion + 10.0 + apiKey + 0123456789abcdef0123456789abcdef + + + diff --git a/features/fixtures/iosXcFramework/Fixture/Info.template.plist b/features/fixtures/iosXcFramework/Fixture/Info.template.plist new file mode 100644 index 00000000..c7ba6937 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/Info.template.plist @@ -0,0 +1,61 @@ + + + + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + bugsnag + + performance + + DISABLE_SWIZZLING_KEY + DISABLE_SWIZZLING_VALUE + SWIZZLING_PREMAIN_KEY + SWIZZLING_PREMAIN_VALUE + bundleVersion + 30 + autoInstrumentNetworkRequests + + autoInstrumentViewControllers + + autoInstrumentAppStarts + + + enabledReleaseStages + + release + staging + + releaseStage + staging + bundleVersion + 40 + appVersion + 10.0 + apiKey + 0123456789abcdef0123456789abcdef + + + diff --git a/features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift b/features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift new file mode 100644 index 00000000..6fa8093a --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift @@ -0,0 +1,29 @@ +// +// MazeRunnerCommand.swift +// Fixture +// +// Created by Karl Stenerud on 16.11.23. +// + +import Foundation + +class MazeRunnerCommand { + let message: String + let action: String + let uuid: String + let args: Dictionary + + init(uuid: String, action: String, args: Dictionary, message: String) { + self.uuid = uuid + self.message = message + self.action = action + self.args = args + } + + init(fromJSONDict: Dictionary) { + self.uuid = fromJSONDict["uuid"] as? String ?? "" + self.action = fromJSONDict["action"] as! String + self.args = fromJSONDict["args"] as? Dictionary ?? [:] + self.message = fromJSONDict["message"] as? String ?? "" + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift b/features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift new file mode 100644 index 00000000..c89da8d3 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift @@ -0,0 +1,53 @@ +// +// SceneDelegate.swift +// Fixture +// +// Created by Nick Dowell on 26/09/2022. +// + +import UIKit + +@available(iOS 13.0, *) +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift b/features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift new file mode 100644 index 00000000..f74bd03b --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift @@ -0,0 +1,21 @@ +// +// SwiftErrorGenerator.swift +// Fixture +// +// Created by Karl Stenerud on 26.07.24. +// + +import Foundation + +enum MySwiftError: Error { + case oops +} + +@objc +@objcMembers +class SwiftErrorGenerator: NSObject { + + func throwSwiftError() throws { + throw MySwiftError.oops + } +} diff --git a/features/fixtures/iosXcFramework/Fixture/ViewController.swift b/features/fixtures/iosXcFramework/Fixture/ViewController.swift new file mode 100644 index 00000000..b20cc5e5 --- /dev/null +++ b/features/fixtures/iosXcFramework/Fixture/ViewController.swift @@ -0,0 +1,18 @@ +// +// ViewController.swift +// Fixture +// +// Created by Nick Dowell on 26/09/2022. +// + +import UIKit + +class ViewController: UIViewController { + var fixture: Fixture = Fixture() +// var fixture: Fixture = PresetFixture(scenarioName: "AutoInstrumentAVAssetScenario") + + required init?(coder: NSCoder) { + super.init(coder: coder) + fixture.start() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift new file mode 100644 index 00000000..56e4e73c --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift @@ -0,0 +1,24 @@ +// +// AppDataOverrideScenario.swift +// Fixture +// +// Created by Robert B on 16/08/2024. +// + +import BugsnagPerformance + +@objcMembers +class AppDataOverrideScenario: Scenario { + + override func configure() { + super.configure() + config.serviceName = "com.bugsnag.AppDataOverrideScenario" + config.bundleVersion = "100" + config.appVersion = "42.0" + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "AppDataOverrideScenario") + span.end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift new file mode 100644 index 00000000..ce0f8a67 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift @@ -0,0 +1,42 @@ +// +// AutoInstrumentAVAssetScenario.swift +// Fixture +// +// Created by Karl Stenerud on 06.06.24. +// + +import Foundation +import AVFoundation + +@objcMembers +class AutoInstrumentAVAssetScenario: Scenario, AVAssetDownloadDelegate { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + let currentFileName = "the-file" + let configuration = URLSessionConfiguration.background(withIdentifier: currentFileName) + + let downloadSession = AVAssetDownloadURLSession(configuration: configuration, + assetDownloadDelegate: self, + delegateQueue: OperationQueue.main) + let asset = AVURLAsset(url: url) + let downloadTask = downloadSession.makeAssetDownloadTask(asset: asset, + assetTitle: currentFileName, + assetArtworkData: nil, + options: nil) + downloadTask!.resume() + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + let span = BugsnagPerformance.startSpan(name: "parentSpan") + span.end(); + query(string: "?status=200") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift new file mode 100644 index 00000000..8cecf9d8 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift @@ -0,0 +1,20 @@ +// +// AutoInstrumentAppStartsScenario.swift +// Fixture +// +// Created by Nick Dowell on 07/10/2022. +// + +import BugsnagPerformance + +@objcMembers +class AutoInstrumentAppStartsScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentAppStarts = true + } + + override func run() { + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift new file mode 100644 index 00000000..d56b4936 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift @@ -0,0 +1,24 @@ +// +// AutoInstrumentFileURLRequestScenario.swift +// Fixture +// +// Created by Karl Stenerud on 11.05.23. +// + +import Foundation + +@objcMembers +class AutoInstrumentFileURLRequestScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + let url = URL(string: "file:///x")! + URLSession.shared.dataTask(with: url).resume() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift new file mode 100644 index 00000000..d30453f6 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift @@ -0,0 +1,49 @@ +// +// AutoInstrumentGenericViewLoadScenario.swift +// Fixture +// +// Created by Robert B on 07/12/2023. +// + +import UIKit + +protocol AutoInstrumentGenericViewLoadScenario_GenericsBaseProtocol { + +} + +class AutoInstrumentGenericViewLoadScenario_GenericsClass: AutoInstrumentGenericViewLoadScenario_GenericsBaseProtocol { + +} + +@objcMembers +class AutoInstrumentGenericViewLoadScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + // This test can generate a variable number of spans depending on the OS version, + // so use a timed send instead. + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 1 + } + + override func run() { + UIApplication.shared.windows[0].rootViewController!.present( + AutoInstrumentGenericViewLoadScenario_ViewController().bugsnagTraced(), animated: true) + } +} + +class AutoInstrumentGenericViewLoadScenario_ViewController: UIViewController { + + override func loadView() { + let label = UILabel() + label.backgroundColor = .white + label.textAlignment = .center + label.text = String(describing: type(of: self)) + view = label + } +} + +class TestViewController: AutoInstrumentGenericViewLoadScenario_ViewController { + +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift new file mode 100644 index 00000000..c7ea8158 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift @@ -0,0 +1,47 @@ +// +// AutoInstrumentNavigationViewLoadScenario.swift +// Fixture +// +// Created by Robert B on 16/06/2023. +// + +import Foundation + +import UIKit + +@objcMembers +class AutoInstrumentNavigationViewLoadScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + // This test can generate a variable number of spans depending on the OS version, + // so use a timed send instead. + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 1 + } + + override func run() { + UIApplication.shared.windows[0].rootViewController!.present( + AutoInstrumentNavigationViewLoadScenario_ViewController(), animated: true) + } +} + +class AutoInstrumentNavigationViewLoadScenario_ViewController: UITabBarController { + let subVC = AutoInstrumentNavigationViewLoadScenario_SubViewController() + + override func viewDidLoad() { + viewControllers = [subVC] + } +} + +class AutoInstrumentNavigationViewLoadScenario_SubViewController: UIViewController { + + override func loadView() { + let label = UILabel() + label.backgroundColor = .white + label.textAlignment = .center + label.text = String(describing: type(of: self)) + view = label + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift new file mode 100644 index 00000000..8e5d13b8 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift @@ -0,0 +1,28 @@ +// +// AutoInstrumentNetworkBadAddressScenario.swift +// Fixture +// +// Created by Karl Stenerud on 12.05.23. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkBadAddressScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + query(string: "/?status=200") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift new file mode 100644 index 00000000..105e9eee --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift @@ -0,0 +1,50 @@ +// +// AutoInstrumentNetworkCallbackScenario.swift +// Fixture +// +// Created by Karl Stenerud on 20.07.23. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkCallbackScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + config.networkRequestCallback = { (origInfo: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo in + let info = self.filterAdminMazeRunnerNetRequests(info: origInfo) + + let testUrl = info.url + if (testUrl == nil) { + return info + } + + let url = testUrl! + + if url.absoluteString == "https://google.com" { + info.url = nil + } else if url.lastPathComponent == "changeme" { + info.url = URL(string:"changed", relativeTo:url.deletingLastPathComponent()) + } + + return info + } + } + + func query(url: URL) { + let task = URLSession.shared.dataTask(with: url) {(data, response, error) in + } + task.resume() + + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + query(url: URL(string: "https://bugsnag.com")!) + query(url: URL(string: "https://bugsnag.com/changeme")!) + query(url: URL(string: "https://google.com")!) + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift new file mode 100644 index 00000000..a5eed2a9 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift @@ -0,0 +1,40 @@ +// +// AutoInstrumentNetworkMultiple.swift +// Fixture +// +// Created by Karl Stenerud on 23.06.23. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkMultiple: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + func query(url: String) { + let url = URL(string: "https://google.com")! + let task = URLSession.shared.dataTask(with: url) {(data, response, error) in + } + task.resume() + + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + query(url: "https://google.com") + query(url: "https://facebook.com") + query(url: "https://amazon.com") + query(url: "https://bing.com") + query(url: "https://reuters.com") + query(url: "https://sap.com") + query(url: "https://redhat.com") + query(url: "https://ubuntu.com") + query(url: "https://kubernetes.io") + query(url: "https://bugsnag.com") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift new file mode 100644 index 00000000..919de386 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift @@ -0,0 +1,30 @@ +// +// AutoInstrumentNetworkNoParentScenario.swift +// Fixture +// +// Created by Karl Stenerud on 25.04.23. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkNoParentScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + let span = BugsnagPerformance.startSpan(name: "parentSpan") + span.end(); + query(string: "?status=200") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift new file mode 100644 index 00000000..5bbfcab8 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift @@ -0,0 +1,32 @@ +// +// AutoInstrumentNetworkNullURLScenario.swift +// Fixture +// +// Created by Karl Stenerud on 12.03.24. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkNullURLScenario: Scenario { + + override func configure() { + // Early phase span. Make sure it doesn't crash or generate a span + ObjCURLSession.dataTask(with: nil).resume() + + super.configure() + config.autoInstrumentNetworkRequests = true + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + // Send an actual request to be captured + query(string: "?status=200") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift new file mode 100644 index 00000000..f410f6dd --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift @@ -0,0 +1,34 @@ +// +// AutoInstrumentNetworkPreStartDisabledScenario.swift +// Fixture +// +// Created by Karl Stenerud on 23.09.24. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkPreStartDisabledScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = false + } + + override func startBugsnag() { + query(string: "?status=200") + + // Wait for the query to finish before starting bugsnag + Thread.sleep(forTimeInterval: 2.0) + + super.startBugsnag() + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift new file mode 100644 index 00000000..b07ba4cf --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift @@ -0,0 +1,34 @@ +// +// AutoInstrumentNetworkPreStartScenario.swift +// Fixture +// +// Created by Karl Stenerud on 23.09.24. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkPreStartScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + override func startBugsnag() { + query(string: "?status=200") + + // Wait for the query to finish before starting bugsnag + Thread.sleep(forTimeInterval: 2.0) + + super.startBugsnag() + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift new file mode 100644 index 00000000..25e56df0 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift @@ -0,0 +1,44 @@ +// +// AutoInstrumentNetworkTracePropagationScenario.swift +// Fixture +// +// Created by Karl Stenerud on 30.04.24. +// + +import BugsnagPerformance + +@objcMembers +class AutoInstrumentNetworkTracePropagationScenario: Scenario { + + private var urlPaths: [String] = [] + + required init(fixtureConfig: FixtureConfig) { + super.init(fixtureConfig: fixtureConfig) + } + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + func setCallSites(callSiteStrs: String) { + var newSites: [String] = [] + for path in splitArgs(args: callSiteStrs) { + newSites.append(String(path)) + } + urlPaths = newSites + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + for path in urlPaths { + query(string: path) + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift new file mode 100644 index 00000000..cca8f8e0 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift @@ -0,0 +1,30 @@ +// +// AutoInstrumentNetworkWithParentScenario.swift +// Fixture +// +// Created by Karl Stenerud on 20.10.22. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkWithParentScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + let span = BugsnagPerformance.startSpan(name: "parentSpan") + query(string: "?status=200") + span.end(); + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift new file mode 100644 index 00000000..7018a0e7 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift @@ -0,0 +1,31 @@ +// +// AutoInstrumentNullNetworkCallbackScenario.swift +// Fixture +// +// Created by Karl Stenerud on 02.07.24. +// + +import Foundation + +@objcMembers +class AutoInstrumentNullNetworkCallbackScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + config.networkRequestCallback = nil + } + + func query(url: URL) { + let task = URLSession.shared.dataTask(with: url) {(data, response, error) in + } + task.resume() + + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + query(url: URL(string: "https://bugsnag.com")!) + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift new file mode 100644 index 00000000..1b894ed4 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift @@ -0,0 +1,42 @@ +// +// AutoInstrumentPreLoadedViewLoadScenario.swift +// Fixture +// +// Created by Robert Bartoszewski on 25/01/2024. +// + +import Foundation + +import UIKit + +@objcMembers +class AutoInstrumentPreLoadedViewLoadScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + // This test can generate a variable number of spans depending on the OS version, + // so use a timed send instead. + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 1 + } + + override func run() { + let viewController = AutoInstrumentPreLoadedViewLoadScenario_ViewController() + _ = viewController.view + Thread.sleep(forTimeInterval: 1.5) + UIApplication.shared.windows[0].rootViewController!.present( + viewController, animated: true) + } +} + +class AutoInstrumentPreLoadedViewLoadScenario_ViewController: UIViewController { + + override func loadView() { + let label = UILabel() + label.backgroundColor = .white + label.textAlignment = .center + label.text = String(describing: type(of: self)) + view = label + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift new file mode 100644 index 00000000..82f7a144 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift @@ -0,0 +1,65 @@ +// +// AutoInstrumentSubViewLoadScenario.swift +// Fixture +// +// Created by Karl Stenerud on 27.03.23. +// + +import UIKit + +@objcMembers +class AutoInstrumentSubViewLoadScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + // This test can generate a variable number of spans depending on the OS version, + // so use a timed send instead. + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 1 + } + + override func run() { + UIApplication.shared.windows[0].rootViewController!.present( + AutoInstrumentSubViewLoadScenario_ViewController(), animated: true) + } +} + +class AutoInstrumentSubViewLoadScenario_ViewController: UIViewController { + let subVC = AutoInstrumentSubViewLoadScenario_SubViewController() + + override func viewDidLoad() { + super.viewDidLoad() + add(childViewController:AutoInstrumentSubViewLoadScenario_SubViewController(), to:view) + } +} + +class AutoInstrumentSubViewLoadScenario_SubViewController: UIViewController { + + override func loadView() { + let label = UILabel() + label.backgroundColor = .white + label.textAlignment = .center + label.text = String(describing: type(of: self)) + view = label + } + + override func viewDidLoad() { + super.viewDidLoad() + } +} + +extension UIViewController { + func add(childViewController viewController: UIViewController, to contentView: UIView) { + addChild(viewController) + viewController.view.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(viewController.view) + NSLayoutConstraint.activate([ + viewController.view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), + viewController.view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + viewController.view.topAnchor.constraint(equalTo: contentView.topAnchor), + viewController.view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) + ]) + viewController.didMove(toParent: self) + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift new file mode 100644 index 00000000..3a8a4568 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift @@ -0,0 +1,72 @@ +// +// AutoInstrumentSwiftUIDeferredScenario.swift +// Fixture +// +// Created by Karl Stenerud on 27.12.23. +// + +import SwiftUI +import BugsnagPerformance +import BugsnagPerformanceSwift + +@objcMembers +class AutoInstrumentSwiftUIDeferredScenario: Scenario { + var view = AutoInstrumentSwiftUIDeferredScenario_View(model: AutoInstrumentSwiftUIDeferredModel()) + + override func run() { + if #available(iOS 13.0.0, *) { + UIApplication.shared.windows[0].rootViewController!.present( + UIHostingController(rootView: view), animated: true) + } else { + fatalError("SwiftUI is not available on this version of iOS") + } + } + + func toggleHideText1() { + self.view.toggleHideText1() + } + + func toggleEndSpanDefer() { + self.view.toggleEndSpanDefer() + } +} + +class AutoInstrumentSwiftUIDeferredModel: ObservableObject { + @Published var shouldShowText1: Bool = true + @Published var shouldDeferEndSpan: Bool = true + + func toggleHideText1() { + shouldShowText1.toggle() + } + + func toggleEndSpanDefer() { + shouldDeferEndSpan.toggle() + } +} + +@available(iOS 13.0.0, *) +struct AutoInstrumentSwiftUIDeferredScenario_View: View { + @ObservedObject var model : AutoInstrumentSwiftUIDeferredModel + + func toggleHideText1() { + DispatchQueue.main.async { self.model.toggleHideText1() } + } + + func toggleEndSpanDefer() { + DispatchQueue.main.async { self.model.toggleEndSpanDefer() } + } + + var body: some View { + VStack { + if model.shouldShowText1 { + Text("Text 1") + .bugsnagTraced("text1") + .bugsnagDeferEndUntilViewDisappears() + } + } + .bugsnagTraced("vstack1") + .bugsnagDeferEndUntil { + return !model.shouldDeferEndSpan + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift new file mode 100644 index 00000000..8205cf61 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift @@ -0,0 +1,59 @@ +// +// AutoInstrumentSwiftUIScenario.swift +// Fixture +// +// Created by Karl Stenerud on 27.11.23. +// + +import SwiftUI +import BugsnagPerformance +import BugsnagPerformanceSwift + +@objcMembers +class AutoInstrumentSwiftUIScenario: Scenario { + var view = AutoInstrumentSwiftUIScenario_View(model: AutoInstrumentSwiftUIModel()) + + override func run() { + if #available(iOS 13.0.0, *) { + UIApplication.shared.windows[0].rootViewController!.present( + UIHostingController(rootView: view), animated: true) + } else { + fatalError("SwiftUI is not available on this version of iOS") + } + } + + func switchView() { + self.view.switchView() + } +} + +class AutoInstrumentSwiftUIModel: ObservableObject { + @Published var shouldSwitchViews: Bool = false + + func switchViews() { + shouldSwitchViews.toggle() + } +} + +@available(iOS 13.0.0, *) +struct AutoInstrumentSwiftUIScenario_View: View { + @ObservedObject var model : AutoInstrumentSwiftUIModel + + func switchView() { + DispatchQueue.main.async { self.model.switchViews() } + } + + var body: some View { + if !model.shouldSwitchViews { + return AnyView(VStack { + Image(systemName: "globe") + .imageScale(.large) + .bugsnagTraced("My Image view") + } + .bugsnagTraced("My VStack view") + .padding()) + } else { + return AnyView(Text("Switched").bugsnagTraced("Text")) + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift new file mode 100644 index 00000000..821c3f6e --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift @@ -0,0 +1,47 @@ +// +// AutoInstrumentTabViewLoadScenario.swift +// Fixture +// +// Created by Robert B on 16/06/2023. +// + +import Foundation + +import UIKit + +@objcMembers +class AutoInstrumentTabViewLoadScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + // This test can generate a variable number of spans depending on the OS version, + // so use a timed send instead. + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 1 + } + + override func run() { + UIApplication.shared.windows[0].rootViewController!.present( + AutoInstrumentTabViewLoadScenario_ViewController(), animated: true) + } +} + +class AutoInstrumentTabViewLoadScenario_ViewController: UITabBarController { + let subVC = AutoInstrumentTabViewLoadScenario_SubViewController() + + override func viewDidLoad() { + viewControllers = [subVC] + } +} + +class AutoInstrumentTabViewLoadScenario_SubViewController: UIViewController { + + override func loadView() { + let label = UILabel() + label.backgroundColor = .white + label.textAlignment = .center + label.text = String(describing: type(of: self)) + view = label + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift new file mode 100644 index 00000000..1fc01f6d --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift @@ -0,0 +1,37 @@ +// +// AutoInstrumentViewLoadScenario.swift +// Fixture +// +// Created by Nick Dowell on 12/10/2022. +// + +import UIKit + +@objcMembers +class AutoInstrumentViewLoadScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + // This test can generate a variable number of spans depending on the OS version, + // so use a timed send instead. + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 1 + } + + override func run() { + UIApplication.shared.windows[0].rootViewController!.present( + AutoInstrumentViewLoadScenario_ViewController(), animated: true) + } +} + +class AutoInstrumentViewLoadScenario_ViewController: UIViewController { + + override func loadView() { + let label = UILabel() + label.backgroundColor = .white + label.textAlignment = .center + label.text = String(describing: type(of: self)) + view = label + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift b/features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift new file mode 100644 index 00000000..f62815c8 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift @@ -0,0 +1,25 @@ +// +// BackgroundForegroundScenario.swift +// Fixture +// +// Created by Karl Stenerud on 10.03.23. +// + +import BugsnagPerformance + +@objcMembers +class BackgroundForegroundScenario: Scenario { + var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid + + override func configure() { + super.configure() + config.internal.autoTriggerExportOnBatchSize = 1 + } + + override func run() { + NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) { _ in + logInfo("### Scenario: didEnterBackgroundNotification: Starting and ending 'BackgroundForegroundScenario' span") + BugsnagPerformance.startSpan(name: "BackgroundForegroundScenario").end() + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift b/features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift new file mode 100644 index 00000000..88d35e3f --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift @@ -0,0 +1,22 @@ +// +// BatchingScenario.swift +// Fixture +// +// Created by Karl Stenerud on 02.11.22. +// + +import BugsnagPerformance + +@objcMembers +class BatchingScenario: Scenario { + + override func configure() { + super.configure() + config.internal.autoTriggerExportOnBatchSize = 2 + } + + override func run() { + BugsnagPerformance.startSpan(name: "Span1").end() + BugsnagPerformance.startSpan(name: "Span2").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift b/features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift new file mode 100644 index 00000000..4ec16d93 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift @@ -0,0 +1,22 @@ +// +// BatchingScenario.swift +// Fixture +// +// Created by Karl Stenerud on 02.11.22. +// + +import BugsnagPerformance + +@objcMembers +class BatchingWithTimeoutScenario: Scenario { + + override func configure() { + super.configure() + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 10 + } + + override func run() { + BugsnagPerformance.startSpan(name: "Span1").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift new file mode 100644 index 00000000..7c627105 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift @@ -0,0 +1,285 @@ +// +// ComplexViewScenario.swift +// Fixture +// +// Created by Karl Stenerud on 26.01.24. +// + +import BugsnagPerformance + +@objcMembers +class ComplexViewScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + // This test can generate a variable number of spans depending on the OS version, + // so use a timed send instead. + config.internal.autoTriggerExportOnBatchSize = 100 + config.internal.performWorkInterval = 1 + } + + override func run() { + let viewController = ComplexViewScenario_ViewController() + _ = viewController.view + UIApplication.shared.windows[0].rootViewController!.present( + viewController, animated: true) + } + } + +extension UIColor { + func image(_ size: CGSize = CGSize(width: 128, height: 128)) -> UIImage { + return UIGraphicsImageRenderer(size: size).image { rendererContext in + self.setFill() + rendererContext.fill(CGRect(origin: .zero, size: size)) + } + } +} + +extension UIView { + func anchor (top: NSLayoutYAxisAnchor?, + left: NSLayoutXAxisAnchor?, + bottom: NSLayoutYAxisAnchor?, + right: NSLayoutXAxisAnchor?, + paddingTop: CGFloat, + paddingLeft: CGFloat, + paddingBottom: CGFloat, + paddingRight: CGFloat, + width: CGFloat, + height: CGFloat) { + + translatesAutoresizingMaskIntoConstraints = false + + if let top = top { + self.topAnchor.constraint(equalTo: top, constant: paddingTop+self.safeAreaInsets.top).isActive = true + } + if let left = left { + self.leftAnchor.constraint(equalTo: left, constant: paddingLeft).isActive = true + } + if let right = right { + rightAnchor.constraint(equalTo: right, constant: -paddingRight).isActive = true + } + if let bottom = bottom { + bottomAnchor.constraint(equalTo: bottom, constant: -paddingBottom-self.safeAreaInsets.bottom).isActive = true + } + if height > 0 { + heightAnchor.constraint(equalToConstant: height).isActive = true + } + if width > 0 { + widthAnchor.constraint(equalToConstant: width).isActive = true + } + } +} + +struct ColorItem { + + var name : String + var image : UIImage + var description : String +} + +class ColorItemCell : UITableViewCell { + + var item : ColorItem? { + didSet { + image.image = item?.image + nameLabel.text = item?.name + descriptionLabel.text = item?.description + } + } + + private let image : UIImageView = { + let view = UIImageView(image: UIColor.white.image()) + view.contentMode = .scaleAspectFit + view.clipsToBounds = true + return view + }() + + private let nameLabel : UILabel = { + let label = UILabel() + label.textColor = .black + label.font = UIFont.boldSystemFont(ofSize: 16) + label.textAlignment = .left + return label + }() + + private let descriptionLabel : UILabel = { + let label = UILabel() + label.textColor = .black + label.font = UIFont.systemFont(ofSize: 16) + label.textAlignment = .left + label.numberOfLines = 0 + return label + }() + + private let decreaseButton : UIButton = { + let button = UIButton(type: .custom) + button.setTitle("-", for: .normal) + button.setTitleColor(.black, for: .normal) + button.imageView?.contentMode = .scaleAspectFill + return button + }() + + private let increaseButton : UIButton = { + let button = UIButton(type: .custom) + button.setTitle("+", for: .normal) + button.setTitleColor(.black, for: .normal) + button.imageView?.contentMode = .scaleAspectFill + return button + }() + + var itemQuantity : UILabel = { + let label = UILabel() + label.font = UIFont.boldSystemFont(ofSize: 16) + label.textAlignment = .left + label.text = "1" + label.textColor = .black + return label + }() + + @objc func onDecrease() { + adjustQuantity(by: -1) + } + + @objc func onIncrease() { + adjustQuantity(by: 1) + } + + func adjustQuantity(by amount: Int) { + var quantity = Int(itemQuantity.text!)! + amount + if quantity < 0 { + quantity = 0 + } + itemQuantity.text = "\(quantity)" + } + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + contentView.addSubview(image) + image.anchor(top: topAnchor, + left: leftAnchor, + bottom: bottomAnchor, + right: nil, + paddingTop: 5, + paddingLeft: 5, + paddingBottom: 5, + paddingRight: 0, + width: 90, + height: 0) + + contentView.addSubview(nameLabel) + nameLabel.anchor(top: topAnchor, + left: image.rightAnchor, + bottom: nil, + right: nil, + paddingTop: 20, + paddingLeft: 10, + paddingBottom: 0, + paddingRight: 0, + width: frame.size.width / 2, + height: 0) + + contentView.addSubview(descriptionLabel) + descriptionLabel.anchor(top: nameLabel.bottomAnchor, + left: image.rightAnchor, + bottom: nil, + right: nil, + paddingTop: 0, + paddingLeft: 10, + paddingBottom: 0, + paddingRight: 0, + width: frame.size.width / 2, + height: 0) + + let stackView = UIStackView(arrangedSubviews: [decreaseButton,itemQuantity,increaseButton]) + stackView.distribution = .equalSpacing + stackView.axis = .horizontal + stackView.spacing = 5 + contentView.addSubview(stackView) + stackView.anchor(top: topAnchor, + left: nameLabel.rightAnchor, + bottom: bottomAnchor, + right: rightAnchor, + paddingTop: 15, + paddingLeft: 5, + paddingBottom: 15, + paddingRight: 10, + width: 0, + height: 70) + + increaseButton.addTarget(self, action: #selector(onIncrease), for: .touchUpInside) + decreaseButton.addTarget(self, action: #selector(onDecrease), for: .touchUpInside) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) not supported") + } +} + +class ComplexViewScenario_ViewController: UIViewController { + // Override so that these get instrumented + override func loadView() { + super.loadView() + } + + override func viewDidLoad() { + super.viewDidLoad() + let controller = ComplexViewScenario_TableViewController() + controller.view.frame = self.view.bounds + self.view.addSubview(controller.view) + self.addChild(controller) + controller.didMove(toParent: self) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } +} + +class ComplexViewScenario_TableViewController: UITableViewController { + let cellId = "myCell" + var colorItems : [ColorItem] = [ColorItem]() + + // Override so that these get instrumented + override func loadView() { + super.loadView() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } + + override func viewDidLoad() { + super.viewDidLoad() + + colorItems.append(ColorItem(name: "Orange", image: UIColor.orange.image(), description: "Nothing rhymes with it")) + colorItems.append(ColorItem(name: "Red", image: UIColor.red.image(), description: "The strongest color")) + colorItems.append(ColorItem(name: "Yellow", image: UIColor.yellow.image(), description: "Sunflower color")) + + tableView.register(ColorItemCell.self, forCellReuseIdentifier: cellId) + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ColorItemCell + cell.item = colorItems[indexPath.row] + cell.selectionStyle = UITableViewCell.SelectionStyle.none + return cell + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return colorItems.count + } + + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 100 + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift b/features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift new file mode 100644 index 00000000..29f6aef5 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift @@ -0,0 +1,34 @@ +// +// EarlySpanOnEndScenario.swift +// Fixture +// +// Created by Karl Stenerud on 15.08.24. +// + +import Foundation + +@objcMembers +class EarlySpanOnEndScenario: Scenario { + + override func configure() { + // Early network span + query(string: "test") + + super.configure() + config.autoInstrumentAppStarts = true + config.autoInstrumentNetworkRequests = true + config.add { span in + // We've turned on app start spans, but they'll get filtered + // out here because they don't contain "HTTP" in their names. + return span.name.contains("HTTP") + } + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift new file mode 100644 index 00000000..36831493 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift @@ -0,0 +1,17 @@ +// +// FirstClassNoScenario.swift +// Fixture +// +// Created by Karl Stenerud on 24.03.23. +// + +import BugsnagPerformance + +@objcMembers +class FirstClassNoScenario: Scenario { + + override func run() { + let opts = BugsnagPerformanceSpanOptions().setFirstClass(.no) + BugsnagPerformance.startSpan(name: "FirstClassNoScenario", options: opts).end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift new file mode 100644 index 00000000..fc3e478f --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift @@ -0,0 +1,17 @@ +// +// FirstClassYesScenario.swift +// Fixture +// +// Created by Karl Stenerud on 24.03.23. +// + +import BugsnagPerformance + +@objcMembers +class FirstClassYesScenario: Scenario { + + override func run() { + let opts = BugsnagPerformanceSpanOptions().setFirstClass(.yes) + BugsnagPerformance.startSpan(name: "FirstClassYesScenario", options: opts).end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift new file mode 100644 index 00000000..66000987 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift @@ -0,0 +1,25 @@ +// +// ServiceNameScenario.swift +// Fixture +// +// Created by Robert B on 20/08/2024. +// + +import BugsnagPerformance + +@objcMembers +class FixedSamplingProbabilityOneScenario: Scenario { + + override func configure() { + super.configure() + config.samplingProbability = 1.0 + } + + override func run() { + BugsnagPerformance.startSpan(name: "FixedSamplingProbabilitySpan1").end() + } + + func step2() { + BugsnagPerformance.startSpan(name: "FixedSamplingProbabilitySpan2").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift new file mode 100644 index 00000000..7f4e7550 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift @@ -0,0 +1,21 @@ +// +// FixedSamplingProbabilityZeroScenario.swift +// Fixture +// +// Created by Robert B on 23/08/2024. +// + +import BugsnagPerformance + +@objcMembers +class FixedSamplingProbabilityZeroScenario: Scenario { + + override func configure() { + super.configure() + config.samplingProbability = 0.0 + } + + override func run() { + BugsnagPerformance.startSpan(name: "FixedSamplingProbabilitySpan1").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h b/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h new file mode 100644 index 00000000..f1efaa0a --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h @@ -0,0 +1,20 @@ +// +// ForceUBSan.h +// Fixture +// +// Created by Karl Stenerud on 17.03.23. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +// This file exists solely to force the Xcode scheme to allow UBSan to run. +// The UB sanitizer is forcibly disabled if Xcode thinks it's a Swift-only project. +// Linking in a non-swift framework isn't enough to convince it. + +@interface ForceUBSan : NSObject + +@end + +NS_ASSUME_NONNULL_END diff --git a/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m b/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m new file mode 100644 index 00000000..d7a2432d --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m @@ -0,0 +1,12 @@ +// +// ForceUBSan.m +// Fixture +// +// Created by Karl Stenerud on 17.03.23. +// + +#import "ForceUBSan.h" + +@implementation ForceUBSan + +@end diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift new file mode 100644 index 00000000..23cd245c --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift @@ -0,0 +1,35 @@ +// +// FrameMetricsAutoInstrumentRenderingOffScenario.swift +// Fixture +// +// Created by Robert B on 26/09/2024. +// + +import Bugsnag +import BugsnagPerformance + +@objcMembers +class FrameMetricsAutoInstrumentRenderingOffScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentRendering = false + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "FrameMetricsAutoInstrumentRenderingOffScenario") + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.3) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.5) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.2) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + span.end() + } + } + } + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift new file mode 100644 index 00000000..eb717f99 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift @@ -0,0 +1,38 @@ +// +// FrameMetricsFronzenFramesScenario.swift +// Fixture +// +// Created by Robert B on 20/09/2024. +// + +import Bugsnag +import BugsnagPerformance + +@objcMembers +class FrameMetricsFronzenFramesScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentRendering = true + config.internal.autoTriggerExportOnBatchSize = 3 + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "FrameMetricsFronzenFramesScenario") + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.3) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + Thread.sleep(forTimeInterval: 0.8) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { + Thread.sleep(forTimeInterval: 0.4) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { + Thread.sleep(forTimeInterval: 1.0) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { + span.end() + } + } + } + } + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift new file mode 100644 index 00000000..94711781 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift @@ -0,0 +1,26 @@ +// +// FrameMetricsNoSlowFramesScenario.swift +// Fixture +// +// Created by Robert B on 20/09/2024. +// + +import Bugsnag +import BugsnagPerformance + +@objcMembers +class FrameMetricsNoSlowFramesScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentRendering = true + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "FrameMetricsNoSlowFramesScenario") + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + span.end() + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift new file mode 100644 index 00000000..e27ff7cd --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift @@ -0,0 +1,38 @@ +// +// FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift +// Fixture +// +// Created by Robert B on 27/09/2024. +// + +import Bugsnag +import BugsnagPerformance + +@objcMembers +class FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentRendering = true + } + + override func run() { + let options = BugsnagPerformanceSpanOptions() + options.setInstrumentRendering(.yes) + options.setFirstClass(.no) + let span = BugsnagPerformance.startSpan(name: "FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario", options: options) + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.3) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.5) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.2) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + span.end() + } + } + } + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift new file mode 100644 index 00000000..92b4e377 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift @@ -0,0 +1,35 @@ +// +// FrameMetricsSlowFramesScenario.swift +// Fixture +// +// Created by Robert B on 20/09/2024. +// + +import Bugsnag +import BugsnagPerformance + +@objcMembers +class FrameMetricsSlowFramesScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentRendering = true + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "FrameMetricsSlowFramesScenario") + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.3) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.5) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.2) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + span.end() + } + } + } + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift new file mode 100644 index 00000000..6b02b3f7 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift @@ -0,0 +1,37 @@ +// +// FrameMetricsSpanInstrumentRenderingOffScenario.swift +// Fixture +// +// Created by Robert B on 26/09/2024. +// + +import Bugsnag +import BugsnagPerformance + +@objcMembers +class FrameMetricsSpanInstrumentRenderingOffScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentRendering = true + } + + override func run() { + let options = BugsnagPerformanceSpanOptions() + options.setInstrumentRendering(.no) + let span = BugsnagPerformance.startSpan(name: "FrameMetricsSpanInstrumentRenderingOffScenario", options: options) + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.3) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.5) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + Thread.sleep(forTimeInterval: 0.2) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + span.end() + } + } + } + } + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift b/features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift new file mode 100644 index 00000000..dc8245f7 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift @@ -0,0 +1,20 @@ +// +// InfraCheckMinimalBugsnagScenario.swift +// Fixture +// +// Created by Karl Stenerud on 02.10.24. +// + +import Foundation + +// Scenario for testing the infrastructure with minimal Bugsnag involvement. +@objcMembers +class InfraCheckMinimalBugsnagScenario: Scenario { + override func run() { + logDebug("InfraCheckMinimalBugsnagScenario.run(): Calling reflect URL") + callReflectUrl(appendingToUrl: "?status=200") + logDebug("InfraCheckMinimalBugsnagScenario.run(): Opening and closing a basic span") + BugsnagPerformance.startSpan(name: "test").end() + logDebug("InfraCheckMinimalBugsnagScenario.run(): Done") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift b/features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift new file mode 100644 index 00000000..a2e5b9bd --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift @@ -0,0 +1,26 @@ +// +// InfraCheckNoBugsnagScenario.swift +// Fixture +// +// Created by Karl Stenerud on 02.10.24. +// + +import Foundation + +// Scenario for testing the infrastructure with NO Bugsnag involvement. +@objcMembers +class InfraCheckNoBugsnagScenario: Scenario { + override func configure() { + logDebug("InfraCheckNoBugsnagScenario.configure(): Doing nothing") + } + + override func startBugsnag() { + logDebug("InfraCheckNoBugsnagScenario.startBugsnag(): Doing nothing") + } + + override func run() { + logDebug("InfraCheckNoBugsnagScenario.run(): Calling reflect URL") + callReflectUrl(appendingToUrl: "?status=200") + logDebug("InfraCheckNoBugsnagScenario.run(): Done") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift b/features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift new file mode 100644 index 00000000..73f1a0aa --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift @@ -0,0 +1,27 @@ +// +// InitialPScenario.swift +// Fixture +// +// Created by Karl Stenerud on 04.01.23. +// + +import BugsnagPerformance + +@objcMembers +class InitialPScenario: Scenario { + let initialDelayBeforeSpans = 5.0 + + override func configure() { + super.configure() + config.internal.initialRecurringWorkDelay = initialDelayBeforeSpans + } + override func run() { + // Wait to receive an initial P value response. + Thread.sleep(forTimeInterval: initialDelayBeforeSpans + 0.1) + BugsnagPerformance.startSpan(name: "First").end() + } + + func step2() { + BugsnagPerformance.startSpan(name: "Second").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift new file mode 100644 index 00000000..467a0912 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift @@ -0,0 +1,63 @@ +// +// ManualNetworkCallbackScenario.swift +// Fixture +// +// Created by Karl Stenerud on 24.07.23. +// + +import Foundation + +@objcMembers +class ManualNetworkCallbackScenario: Scenario { + + public var urlSession: URLSession? + + required init(fixtureConfig: FixtureConfig) { + super.init(fixtureConfig: fixtureConfig) + self.urlSession = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main) + } + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = false + config.networkRequestCallback = { (origInfo: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo in + let info = self.filterAdminMazeRunnerNetRequests(info: origInfo) + + let testUrl = info.url + if (testUrl == nil) { + return info + } + + let url = testUrl! + + if url.absoluteString == "https://google.com" { + info.url = nil + } else if url.lastPathComponent == "changeme" { + info.url = URL(string:"changed", relativeTo:url.deletingLastPathComponent()) + } + + return info + } + } + + func query(url: URL) { + let task = self.urlSession!.dataTask(with: url) {(data, response, error) in + } + task.resume() + + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + query(url: URL(string: "https://bugsnag.com")!) + query(url: URL(string: "https://bugsnag.com/changeme")!) + query(url: URL(string: "https://google.com")!) + } +} + +extension ManualNetworkCallbackScenario : URLSessionDataDelegate { + func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { + BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift new file mode 100644 index 00000000..71ccb14a --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift @@ -0,0 +1,44 @@ +// +// ManualNetworkSpanCallbackSetToNilScenario.swift +// Fixture +// +// Created by Robert B on 21/06/2024. +// + +import BugsnagPerformance +import os + +class MyCallbackSetToNilNetworkDelegate: NSObject { + static let shared = MyCallbackSetToNilNetworkDelegate() + public let urlConfiguration = URLSessionConfiguration.default + public var urlSession: URLSession! + + private override init() { + super.init() + self.urlSession = URLSession(configuration: urlConfiguration, delegate: self, delegateQueue: OperationQueue()) + } +} + +extension MyCallbackSetToNilNetworkDelegate : URLSessionDataDelegate { + func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { + BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) + } +} + +@objcMembers +class ManualNetworkSpanCallbackSetToNilScenario: Scenario { + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + MyCallbackSetToNilNetworkDelegate.shared.urlSession.dataTask(with: url).resume() + } + + override func configure() { + super.configure() + config.networkRequestCallback = nil + } + + override func run() { + query(string: "?status=200") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift new file mode 100644 index 00000000..9d01b1b0 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift @@ -0,0 +1,39 @@ +// +// ManualNetworkSpan.swift +// Fixture +// +// Created by Karl Stenerud on 17.10.22. +// + +import BugsnagPerformance +import os + +class MyNetworkDelegate: NSObject { + static let shared = MyNetworkDelegate() + public let urlConfiguration = URLSessionConfiguration.default + public var urlSession: URLSession! + + private override init() { + super.init() + self.urlSession = URLSession(configuration: urlConfiguration, delegate: self, delegateQueue: OperationQueue()) + } +} + +extension MyNetworkDelegate : URLSessionDataDelegate { + func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { + BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) + } +} + +@objcMembers +class ManualNetworkSpanScenario: Scenario { + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + MyNetworkDelegate.shared.urlSession.dataTask(with: url).resume() + } + + override func run() { + query(string: "?status=200") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift new file mode 100644 index 00000000..8862b51b --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift @@ -0,0 +1,58 @@ +// +// ManualNetworkTracePropagationScenario.swift +// Fixture +// +// Created by Karl Stenerud on 29.04.24. +// + +import BugsnagPerformance + +@objcMembers +class ManualNetworkTracePropagationScenario: Scenario { + + public var urlSession: URLSession? + private var urlPaths: [String] = [] + + required init(fixtureConfig: FixtureConfig) { + super.init(fixtureConfig: fixtureConfig) + self.urlSession = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main) + } + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = false + } + + func query(url: URL) { + let task = self.urlSession!.dataTask(with: url) {(data, response, error) in + } + task.resume() + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + urlSession!.dataTask(with: url).resume() + } + + func setCallSites(callSiteStrs: String) { + var newSites: [String] = [] + for path in splitArgs(args: callSiteStrs) { + newSites.append(String(path)) + } + urlPaths = newSites + } + + override func run() { + // Force the automatic spans to be sent in a separate trace that we will discard + waitForCurrentBatch() + for path in urlPaths { + query(string: path) + } + } +} + +extension ManualNetworkTracePropagationScenario : URLSessionDataDelegate { + func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { + BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift new file mode 100644 index 00000000..b53ce168 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift @@ -0,0 +1,26 @@ +// +// ManualParentSpanScenario.swift +// Fixture +// +// Created by Karl Stenerud on 01.07.24. +// + +import BugsnagPerformance + +@objcMembers +class ManualParentSpanScenario: Scenario { + + override func configure() { + super.configure() + config.internal.autoTriggerExportOnBatchSize = 1; + } + + override func run() { + let opts = BugsnagPerformanceSpanOptions() + opts.setParentContext(BugsnagPerformanceSpanContext(traceIdHi: 0x123456789abcdef0, + traceIdLo: 0xfedcba9876543210, + spanId: 0x23456789abcdef01)) + let spanChild = BugsnagPerformance.startSpan(name: "SpanChild", options: opts) + spanChild.end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift new file mode 100644 index 00000000..7299c33d --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift @@ -0,0 +1,22 @@ +// +// ManualSpanBeforeStartScenario.swift +// Fixture +// +// Created by Nick Dowell on 04/10/2022. +// + +import BugsnagPerformance + +@objcMembers +class ManualSpanBeforeStartScenario: Scenario { + + override func startBugsnag() { + config.appVersion = "42" + config.bundleVersion = "42.42" + BugsnagPerformance.startSpan(name: "BeforeStart").end() + super.startBugsnag() + } + + override func run() { + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift new file mode 100644 index 00000000..cb148e7c --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift @@ -0,0 +1,31 @@ +// +// ManualSpanScenario.swift +// Fixture +// +// Created by Nick Dowell on 26/09/2022. +// + +import Bugsnag +import BugsnagPerformance + +@objcMembers +class ManualSpanScenario: Scenario { + + override func startBugsnag() { + Bugsnag.start(with: { + let config = BugsnagConfiguration.loadConfig() + config.apiKey = "12312312312312312312312312312312" + config.endpoints.notify = fixtureConfig.notifyURL.absoluteString + config.endpoints.sessions = fixtureConfig.sessionsURL.absoluteString + return config + }()) + + super.startBugsnag() + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "ManualSpanScenario") + Bugsnag.notifyError(NSError(domain: "Test", code: 0)) + span.end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift new file mode 100644 index 00000000..5cc25a30 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift @@ -0,0 +1,19 @@ +// +// ManualUIViewLoadScenario.swift +// Fixture +// +// Created by Karl Stenerud on 14.02.23. +// + +import BugsnagPerformance + +@objcMembers +class ManualUIViewLoadScenario: Scenario { + + override func run() { + let controller = UIViewController() + let options = BugsnagPerformanceSpanOptions().setStartTime(Date()) + BugsnagPerformance.startViewLoadSpan(controller: controller, options: options) + BugsnagPerformance.endViewLoadSpan(controller: controller, endTime: Date()) + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift new file mode 100644 index 00000000..6535f66f --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift @@ -0,0 +1,19 @@ +// +// ManualViewLoadPhaseScenario.swift +// Fixture +// +// Created by Karl Stenerud on 24.11.23. +// + +import BugsnagPerformance + +@objcMembers +class ManualViewLoadPhaseScenario: Scenario { + override func run() { + let options = BugsnagPerformanceSpanOptions().setStartTime(Date()) + let parentSpan = BugsnagPerformance.startViewLoadSpan(name: "ManualViewLoadPhaseScenario", viewType: .swiftUI, options:options) + let phaseSpan = BugsnagPerformance.startViewLoadPhaseSpan(name: "ManualViewLoadPhaseScenario", phase: "SomePhase", parentContext: parentSpan) + phaseSpan.end() + parentSpan.end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift new file mode 100644 index 00000000..b6568c80 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift @@ -0,0 +1,18 @@ +// +// ManualViewLoadScenario.swift +// Fixture +// +// Created by Nick Dowell on 10/10/2022. +// + +import BugsnagPerformance + +@objcMembers +class ManualViewLoadScenario: Scenario { + + override func run() { + BugsnagPerformance.startViewLoadSpan(name: "ManualViewController", viewType: .uiKit).end() + let options = BugsnagPerformanceSpanOptions().setStartTime(Date()) + BugsnagPerformance.startViewLoadSpan(name: "ManualView", viewType: .swiftUI, options:options).end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift b/features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift new file mode 100644 index 00000000..523f7799 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift @@ -0,0 +1,23 @@ +// +// MaxPayloadSizeScenario.swift +// Fixture +// +// Created by Karl Stenerud on 30.06.23. +// + +import BugsnagPerformance + +@objcMembers +class MaxPayloadSizeScenario: Scenario { + + override func configure() { + super.configure() + config.internal.maxPackageContentLength = 10 + config.internal.autoTriggerExportOnBatchSize = 1 + config.internal.performWorkInterval = 1 + } + + override func run() { + BugsnagPerformance.startSpan(name: "MaxPayloadSizeScenario").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift new file mode 100644 index 00000000..3e1498f0 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift @@ -0,0 +1,32 @@ +// +// ModifyEarlySpansScenario.swift +// Fixture +// +// Created by Karl Stenerud on 29.08.24. +// + +import BugsnagPerformance + +@objcMembers +class ModifyEarlySpansScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentAppStarts = true + config.autoInstrumentNetworkRequests = true + config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in + span.setAttribute("modifiedOnEnd", withValue: "yes") + return true + }) + + query(string: "?status=200") + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } + + override func run() { + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h b/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h new file mode 100644 index 00000000..04b96419 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h @@ -0,0 +1,15 @@ +// +// ObjCURLSession.h +// Fixture +// +// Created by Karl Stenerud on 12.03.24. +// + +#import + +// Wrapper so that we can pass in nil arguments +@interface ObjCURLSession : NSObject + ++ (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url; + +@end diff --git a/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m b/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m new file mode 100644 index 00000000..1302ed8a --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m @@ -0,0 +1,16 @@ +// +// ObjCURLSession.m +// Fixture +// +// Created by Karl Stenerud on 12.03.24. +// + +#import "ObjCURLSession.h" + +@implementation ObjCURLSession + ++ (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url { + return [[NSURLSession sharedSession] dataTaskWithURL:url]; +} + +@end diff --git a/features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift new file mode 100644 index 00000000..5f0660ae --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift @@ -0,0 +1,46 @@ +// +// OnEndCallbackScenario.swift +// Fixture +// +// Created by Karl Stenerud on 25.07.24. +// + +import BugsnagPerformance + +enum MyError: Error { + case invalid +} +@objcMembers +class OnEndCallbackScenario: Scenario { + + override func configure() { + super.configure() + + config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in + return true + }) + config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in + return span.name != "drop_me" + }) + config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in + self.errorGenerator.throwObjCException() + return true + }) + config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in + // Swift is actually auto-compiling in a catch-and-convert-to-NSError + // whenever a Swift throw crosses the Swift-ObjC membrane. But we do this + // anyway just in case something changes and this starts to break. + self.errorGenerator.throwSwiftException() + return true + }) + config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in + return span.name != "drop_me_too" + }) + } + + override func run() { + BugsnagPerformance.startSpan(name: "MySpan").end() + BugsnagPerformance.startSpan(name: "drop_me").end() + BugsnagPerformance.startSpan(name: "drop_me_too").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift new file mode 100644 index 00000000..b2108589 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift @@ -0,0 +1,24 @@ +// +// ParentSpanScenario.swift +// Fixture +// +// Created by Karl Stenerud on 21.02.23. +// + +import BugsnagPerformance + +@objcMembers +class ParentSpanScenario: Scenario { + + override func configure() { + super.configure() + config.internal.autoTriggerExportOnBatchSize = 2; + } + + override func run() { + let spanParent = BugsnagPerformance.startSpan(name: "SpanParent") + let spanChild = BugsnagPerformance.startSpan(name: "SpanChild") + spanChild.end() + spanParent.end(); + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift new file mode 100644 index 00000000..acfb79bf --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift @@ -0,0 +1,28 @@ +// +// ProbabilityExpiryScenario.swift +// Fixture +// +// Created by Karl Stenerud on 24.02.23. +// + +import BugsnagPerformance + +@objcMembers +class ProbabilityExpiryScenario: Scenario { + override func configure() { + super.configure() + config.internal.probabilityRequestsPauseForSeconds = 0.1 + config.internal.probabilityValueExpiresAfterSeconds = 0.1 + } + + override func run() { + // Check that another P value request gets sent when a span is started after + // the current P value has expired. + + // Give the initial P value time to expire. + Thread.sleep(forTimeInterval: 0.5) + + // Now starting a new span should trigger a new P value request. + BugsnagPerformance.startSpan(name: "myspan") + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift new file mode 100644 index 00000000..9b2f3c16 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift @@ -0,0 +1,23 @@ +// +// ReleaseStageNotEnabledScenario.swift +// Fixture +// +// Created by Robert B on 17/03/2023. +// + +import BugsnagPerformance + +@objcMembers +class ReleaseStageNotEnabledScenario: Scenario { + + override func configure() { + super.configure() + config.releaseStage = "dev" + config.enabledReleaseStages = Set(arrayLiteral: "staging", "release") + } + + override func run() { + BugsnagPerformance.startSpan(name: "Span1").end() + BugsnagPerformance.startSpan(name: "Span2").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift b/features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift new file mode 100644 index 00000000..309d44f0 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift @@ -0,0 +1,20 @@ +// +// RetryScenario.swift +// Fixture +// +// Created by Karl Stenerud on 08.11.22. +// + +import BugsnagPerformance + +@objcMembers +class RetryScenario: Scenario { + + override func run() { + BugsnagPerformance.startSpan(name: "WillRetry").end() + } + + func step2() { + BugsnagPerformance.startSpan(name: "Success").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift new file mode 100644 index 00000000..7b2f545c --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift @@ -0,0 +1,28 @@ +// +// SamplingProbabilityZeroScenario.swift +// Fixture +// +// Created by Nick Dowell on 26/10/2022. +// + +import BugsnagPerformance + +@objcMembers +class SamplingProbabilityZeroScenario: Scenario { + + override func configure() { + super.configure() + config.internal.initialSamplingProbability = 0 + } + + override func startBugsnag() { + BugsnagPerformance.startSpan(name: "Pre-start").end() + super.startBugsnag() + } + + override func run() { + // Wait for the initial P value response. + waitForCurrentBatch() + BugsnagPerformance.startSpan(name: "Post-start").end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/Scenario.swift b/features/fixtures/iosXcFramework/Scenarios/Scenario.swift new file mode 100644 index 00000000..c08de86f --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/Scenario.swift @@ -0,0 +1,175 @@ +// +// Scenario.swift +// Fixture +// +// Created by Nick Dowell on 26/09/2022. +// + +import BugsnagPerformance +import Foundation + +typealias MazerunnerMeasurement = (name: String, metrics: [String: Any]) + +class Scenario: NSObject { + let errorGenerator = ErrorGenerator() + let fixtureConfig: FixtureConfig + var config = BugsnagPerformanceConfiguration.loadConfig() + var pendingMeasurements: [MazerunnerMeasurement] = [] + + private override init() { + fatalError("do not use the default init of Scenario") + } + + required init(fixtureConfig: FixtureConfig) { + self.fixtureConfig = fixtureConfig + } + + func configure() { + logDebug("Scenario.configure()") + config.internal.clearPersistenceOnStart = true + config.internal.autoTriggerExportOnBatchSize = 1 + config.apiKey = "12312312312312312312312312312312" + config.autoInstrumentAppStarts = false + config.autoInstrumentNetworkRequests = false + config.autoInstrumentViewControllers = false + config.autoInstrumentRendering = false + config.endpoint = fixtureConfig.tracesURL + config.networkRequestCallback = filterAdminMazeRunnerNetRequests + } + + func urlHasAnyPrefixIn(url: URL, prefixes: [URL]) -> Bool { + for prefix in prefixes { + if url.absoluteString.hasPrefix(prefix.absoluteString) { + return true + } + } + return false + } + + func filterNetRequestsContainingPrefixes(info: BugsnagPerformanceNetworkRequestInfo, + prefixes: [URL]) -> BugsnagPerformanceNetworkRequestInfo { + if info.url == nil { + return info + } + + if urlHasAnyPrefixIn(url: info.url!, prefixes: prefixes) { + info.url = nil + } + return info + } + + func filterAllMazeRunnerNetRequests(info: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo { + return filterNetRequestsContainingPrefixes(info: info, prefixes: fixtureConfig.allMazeRunnerURLs) + } + + func filterAdminMazeRunnerNetRequests(info: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo { + // Everything except reflectURL + return filterNetRequestsContainingPrefixes(info: info, prefixes: fixtureConfig.adminMazeRunnerURLs) + } + + func clearPersistentData() { + logDebug("Scenario.clearPersistentData()") + UserDefaults.standard.removePersistentDomain( + forName: Bundle.main.bundleIdentifier!) + let cachesUrl = FileManager.default.urls(for: .cachesDirectory, in: .allDomainsMask).first! + for file in try! FileManager.default.contentsOfDirectory(at: cachesUrl, includingPropertiesForKeys: nil) { + try! FileManager.default.removeItem(at: file) + } + } + + func splitArgs(args: String) -> [String] { + return args.split(separator: ",").map(String.init) + } + + func configureBugsnag(path: String, value: String) { + logDebug("Scenario.configureBugsnag()") + switch path { + case "propagateTraceParentToUrlsMatching": + var regexes: Set = [] + for reStr in splitArgs(args: value) { + regexes.insert(try! NSRegularExpression(pattern: reStr)) + } + config.tracePropagationUrls = regexes + break + default: + fatalError("\(path): Unknown configuration path") + } + } + + func startBugsnag() { + logDebug("Scenario.startBugsnag()") + performAndReportDuration({ + BugsnagPerformance.start(configuration: config) + }, measurement: "start") + } + + func run() { + logError("Scenario.run() has not been overridden!") + fatalError("To be implemented by subclass") + } + + func enterBackground(forSeconds seconds: Int) { +#if canImport(UIKit) + var documentName = "background_forever.html" + if (seconds >= 0) { + documentName = "background_for_\(seconds)_sec.html" + } + let url = self.fixtureConfig.docsURL.appendingPathComponent(documentName) + logInfo("Backgrounding the app using \(documentName)") + UIApplication.shared.open(url, options: [:]) { success in + logInfo("Opened \(url) \(success ? "successfully" : "unsuccessfully")"); + } +#else + fatalError("This e2e test requires UIApplication, which is not available on this platform.") +#endif + } + + func reportMeasurements() { + pendingMeasurements.forEach { measurement in + report(metrics: measurement.metrics, name: measurement.name) + } + pendingMeasurements = [] + } + + func waitForCurrentBatch() { + logDebug("Scenario.waitForCurrentBatch()") + // Wait long enough to allow the current batch to be packaged and sent + Thread.sleep(forTimeInterval: 1.0) + } + + func performAndReportDuration(_ body: () -> Void, measurement: String) { + let startDate = Date() + body() + let endDate = Date() + + let calendar = Calendar.current + let duration = calendar.dateComponents([.nanosecond], from: startDate, to: endDate) + let metrics = ["duration.nanos": "\(duration.nanosecond ?? 0)"] + pendingMeasurements.append((name: measurement, metrics: metrics)) + } + + func report(metrics: [String: Any], name: String) { + var request = URLRequest(url: fixtureConfig.metricsURL) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + var body = metrics + body["metric.measurement"] = name + body["device.manufacturer"] = "Apple" + body["device.model"] = UIDevice.current.model + body["os.name"] = UIDevice.current.systemName + body["os.version"] = UIDevice.current.systemVersion + let jsonData = try? JSONSerialization.data(withJSONObject: body) + guard let jsonData = jsonData else { + return + } + request.httpBody = jsonData + + URLSession.shared.dataTask(with: request).resume() + } + + func callReflectUrl(appendingToUrl: String) { + let url = URL(string: appendingToUrl, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift new file mode 100644 index 00000000..28c335e1 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift @@ -0,0 +1,23 @@ +// +// SetAttributeCountLimitScenario.swift +// Fixture +// +// Created by Karl Stenerud on 16.09.24. +// + +import BugsnagPerformance + +@objcMembers +class SetAttributeCountLimitScenario: Scenario { + + override func configure() { + super.configure() + config.attributeCountLimit = 3 + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "MySpan") + span.setAttribute("a", withValue: "12345678901") + span.end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift new file mode 100644 index 00000000..c1cdf120 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift @@ -0,0 +1,25 @@ +// +// SetAttributesScenario.swift +// Fixture +// +// Created by Karl Stenerud on 19.07.24. +// + +import BugsnagPerformance + +@objcMembers +class SetAttributesScenario: Scenario { + + override func run() { + let span = BugsnagPerformance.startSpan(name: "MySpan") + span.setAttribute("a", withValue: "xyz") + span.setAttribute("b", withValue: "abc") + span.setAttribute("b", withValue: nil) + span.setAttribute("c", withValue: ["array_0", 1, true, 1.5]) + span.setAttribute("d", withValue: URL(string: "https://bugsnag.com")) + span.setAttribute("e", withValue: [{}]) + span.setAttribute("f", withValue: [[]]) + span.setAttribute("x", withValue: []) + span.end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift new file mode 100644 index 00000000..d8b7344f --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift @@ -0,0 +1,25 @@ +// +// SetAttributesWithLimitsScenario.swift +// Fixture +// +// Created by Karl Stenerud on 13.09.24. +// + +import BugsnagPerformance + +@objcMembers +class SetAttributesWithLimitsScenario: Scenario { + + override func configure() { + super.configure() + config.attributeStringValueLimit = 10 + config.attributeArrayLengthLimit = 3 + } + + override func run() { + let span = BugsnagPerformance.startSpan(name: "MySpan") + span.setAttribute("a", withValue: "12345678901") + span.setAttribute("b", withValue: [1, 2, 3, 4]) + span.end() + } +} diff --git a/features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift new file mode 100644 index 00000000..da35a579 --- /dev/null +++ b/features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift @@ -0,0 +1,39 @@ +// +// ViewDidLoadDoesntTriggerScenario.swift +// Fixture +// +// Created by Karl Stenerud on 21.03.24. +// + +import UIKit + +@objcMembers +class ViewDidLoadDoesntTriggerScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentViewControllers = true + } + + override func run() { + let vc = ViewDidLoadDoesntTriggerScenario_ViewController() + + // Simulate showing a view, except that viewDidAppear doesn't trigger + vc.loadView() + vc.viewDidLoad() + vc.viewWillAppear(false) + vc.viewWillLayoutSubviews() + vc.viewDidLayoutSubviews() + } +} + +class ViewDidLoadDoesntTriggerScenario_ViewController: UIViewController { + + override func loadView() { + let label = UILabel() + label.backgroundColor = .white + label.textAlignment = .center + label.text = String(describing: type(of: self)) + view = label + } +} diff --git a/features/fixtures/iosXcFramework/build.sh b/features/fixtures/iosXcFramework/build.sh new file mode 100755 index 00000000..9beb48a9 --- /dev/null +++ b/features/fixtures/iosXcFramework/build.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +xcodebuild -version | awk 'NR==1{x=$0}END{print x" "$NF}' +echo "$(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -m)" + +set -euxo pipefail + +disable_swizzling_key='' +disable_swizzling_value='' +swizzling_premain_key='' +swizzling_premain_value='' + +fixture_name='Fixture' +for ((i=1;i<=$#;i++)); +do + if [ ${!i} = '--fixtureName' ] + then ((i++)) + fixture_name=${!i}; + fi + if [ ${!i} = '--disableSwizzling' ] + then + disable_swizzling_key='disableSwizzling' + disable_swizzling_value='\t\t\t\t\t\t\t\t\t\t'; + fi + if [ ${!i} = '--swizzlingPremain' ] + then + swizzling_premain_key='swizzleViewLoadPreMain' + swizzling_premain_value='\t\t\t\t\t\t\t\t\t' + fi +done; + +unzip -q BugsnagPerformance.xcframework.zip +unzip -q BugsnagPerformanceSwift.xcframework.zip + +cp $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.template.plist $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist + +sed -i '' -e 's|DISABLE_SWIZZLING_KEY|'$disable_swizzling_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|DISABLE_SWIZZLING_VALUE|'$disable_swizzling_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|SWIZZLING_PREMAIN_KEY|'$swizzling_premain_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist + +cd $(dirname "${BASH_SOURCE[0]}") + +xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -scheme Fixture archive -allowProvisioningUpdates -quiet + +xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -exportArchive -exportPath output -exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates -quiet + +mv ./output/Fixture.ipa ./output/$fixture_name.ipa + +#rm ./Fixture/Info.plist diff --git a/features/fixtures/iosXcFramework/utils/Logging.h b/features/fixtures/iosXcFramework/utils/Logging.h new file mode 100644 index 00000000..374ba6d3 --- /dev/null +++ b/features/fixtures/iosXcFramework/utils/Logging.h @@ -0,0 +1,25 @@ +// +// Logging.h +// iOSTestApp +// +// Created by Karl Stenerud on 02.11.23. +// Copyright © 2023 Bugsnag. All rights reserved. +// + +#import + +void logDebugObjC(NSString *format, ...); +void logInfoObjC(NSString *format, ...); +void logWarnObjC(NSString *format, ...); +void logErrorObjC(NSString *format, ...); + +//#define logInfo(FMT, ...) logInfoObjC(FMT, __VA_ARGS__) +//#define logWarn(FMT, ...) logWarnObjC(FMT, __VA_ARGS__) +//#define logError(FMT, ...) logErrorObjC(FMT, __VA_ARGS__) + +#define logDebug logDebugObjC +#define logInfo logInfoObjC +#define logWarn logWarnObjC +#define logError logErrorObjC + +void logInternal(const char* level, NSString *format, va_list args); diff --git a/features/fixtures/iosXcFramework/utils/Logging.m b/features/fixtures/iosXcFramework/utils/Logging.m new file mode 100644 index 00000000..742201d7 --- /dev/null +++ b/features/fixtures/iosXcFramework/utils/Logging.m @@ -0,0 +1,51 @@ +// +// Logging.m +// iOSTestApp +// +// Created by Karl Stenerud on 02.11.23. +// Copyright © 2023 Bugsnag. All rights reserved. +// + +#import "Logging.h" + +extern void bsg_i_kslog_logCBasic(const char *fmt, ...) __printflike(1, 2); + +void logInternal(const char* level, NSString *format, va_list args) { + NSString *formatted = [[NSString alloc] initWithFormat:format arguments:args]; + NSString *fullMessage = [NSString stringWithFormat:@"bugsnagci %s: %@", level, formatted]; + + NSLog(@"%@", fullMessage); + bsg_i_kslog_logCBasic("%s", + [[NSString stringWithFormat:@"%@ %@", + [NSDate date], fullMessage] + cStringUsingEncoding:NSUTF8StringEncoding]); + +} + +void logDebugObjC(NSString *format, ...) { + va_list args; + va_start(args, format); + logInternal("debug", format, args); + va_end(args); +} + +void logInfoObjC(NSString *format, ...) { + va_list args; + va_start(args, format); + logInternal("info", format, args); + va_end(args); +} + +void logWarnObjC(NSString *format, ...) { + va_list args; + va_start(args, format); + logInternal("warn", format, args); + va_end(args); +} + +void logErrorObjC(NSString *format, ...) { + va_list args; + va_start(args, format); + logInternal("error", format, args); + va_end(args); +} diff --git a/features/fixtures/iosXcFramework/utils/Logging.swift b/features/fixtures/iosXcFramework/utils/Logging.swift new file mode 100644 index 00000000..92538e87 --- /dev/null +++ b/features/fixtures/iosXcFramework/utils/Logging.swift @@ -0,0 +1,45 @@ +// +// logging.swift +// Fixture +// +// Created by Karl Stenerud on 02.11.23. +// Copyright © 2023 Bugsnag. All rights reserved. +// + +import Foundation + +//public func logDebug(_ format: String) { +// logDebug(format: format, args: 0 as Int) +//} +public func logDebug(_ format: String, _ args: CVarArg...) { + withVaList(args) { + logInternal("debug", format, $0) + } +} + +//public func logInfo(_ format: String) { +// logInfo(format: format, args: 0 as Int) +//} +public func logInfo(_ format: String, _ args: CVarArg...) { + withVaList(args) { + logInternal("info", format, $0) + } +} + +//public func logWarn(_ format: String) { +// logWarn(format: format, args: 0 as Int) +//} +public func logWarn(_ format: String, _ args: CVarArg...) { + withVaList(args) { + logInternal("warn", format, $0) + } +} + +//public func logError(_ format: String) { +// logError(format: format, args: 0 as Int) +//} +public func logError(_ format: String, _ args: CVarArg...) { + withVaList(args) { + logInternal("error", format, $0) + } +} From 11a5d54e54cb8c86db19edeb60a4f005ab46841f Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 11:19:47 +0100 Subject: [PATCH 07/51] update buildkite artifact path --- .buildkite/pipeline.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index d4b752d0..13241b2c 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -58,8 +58,8 @@ steps: - bundle exec upload-app --farm=bb --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt - bundle exec upload-app --farm=bs --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bs_xcframework_ipa_url.txt artifact_paths: - - features/fixtures/ios/output/bb_xcframework_ipa_url.txt - - features/fixtures/ios/output/bs_xcframework_ipa_url.txt + - features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt + - features/fixtures/iosXcFramework/output/bs_xcframework_ipa_url.txt - label: "Fixture swizzling disabled" key: ios_fixture_swizzling_disabled From 543825200d993868b3d2244d878dcf166c30cc89 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 11:22:19 +0100 Subject: [PATCH 08/51] update buildkite artifact path --- .buildkite/pipeline.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 13241b2c..a78c4da2 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -10,6 +10,7 @@ steps: - group: ":hammer: Builds" steps: - label: "XCFramework" + key: xcframework timeout_in_minutes: 20 commands: - make build_xcframework @@ -45,21 +46,20 @@ steps: - features/fixtures/ios/output/bb_ipa_url.txt - features/fixtures/ios/output/bs_ipa_url.txt - - label: "Fixture with XcFramework" + - label: "Fixture XcFramework" key: ios_fixture_xcframework + depends_on: xcframework + commands: + - ./features/fixtures/iosXcFramework/build.sh + - bundle install + - bundle exec upload-app --farm=bb --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt plugins: - artifacts#v1.9.3: download: - "BugsnagPerformance.xcframework.zip" - "BugsnagPerformanceSwift.xcframework.zip" - commands: - - ./features/fixtures/iosXcFramework/build.sh - - bundle install - - bundle exec upload-app --farm=bb --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt - - bundle exec upload-app --farm=bs --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bs_xcframework_ipa_url.txt artifact_paths: - features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt - - features/fixtures/iosXcFramework/output/bs_xcframework_ipa_url.txt - label: "Fixture swizzling disabled" key: ios_fixture_swizzling_disabled From eabe9aa2417b159df9bddcaeebb19535624e8f89 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 11:29:31 +0100 Subject: [PATCH 09/51] add xcframework e2e tests --- .buildkite/pipeline.yml | 138 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 136 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index a78c4da2..5d603ae3 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -46,8 +46,8 @@ steps: - features/fixtures/ios/output/bb_ipa_url.txt - features/fixtures/ios/output/bs_ipa_url.txt - - label: "Fixture XcFramework" - key: ios_fixture_xcframework + - label: "XcFramework Fixture" + key: ios_xcframework_fixture depends_on: xcframework commands: - ./features/fixtures/iosXcFramework/build.sh @@ -237,6 +237,140 @@ steps: concurrency_group: bitbar-app concurrency_method: eager + - group: ":bitbar: XcFramework E2E Tests" + steps: + - label: ":bitbar: iOS XcFramework 16 E2E Tests" + depends_on: + - ios_xcframework_fixture + timeout_in_minutes: 30 + agents: + queue: opensource + plugins: + artifacts#v1.9.3: + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + upload: + - "maze_output/failed/**/*" + - "maze_output/metrics.csv" + - "maze_output/maze_output.zip" + docker-compose#v4.8.0: + pull: maze-runner-bb + run: maze-runner-bb + service-ports: true + command: + - "--app=@build/bb_xcframework_ipa_url.txt" + - "--device=IOS_16" + - "--fail-fast" + - "--farm=bb" + - "--no-tunnel" + - "--aws-public-ip" + - "features/default" + test-collector#v1.10.2: + files: "reports/TEST-*.xml" + format: "junit" + branch: "^main|next$$" + concurrency: 25 + concurrency_group: bitbar-app + concurrency_method: eager + + - label: ":bitbar: iOS XcFramework 15 E2E Tests" + depends_on: + - ios_xcframework_fixture + timeout_in_minutes: 30 + agents: + queue: opensource + plugins: + artifacts#v1.9.3: + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + upload: + - "maze_output/failed/**/*" + - "maze_output/metrics.csv" + - "maze_output/maze_output.zip" + docker-compose#v4.8.0: + pull: maze-runner-bb + run: maze-runner-bb + service-ports: true + command: + - "--app=@build/bb_xcframework_ipa_url.txt" + - "--device=IOS_15" + - "--fail-fast" + - "--farm=bb" + - "--no-tunnel" + - "--aws-public-ip" + - "features/default" + test-collector#v1.10.2: + files: "reports/TEST-*.xml" + format: "junit" + branch: "^main|next$$" + concurrency: 25 + concurrency_group: bitbar-app + concurrency_method: eager + + - label: ":bitbar: iOS XcFramework 14 E2E Tests" + depends_on: + - ios_xcframework_fixture + timeout_in_minutes: 30 + agents: + queue: opensource + plugins: + artifacts#v1.9.3: + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + upload: + - "maze_output/failed/**/*" + - "maze_output/metrics.csv" + - "maze_output/maze_output.zip" + docker-compose#v4.8.0: + pull: maze-runner-bb + run: maze-runner-bb + service-ports: true + command: + - "--app=@build/bb_xcframework_ipa_url.txt" + - "--device=IOS_14" + - "--fail-fast" + - "--farm=bb" + - "--no-tunnel" + - "--aws-public-ip" + - "features/default" + test-collector#v1.10.2: + files: "reports/TEST-*.xml" + format: "junit" + branch: "^main|next$$" + concurrency: 25 + concurrency_group: bitbar-app + concurrency_method: eager + + - label: ":bitbar: iOS XcFramework 13 E2E Tests" + depends_on: + - ios_xcframework_fixture + timeout_in_minutes: 30 + agents: + queue: opensource + plugins: + artifacts#v1.9.3: + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + upload: + - "maze_output/failed/**/*" + - "maze_output/metrics.csv" + - "maze_output/maze_output.zip" + docker-compose#v4.8.0: + pull: maze-runner-bb + run: maze-runner-bb + service-ports: true + command: + - "--app=@build/bb_xcframework_ipa_url.txt" + - "--device=IOS_13" + - "--fail-fast" + - "--farm=bb" + - "--no-tunnel" + - "--aws-public-ip" + - "features/default" + test-collector#v1.10.2: + files: "reports/TEST-*.xml" + format: "junit" + branch: "^main|next$$" + concurrency: 25 + concurrency_group: bitbar-app + concurrency_method: eager + - group: ":bitbar: Swizzling disabled E2E Tests" steps: - label: ":bitbar: iOS 16 E2E Tests swizzling disabled" From 51824492823ffa1eac311673547bef04349e1b11 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 11:34:38 +0100 Subject: [PATCH 10/51] add xcframework e2e tests --- .buildkite/pipeline.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 5d603ae3..87c56c72 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -247,7 +247,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" @@ -280,7 +280,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" @@ -313,7 +313,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" @@ -346,7 +346,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" From 70761c2edc7534f48fd6d6ab10928d1c36f56ea7 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 11:39:04 +0100 Subject: [PATCH 11/51] add xcframework e2e tests --- .buildkite/pipeline.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 87c56c72..389f3d0b 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -253,8 +253,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb + pull: maze-runner-bb-xcframework + run: maze-runner-bb-xcframework service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" @@ -286,8 +286,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb + pull: maze-runner-bb-xcframework + run: maze-runner-bb-xcframework service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" @@ -319,8 +319,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb + pull: maze-runner-bb-xcframework + run: maze-runner-bb-xcframework service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" @@ -352,8 +352,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb + pull: maze-runner-bb-xcframework + run: maze-runner-bb-xcframework service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" From a7f5edaba524e2f705ccbe7979ee5affbfd5ac7a Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 11:44:46 +0100 Subject: [PATCH 12/51] add xcframework e2e tests --- docker-compose.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index d535a7f7..78baad55 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,6 +38,20 @@ services: - /var/run/docker.sock:/var/run/docker.sock - ./reports/:/app/reports/ + maze-runner-bb-xcframework: + image: 855461928731.dkr.ecr.us-west-1.amazonaws.com/maze-runner-releases:latest-v9-cli + environment: + <<: *common-environment + BITBAR_USERNAME: + BITBAR_ACCESS_KEY: + ports: + - "9000-9499:9339" + - "9000-9499:9340" + volumes: + - ./features/fixtures/iosXcFramework/output:/app/build + - ./features/:/app/features/ + - ./maze_output:/app/maze_output + - /var/run/docker.sock:/var/run/docker.sock maze-runner-bs: image: 855461928731.dkr.ecr.us-west-1.amazonaws.com/maze-runner-releases:latest-v9-cli environment: From a827d1daa8ac04ef69877a3281816fde5b46bd46 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 12:34:33 +0100 Subject: [PATCH 13/51] add xcframework e2e tests --- .../fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj index 99c0ec4c..3c88f193 100644 --- a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj +++ b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj @@ -675,7 +675,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformance; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; @@ -707,7 +707,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformance; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; From 3e9e17a41672dbe614015b920b31f10f995226cf Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 13:35:23 +0100 Subject: [PATCH 14/51] add new steps for e2e tests --- features/default/manual_spans.feature | 3 ++- .../Fixture.xcodeproj/project.pbxproj | 4 ++-- features/steps/app_steps.rb | 19 ++++++++++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/features/default/manual_spans.feature b/features/default/manual_spans.feature index 489ed23a..895c5b2f 100644 --- a/features/default/manual_spans.feature +++ b/features/default/manual_spans.feature @@ -60,7 +60,8 @@ Feature: Manual creation of spans * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" * every span bool attribute "bugsnag.span.first_class" is true - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" +# * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * the trace payload field "resourceSpans.0.resource" string attribute "bugsnag.app.bundle_version" equals "42.42" diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj index 3c88f193..99c0ec4c 100644 --- a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj +++ b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj @@ -675,7 +675,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformance; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; @@ -707,7 +707,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformance; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; diff --git a/features/steps/app_steps.rb b/features/steps/app_steps.rb index f152ee9d..373ed705 100644 --- a/features/steps/app_steps.rb +++ b/features/steps/app_steps.rb @@ -295,7 +295,7 @@ def assert_received_exactly_spans(span_count, list) end Then('the span named {string} is the parent of every span named {string}') do |span1name, span2name| - + spans = spans_from_request_list(Maze::Server.list_for("traces")) parentSpan = spans.find_all { |span| span['name'].eql?(span1name) }.first @@ -304,3 +304,20 @@ def assert_received_exactly_spans(span_count, list) childSpans2.map { |span| Maze.check.true(parentSpan['spanId'] == span['parentSpanId']) } end + +And('the trace payload field {string} string attribute {string} matches the regex {string}') do |field, attribute, expected| + check_attribute_equal_regex field, attribute, 'stringValue', expected +end + +# def get_attribute_value(field, attribute, attr_type) +# list = Maze::Server.list_for 'trace' +# attributes = Maze::Helper.read_key_path list.current[:body], "#{field}.attributes" +# attribute = attributes.find { |a| a['key'] == attribute } +# value = attribute&.dig 'value', attr_type +# attr_type == 'intValue' && value.is_a?(String) ? value.to_i : value +# end + +def check_attribute_equal_regex(field, attribute, attr_type, expected) + actual = get_attribute_value field, attribute, attr_type + Maze.check.match(expected, actual) +end From 6f7a03a931c819a5431860a320e09c18e05279b3 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 13:41:25 +0100 Subject: [PATCH 15/51] add new steps for e2e tests --- features/default/automatic_spans.feature | 42 ++++++++++++------------ features/default/manual_spans.feature | 22 ++++++------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/features/default/automatic_spans.feature b/features/default/automatic_spans.feature index 7285f07b..e4a1cda5 100644 --- a/features/default/automatic_spans.feature +++ b/features/default/automatic_spans.feature @@ -22,7 +22,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.span.category" equals "app_start" * a span string attribute "bugsnag.span.category" equals "app_start_phase" * every span bool attribute "bugsnag.span.first_class" does not exist - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -59,7 +59,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.view.name" equals "Fixture.AutoInstrumentViewLoadScenario_ViewController" * a span bool attribute "bugsnag.span.first_class" is true * a span string attribute "bugsnag.view.type" equals "UIKit" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -96,7 +96,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.view.name" equals "Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * a span bool attribute "bugsnag.span.first_class" is true * a span string attribute "bugsnag.view.type" equals "UIKit" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -185,7 +185,7 @@ Feature: Automatic instrumentation spans * a span named "[ViewLoadPhase/viewWillLayoutSubviews]/Fixture.AutoInstrumentSubViewLoadScenario_SubViewController" started before a span named "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentSubViewLoadScenario_SubViewController" * a span named "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentSubViewLoadScenario_SubViewController" started before a span named "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.AutoInstrumentSubViewLoadScenario_SubViewController" * a span named "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.AutoInstrumentSubViewLoadScenario_SubViewController" started before a span named "[ViewLoadPhase/viewDidAppear]/Fixture.AutoInstrumentSubViewLoadScenario_SubViewController" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -233,7 +233,7 @@ Feature: Automatic instrumentation spans * a span bool attribute "bugsnag.span.first_class" is true * a span bool attribute "bugsnag.span.first_class" is false * a span string attribute "bugsnag.view.type" equals "UIKit" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -281,7 +281,7 @@ Feature: Automatic instrumentation spans * a span bool attribute "bugsnag.span.first_class" is true * a span bool attribute "bugsnag.span.first_class" is false * a span string attribute "bugsnag.view.type" equals "UIKit" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -318,7 +318,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.view.name" equals "Fixture.AutoInstrumentPreLoadedViewLoadScenario_ViewController (pre-loaded)" * a span bool attribute "bugsnag.span.first_class" is true * a span string attribute "bugsnag.view.type" equals "UIKit" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -354,7 +354,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.view.name" equals "Fixture.ViewDidLoadDoesntTriggerScenario_ViewController" * a span bool attribute "bugsnag.span.first_class" is true * a span string attribute "bugsnag.view.type" equals "UIKit" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -378,7 +378,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.view.name" equals "My Image view" * a span bool attribute "bugsnag.span.first_class" is true * a span string attribute "bugsnag.view.type" equals "SwiftUI" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -401,7 +401,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.view.name" equals "My Image view" * a span bool attribute "bugsnag.span.first_class" is true * a span string attribute "bugsnag.view.type" equals "SwiftUI" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" And I discard every trace @@ -435,7 +435,7 @@ Feature: Automatic instrumentation spans * every span string attribute "bugsnag.span.category" equals "view_load_phase" * a span string attribute "bugsnag.view.name" equals "vstack1" * a span string attribute "bugsnag.view.name" equals "text1" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" Then I discard every trace @@ -467,7 +467,7 @@ Feature: Automatic instrumentation spans * every span string attribute "bugsnag.span.category" equals "view_load_phase" * a span string attribute "bugsnag.view.name" equals "vstack1" * a span string attribute "bugsnag.view.name" equals "text1" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" Then I discard every trace @@ -520,7 +520,7 @@ Feature: Automatic instrumentation spans * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" * a span bool attribute "bugsnag.span.first_class" is true * a span bool attribute "bugsnag.span.first_class" does not exist - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -545,7 +545,7 @@ Feature: Automatic instrumentation spans * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" * a span bool attribute "bugsnag.span.first_class" is true * a span bool attribute "bugsnag.span.first_class" does not exist - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -566,7 +566,7 @@ Feature: Automatic instrumentation spans * every span field "kind" equals 1 * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -597,7 +597,7 @@ Feature: Automatic instrumentation spans * every span field "kind" equals 1 * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -617,7 +617,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.instrumentation_message" matches the regex "Error.*" * a span bool attribute "bugsnag.span.first_class" is true * a span bool attribute "bugsnag.span.first_class" does not exist - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -640,7 +640,7 @@ Feature: Automatic instrumentation spans * every span field "kind" equals 1 * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -665,7 +665,7 @@ Feature: Automatic instrumentation spans * every span field "kind" equals 1 * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -716,7 +716,7 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.phase" equals "Subview layout" * a span string attribute "bugsnag.span.category" equals "view_load" * a span string attribute "bugsnag.span.category" equals "view_load_phase" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -744,6 +744,6 @@ Feature: Automatic instrumentation spans * a span string attribute "bugsnag.span.category" equals "app_start_phase" * every span bool attribute "bugsnag.span.first_class" does not exist * every span string attribute "modifiedOnEnd" equals "yes" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" diff --git a/features/default/manual_spans.feature b/features/default/manual_spans.feature index 895c5b2f..e300741d 100644 --- a/features/default/manual_spans.feature +++ b/features/default/manual_spans.feature @@ -43,7 +43,7 @@ Feature: Manual creation of spans * the trace payload field "resourceSpans.0.resource" string attribute "os.name" equals "iOS" * the trace payload field "resourceSpans.0.resource" string attribute "os.type" equals "darwin" * the trace payload field "resourceSpans.0.resource" string attribute "os.version" exists - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "service.version" equals "10.0" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -60,7 +60,7 @@ Feature: Manual creation of spans * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" * every span bool attribute "bugsnag.span.first_class" is true -# * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" +# * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" @@ -121,7 +121,7 @@ Feature: Manual creation of spans Then the trace "Content-Type" header equals "application/json" * the trace "Bugsnag-Span-Sampling" header equals "1:1" * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * every span field "name" equals "[HTTP/GET]" @@ -144,7 +144,7 @@ Feature: Manual creation of spans Then the trace "Content-Type" header equals "application/json" * the trace "Bugsnag-Span-Sampling" header is present * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * a span field "name" equals "[HTTP/GET]" @@ -166,7 +166,7 @@ Feature: Manual creation of spans Then the trace "Content-Type" header equals "application/json" * the trace "Bugsnag-Span-Sampling" header is present * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * a span field "name" equals "Span1" @@ -191,7 +191,7 @@ Feature: Manual creation of spans * every span field "kind" equals 1 * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * every span bool attribute "bugsnag.span.first_class" is true @@ -201,7 +201,7 @@ Feature: Manual creation of spans And I wait for 2 spans Then the trace "Content-Type" header equals "application/json" * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * a span field "name" equals "SpanParent" @@ -220,7 +220,7 @@ Feature: Manual creation of spans And I wait for 1 span Then the trace "Content-Type" header equals "application/json" * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * a span field "name" equals "SpanChild" @@ -238,7 +238,7 @@ Feature: Manual creation of spans And I wait for 1 span Then the trace "Content-Type" header equals "application/json" * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * every span field "name" equals "FirstClassYesScenario" @@ -254,7 +254,7 @@ Feature: Manual creation of spans And I wait for 1 span Then the trace "Content-Type" header equals "application/json" * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * every span field "name" equals "FirstClassNoScenario" @@ -292,7 +292,7 @@ Feature: Manual creation of spans * the trace payload field "resourceSpans.0.resource" string attribute "os.name" equals "iOS" * the trace payload field "resourceSpans.0.resource" string attribute "os.type" equals "darwin" * the trace payload field "resourceSpans.0.resource" string attribute "os.version" exists - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" equals "com.bugsnag.fixtures.cocoaperformance" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" * the trace payload field "resourceSpans.0.resource" string attribute "service.version" equals "10.0" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" From 649c7ef21290a51c386403c4c269b13677886df9 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 13:45:48 +0100 Subject: [PATCH 16/51] add new steps for e2e tests --- features/steps/app_steps.rb | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/features/steps/app_steps.rb b/features/steps/app_steps.rb index 373ed705..9a201ea1 100644 --- a/features/steps/app_steps.rb +++ b/features/steps/app_steps.rb @@ -304,20 +304,3 @@ def assert_received_exactly_spans(span_count, list) childSpans2.map { |span| Maze.check.true(parentSpan['spanId'] == span['parentSpanId']) } end - -And('the trace payload field {string} string attribute {string} matches the regex {string}') do |field, attribute, expected| - check_attribute_equal_regex field, attribute, 'stringValue', expected -end - -# def get_attribute_value(field, attribute, attr_type) -# list = Maze::Server.list_for 'trace' -# attributes = Maze::Helper.read_key_path list.current[:body], "#{field}.attributes" -# attribute = attributes.find { |a| a['key'] == attribute } -# value = attribute&.dig 'value', attr_type -# attr_type == 'intValue' && value.is_a?(String) ? value.to_i : value -# end - -def check_attribute_equal_regex(field, attribute, attr_type, expected) - actual = get_attribute_value field, attribute, attr_type - Maze.check.match(expected, actual) -end From 8b3247e4d1b04f4c03b9250582014b74b20e7bd8 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 14 Oct 2024 14:36:49 +0100 Subject: [PATCH 17/51] add new steps for e2e tests --- features/default/automatic_spans.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/default/automatic_spans.feature b/features/default/automatic_spans.feature index e4a1cda5..333680ba 100644 --- a/features/default/automatic_spans.feature +++ b/features/default/automatic_spans.feature @@ -84,7 +84,7 @@ Feature: Automatic instrumentation spans * a span field "name" equals "[ViewLoadPhase/View appearing]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * a span field "name" equals "[ViewLoadPhase/viewDidAppear]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * a span field "name" equals "[ViewLoadPhase/viewWillLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentGenecricViewLoadScenario_ViewController" * a span field "name" equals "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * every span field "spanId" matches the regex "^[A-Fa-f0-9]{16}$" * every span field "traceId" matches the regex "^[A-Fa-f0-9]{32}$" From 0370efe2f791e76d77660cfb526df6d7c3baf48a Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 15 Oct 2024 09:29:58 +0100 Subject: [PATCH 18/51] check we arenot mangling --- features/default/automatic_spans.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/default/automatic_spans.feature b/features/default/automatic_spans.feature index 333680ba..e4a1cda5 100644 --- a/features/default/automatic_spans.feature +++ b/features/default/automatic_spans.feature @@ -84,7 +84,7 @@ Feature: Automatic instrumentation spans * a span field "name" equals "[ViewLoadPhase/View appearing]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * a span field "name" equals "[ViewLoadPhase/viewDidAppear]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * a span field "name" equals "[ViewLoadPhase/viewWillLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentGenecricViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * a span field "name" equals "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" * every span field "spanId" matches the regex "^[A-Fa-f0-9]{16}$" * every span field "traceId" matches the regex "^[A-Fa-f0-9]{32}$" From fd51354a67652a4215feaf3df207dec2f0721996 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 15 Oct 2024 11:27:03 +0100 Subject: [PATCH 19/51] skip failing test for xcframework --- .buildkite/pipeline.yml | 4 ++++ features/default/automatic_spans.feature | 1 + 2 files changed, 5 insertions(+) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 389f3d0b..c342ac63 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -263,6 +263,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--tags ~@skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -296,6 +297,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--tags ~@skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -329,6 +331,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--tags ~@skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -362,6 +365,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--tags ~@skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" diff --git a/features/default/automatic_spans.feature b/features/default/automatic_spans.feature index e4a1cda5..eace4a3b 100644 --- a/features/default/automatic_spans.feature +++ b/features/default/automatic_spans.feature @@ -63,6 +63,7 @@ Feature: Automatic instrumentation spans * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" + @skip_xcframework Scenario: AutoInstrumentGenericViewLoadScenario Given I run "AutoInstrumentGenericViewLoadScenario" And I wait for 18 spans From d3db4a3137b40d60010bc502e628c2c43d8b2fb7 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 15 Oct 2024 11:32:16 +0100 Subject: [PATCH 20/51] skip failing test for xcframework --- .buildkite/pipeline.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index c342ac63..f1f2468b 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -263,7 +263,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags ~@skip_xcframework" + - "--tags not @skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -297,7 +297,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags ~@skip_xcframework" + - "--tags not @skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -331,7 +331,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags ~@skip_xcframework" + - "--tags not @skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -365,7 +365,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags ~@skip_xcframework" + - "--tags not @skip_xcframework" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" From a7d5fe38c21bf82fdcb66a5157572ae8fadc1422 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 15 Oct 2024 11:41:25 +0100 Subject: [PATCH 21/51] skip failing test for xcframework --- .buildkite/pipeline.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index f1f2468b..c1417870 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -263,7 +263,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags not @skip_xcframework" + - "--tags 'not @skip_xcframework'" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -297,7 +297,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags not @skip_xcframework" + - "--tags 'not @skip_xcframework'" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -331,7 +331,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags not @skip_xcframework" + - "--tags 'not @skip_xcframework'" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -365,7 +365,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags not @skip_xcframework" + - "--tags 'not @skip_xcframework'" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" From 137c159383f21ed9be526d7f11c8804d371a75c9 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 15 Oct 2024 11:48:32 +0100 Subject: [PATCH 22/51] skip failing test for xcframework --- .buildkite/pipeline.yml | 8 ++-- features/default/automatic_spans.feature | 38 ------------------- .../automatic_spans_generic_view_load.feature | 37 ++++++++++++++++++ 3 files changed, 41 insertions(+), 42 deletions(-) create mode 100644 features/default/automatic_spans_generic_view_load.feature diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index c1417870..beee4363 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -263,7 +263,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags 'not @skip_xcframework'" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -297,7 +297,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags 'not @skip_xcframework'" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -331,7 +331,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags 'not @skip_xcframework'" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -365,7 +365,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--tags 'not @skip_xcframework'" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" diff --git a/features/default/automatic_spans.feature b/features/default/automatic_spans.feature index eace4a3b..83e5f987 100644 --- a/features/default/automatic_spans.feature +++ b/features/default/automatic_spans.feature @@ -63,44 +63,6 @@ Feature: Automatic instrumentation spans * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" - @skip_xcframework - Scenario: AutoInstrumentGenericViewLoadScenario - Given I run "AutoInstrumentGenericViewLoadScenario" - And I wait for 18 spans - Then the trace "Content-Type" header equals "application/json" - * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" - * a span field "name" equals "[ViewLoad/UIKit]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/loadView]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/viewDidLoad]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/viewWillAppear]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/View appearing]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/viewDidAppear]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/viewWillLayoutSubviews]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.ViewController" - * a span field "name" equals "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.ViewController" - * a span field "name" equals "[ViewLoad/UIKit]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/loadView]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/viewDidLoad]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/viewWillAppear]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/View appearing]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/viewDidAppear]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/viewWillLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span field "name" equals "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * every span field "spanId" matches the regex "^[A-Fa-f0-9]{16}$" - * every span field "traceId" matches the regex "^[A-Fa-f0-9]{32}$" - * every span field "kind" equals 1 - * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" - * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" - * a span string attribute "bugsnag.span.category" equals "view_load" - * a span string attribute "bugsnag.view.name" equals "Fixture.ViewController" - * a span string attribute "bugsnag.view.name" equals "Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" - * a span bool attribute "bugsnag.span.first_class" is true - * a span string attribute "bugsnag.view.type" equals "UIKit" - * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" - * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" - * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" - Scenario: AutoInstrumentSubViewLoadScenario Given I run "AutoInstrumentSubViewLoadScenario" And I wait for 2 seconds diff --git a/features/default/automatic_spans_generic_view_load.feature b/features/default/automatic_spans_generic_view_load.feature new file mode 100644 index 00000000..baa61495 --- /dev/null +++ b/features/default/automatic_spans_generic_view_load.feature @@ -0,0 +1,37 @@ +Feature: Automatic instrumentation spans AutoInstrumentGenericViewLoadScenario + Scenario: AutoInstrumentGenericViewLoadScenario + Given I run "AutoInstrumentGenericViewLoadScenario" + And I wait for 18 spans + Then the trace "Content-Type" header equals "application/json" + * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" + * a span field "name" equals "[ViewLoad/UIKit]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/loadView]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/viewDidLoad]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/viewWillAppear]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/View appearing]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/viewDidAppear]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/viewWillLayoutSubviews]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.ViewController" + * a span field "name" equals "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.ViewController" + * a span field "name" equals "[ViewLoad/UIKit]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/loadView]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/viewDidLoad]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/viewWillAppear]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/View appearing]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/viewDidAppear]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/viewWillLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/Subview layout]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span field "name" equals "[ViewLoadPhase/viewDidLayoutSubviews]/Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * every span field "spanId" matches the regex "^[A-Fa-f0-9]{16}$" + * every span field "traceId" matches the regex "^[A-Fa-f0-9]{32}$" + * every span field "kind" equals 1 + * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" + * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" + * a span string attribute "bugsnag.span.category" equals "view_load" + * a span string attribute "bugsnag.view.name" equals "Fixture.ViewController" + * a span string attribute "bugsnag.view.name" equals "Fixture.AutoInstrumentGenericViewLoadScenario_ViewController" + * a span bool attribute "bugsnag.span.first_class" is true + * a span string attribute "bugsnag.view.type" equals "UIKit" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" + * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" + * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" From 6b9fb5be8af608ebd2d78d262a9d5523dc58769f Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 15 Oct 2024 12:42:07 +0100 Subject: [PATCH 23/51] add bk test suite --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 78baad55..edec94d4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -52,6 +52,8 @@ services: - ./features/:/app/features/ - ./maze_output:/app/maze_output - /var/run/docker.sock:/var/run/docker.sock + - ./reports/:/app/reports/ + maze-runner-bs: image: 855461928731.dkr.ecr.us-west-1.amazonaws.com/maze-runner-releases:latest-v9-cli environment: From f9fefcef0689e28459f24aa3c8e1ed4e44b1098d Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 15 Oct 2024 12:52:04 +0100 Subject: [PATCH 24/51] add bk test suite --- features/steps/app_steps.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/steps/app_steps.rb b/features/steps/app_steps.rb index 9a201ea1..f152ee9d 100644 --- a/features/steps/app_steps.rb +++ b/features/steps/app_steps.rb @@ -295,7 +295,7 @@ def assert_received_exactly_spans(span_count, list) end Then('the span named {string} is the parent of every span named {string}') do |span1name, span2name| - + spans = spans_from_request_list(Maze::Server.list_for("traces")) parentSpan = spans.find_all { |span| span['name'].eql?(span1name) }.first From 56c5cd6709c397e9126e497650e5cf74e9ee5b04 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:17:02 +0100 Subject: [PATCH 25/51] move xcframework fixture to single fixture --- .buildkite/pipeline.yml | 14 +- .../project.pbxproj | 762 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcschemes/FixtureXcFramework.xcscheme | 73 ++ features/fixtures/ios/build_xcframework.sh | 66 ++ 6 files changed, 923 insertions(+), 7 deletions(-) create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme create mode 100644 features/fixtures/ios/build_xcframework.sh diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index beee4363..524c183f 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -50,16 +50,16 @@ steps: key: ios_xcframework_fixture depends_on: xcframework commands: - - ./features/fixtures/iosXcFramework/build.sh + - ./features/fixtures/ios/build_xcframework.sh - bundle install - - bundle exec upload-app --farm=bb --app=./features/fixtures/iosXcFramework/output/Fixture.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt + - bundle exec upload-app --farm=bb --app=./features/fixtures/ios/output/FixtureXcFramework.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt plugins: - artifacts#v1.9.3: download: - "BugsnagPerformance.xcframework.zip" - "BugsnagPerformanceSwift.xcframework.zip" artifact_paths: - - features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt + - features/fixtures/ios/output/bb_xcframework_ipa_url.txt - label: "Fixture swizzling disabled" key: ios_fixture_swizzling_disabled @@ -247,7 +247,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" @@ -281,7 +281,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" @@ -315,7 +315,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" @@ -349,7 +349,7 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj new file mode 100644 index 00000000..95ab3a89 --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj @@ -0,0 +1,762 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */; }; + 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */ = {isa = PBXBuildFile; productRef = 01A414C72912CA18003152A4 /* Bugsnag */; }; + 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */; }; + 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */; }; + 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */; }; + 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */; }; + 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */; }; + 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */; }; + 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */; }; + 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */; }; + 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */; }; + 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */; }; + 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */; }; + 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC428E1AF9600D1F239 /* Scenario.swift */; }; + 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC628E1D5A400D1F239 /* Fixture.swift */; }; + 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */; }; + 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */; }; + 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */; }; + 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */; }; + 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */; }; + 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */; }; + 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3B2B0607F300F4F776 /* Logging.swift */; }; + 09637A3F2B06082200F4F776 /* Logging.m in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3E2B06082200F4F776 /* Logging.m */; }; + 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */; }; + 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */; }; + 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A442B0B883B00F4F776 /* FixtureConfig.swift */; }; + 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */; }; + 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */; }; + 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */; }; + 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */; }; + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */; }; + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */; }; + 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */; }; + 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */; }; + 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */; }; + 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */; }; + 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */; }; + 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */; }; + 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */; }; + 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */; }; + 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */; }; + 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */; }; + 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */; }; + 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 09F025062BA08804007D9F73 /* ObjCURLSession.m */; }; + 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */; }; + 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */; }; + 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; }; + 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; }; + 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */; }; + 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */; }; + 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */; }; + 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */; }; + 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */; }; + 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */; }; + 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */; }; + 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */; }; + 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */; }; + 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */; }; + 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */; }; + 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */; }; + 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */; }; + 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */; }; + 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */; }; + CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */; }; + CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */; }; + CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */; }; + CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */; }; + CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */; }; + CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */; }; + CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */; }; + CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */; }; + CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */ = {isa = PBXBuildFile; fileRef = CBC90C4229C466BD00280884 /* ForceUBSan.m */; }; + CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */; }; + CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */; }; + CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */; }; + CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */; }; + CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */; }; + CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */; }; + CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */; }; + CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */; }; + CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */; }; + CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF62108291A4F47004BEE0B /* RetryScenario.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 55155E072CBD1DB100B5B3FE /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */, + 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentViewLoadScenario.swift; sourceTree = ""; }; + 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SamplingProbabilityZeroScenario.swift; sourceTree = ""; }; + 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAppStartsScenario.swift; sourceTree = ""; }; + 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadScenario.swift; sourceTree = ""; }; + 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanBeforeStartScenario.swift; sourceTree = ""; }; + 01FE4DA528E1AEBD00D1F239 /* FixtureXcFramework.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FixtureXcFramework.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 01FE4DAF28E1AEBD00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 01FE4DB428E1AEBF00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 01FE4DB628E1AEBF00D1F239 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "bugsnag-cocoa-performance"; path = ../../..; sourceTree = ""; }; + 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanScenario.swift; sourceTree = ""; }; + 01FE4DC428E1AF9600D1F239 /* Scenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scenario.swift; sourceTree = ""; }; + 01FE4DC628E1D5A400D1F239 /* Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fixture.swift; sourceTree = ""; }; + 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartScenario.swift; sourceTree = ""; }; + 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartDisabledScenario.swift; sourceTree = ""; }; + 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkCallbackScenario.swift; sourceTree = ""; }; + 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplexViewScenario.swift; sourceTree = ""; }; + 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualParentSpanScenario.swift; sourceTree = ""; }; + 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesScenario.swift; sourceTree = ""; }; + 09637A3B2B0607F300F4F776 /* Logging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; + 09637A3D2B06082200F4F776 /* Logging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Logging.h; sourceTree = ""; }; + 09637A3E2B06082200F4F776 /* Logging.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Logging.m; sourceTree = ""; }; + 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandReaderThread.swift; sourceTree = ""; }; + 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MazeRunnerCommand.swift; sourceTree = ""; }; + 09637A442B0B883B00F4F776 /* FixtureConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixtureConfig.swift; sourceTree = ""; }; + 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIDeferredScenario.swift; sourceTree = ""; }; + 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNullNetworkCallbackScenario.swift; sourceTree = ""; }; + 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIScenario.swift; sourceTree = ""; }; + 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadPhaseScenario.swift; sourceTree = ""; }; + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckNoBugsnagScenario.swift; sourceTree = ""; }; + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckMinimalBugsnagScenario.swift; sourceTree = ""; }; + 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnEndCallbackScenario.swift; sourceTree = ""; }; + 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ErrorGenerator.h; sourceTree = ""; }; + 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ErrorGenerator.m; sourceTree = ""; }; + 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftErrorGenerator.swift; sourceTree = ""; }; + 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAVAssetScenario.swift; sourceTree = ""; }; + 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkTracePropagationScenario.swift; sourceTree = ""; }; + 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkTracePropagationScenario.swift; sourceTree = ""; }; + 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkCallbackScenario.swift; sourceTree = ""; }; + 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EarlySpanOnEndScenario.swift; sourceTree = ""; }; + 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesWithLimitsScenario.swift; sourceTree = ""; }; + 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributeCountLimitScenario.swift; sourceTree = ""; }; + 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModifyEarlySpansScenario.swift; sourceTree = ""; }; + 09F025052BA08804007D9F73 /* ObjCURLSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ObjCURLSession.h; sourceTree = ""; }; + 09F025062BA08804007D9F73 /* ObjCURLSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ObjCURLSession.m; sourceTree = ""; }; + 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNullURLScenario.swift; sourceTree = ""; }; + 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDidLoadDoesntTriggerScenario.swift; sourceTree = ""; }; + 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformance.xcframework; path = ../../../BugsnagPerformance.xcframework; sourceTree = ""; }; + 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformanceSwift.xcframework; path = ../../../BugsnagPerformanceSwift.xcframework; sourceTree = ""; }; + 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentGenericViewLoadScenario.swift; sourceTree = ""; }; + 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentPreLoadedViewLoadScenario.swift; sourceTree = ""; }; + 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentTabViewLoadScenario.swift; sourceTree = ""; }; + 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNavigationViewLoadScenario.swift; sourceTree = ""; }; + 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsFronzenFramesScenario.swift; sourceTree = ""; }; + 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSlowFramesScenario.swift; sourceTree = ""; }; + 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNoSlowFramesScenario.swift; sourceTree = ""; }; + 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseStageNotEnabledScenario.swift; sourceTree = ""; }; + 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsAutoInstrumentRenderingOffScenario.swift; sourceTree = ""; }; + 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSpanInstrumentRenderingOffScenario.swift; sourceTree = ""; }; + 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift; sourceTree = ""; }; + 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDataOverrideScenario.swift; sourceTree = ""; }; + 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityOneScenario.swift; sourceTree = ""; }; + 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityZeroScenario.swift; sourceTree = ""; }; + 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanCallbackSetToNilScenario.swift; sourceTree = ""; }; + CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingWithTimeoutScenario.swift; sourceTree = ""; }; + CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPScenario.swift; sourceTree = ""; }; + CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "BugsnagPerformanceConfiguration+Private.h"; path = "../../../../Sources/BugsnagPerformance/Private/BugsnagPerformanceConfiguration+Private.h"; sourceTree = ""; }; + CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentFileURLRequestScenario.swift; sourceTree = ""; }; + CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkBadAddressScenario.swift; sourceTree = ""; }; + CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkWithParentScenario.swift; sourceTree = ""; }; + CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundForegroundScenario.swift; sourceTree = ""; }; + CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualUIViewLoadScenario.swift; sourceTree = ""; }; + CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Fixture-Bridging-Header.h"; sourceTree = ""; }; + CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingScenario.swift; sourceTree = ""; }; + CBC90C4129C466BD00280884 /* ForceUBSan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForceUBSan.h; sourceTree = ""; }; + CBC90C4229C466BD00280884 /* ForceUBSan.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ForceUBSan.m; sourceTree = ""; }; + CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassNoScenario.swift; sourceTree = ""; }; + CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassYesScenario.swift; sourceTree = ""; }; + CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSubViewLoadScenario.swift; sourceTree = ""; }; + CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNoParentScenario.swift; sourceTree = ""; }; + CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProbabilityExpiryScenario.swift; sourceTree = ""; }; + CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParentSpanScenario.swift; sourceTree = ""; }; + CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanScenario.swift; sourceTree = ""; }; + CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkMultiple.swift; sourceTree = ""; }; + CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaxPayloadSizeScenario.swift; sourceTree = ""; }; + CBF62108291A4F47004BEE0B /* RetryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryScenario.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 01FE4DA228E1AEBD00D1F239 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */, + 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */, + 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 01FE4D9C28E1AEBD00D1F239 = { + isa = PBXGroup; + children = ( + 09637A3A2B0607DA00F4F776 /* utils */, + 01FE4DA728E1AEBD00D1F239 /* Fixture */, + 01FE4DC128E1AF0700D1F239 /* Scenarios */, + 01FE4DBC28E1AED000D1F239 /* Packages */, + 01FE4DA628E1AEBD00D1F239 /* Products */, + 01FE4DBE28E1AEDF00D1F239 /* Frameworks */, + ); + sourceTree = ""; + }; + 01FE4DA628E1AEBD00D1F239 /* Products */ = { + isa = PBXGroup; + children = ( + 01FE4DA528E1AEBD00D1F239 /* FixtureXcFramework.app */, + ); + name = Products; + sourceTree = ""; + }; + 01FE4DA728E1AEBD00D1F239 /* Fixture */ = { + isa = PBXGroup; + children = ( + 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */, + 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */, + CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */, + 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */, + CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */, + 01FE4DC628E1D5A400D1F239 /* Fixture.swift */, + 01FE4DB628E1AEBF00D1F239 /* Info.plist */, + 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */, + 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */, + 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */, + 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */, + 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */, + 09637A442B0B883B00F4F776 /* FixtureConfig.swift */, + 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */, + 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */, + 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */, + ); + path = Fixture; + sourceTree = ""; + }; + 01FE4DBC28E1AED000D1F239 /* Packages */ = { + isa = PBXGroup; + children = ( + 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */, + ); + name = Packages; + sourceTree = ""; + }; + 01FE4DBE28E1AEDF00D1F239 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */, + 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 01FE4DC128E1AF0700D1F239 /* Scenarios */ = { + isa = PBXGroup; + children = ( + 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */, + 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */, + 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */, + CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */, + 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */, + 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */, + CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */, + 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */, + CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */, + CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */, + 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */, + 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */, + 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */, + 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */, + CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */, + 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */, + 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */, + CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */, + 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */, + 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */, + 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */, + 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */, + CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */, + CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */, + CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */, + 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */, + 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */, + CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */, + CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */, + 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */, + 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */, + CBC90C4129C466BD00280884 /* ForceUBSan.h */, + CBC90C4229C466BD00280884 /* ForceUBSan.m */, + 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */, + 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */, + 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */, + 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */, + 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */, + 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */, + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */, + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */, + CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */, + 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */, + 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */, + CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */, + 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */, + 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */, + 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */, + 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */, + CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */, + 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */, + 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */, + CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */, + 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */, + 09F025052BA08804007D9F73 /* ObjCURLSession.h */, + 09F025062BA08804007D9F73 /* ObjCURLSession.m */, + 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */, + CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */, + CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */, + 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */, + CBF62108291A4F47004BEE0B /* RetryScenario.swift */, + 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */, + 01FE4DC428E1AF9600D1F239 /* Scenario.swift */, + 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */, + 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */, + 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */, + 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */, + ); + path = Scenarios; + sourceTree = ""; + }; + 09637A3A2B0607DA00F4F776 /* utils */ = { + isa = PBXGroup; + children = ( + 09637A3B2B0607F300F4F776 /* Logging.swift */, + 09637A3D2B06082200F4F776 /* Logging.h */, + 09637A3E2B06082200F4F776 /* Logging.m */, + ); + path = utils; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 01FE4DA428E1AEBD00D1F239 /* FixtureXcFramework */ = { + isa = PBXNativeTarget; + buildConfigurationList = 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "FixtureXcFramework" */; + buildPhases = ( + 01FE4DA128E1AEBD00D1F239 /* Sources */, + 01FE4DA228E1AEBD00D1F239 /* Frameworks */, + 01FE4DA328E1AEBD00D1F239 /* Resources */, + 55155E072CBD1DB100B5B3FE /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = FixtureXcFramework; + packageProductDependencies = ( + 01A414C72912CA18003152A4 /* Bugsnag */, + ); + productName = Fixture; + productReference = 01FE4DA528E1AEBD00D1F239 /* FixtureXcFramework.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 01FE4D9D28E1AEBD00D1F239 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 1400; + TargetAttributes = { + 01FE4DA428E1AEBD00D1F239 = { + CreatedOnToolsVersion = 14.0; + LastSwiftMigration = 1400; + }; + }; + }; + buildConfigurationList = 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "FixtureXcFramework" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 01FE4D9C28E1AEBD00D1F239; + packageReferences = ( + 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */, + ); + productRefGroup = 01FE4DA628E1AEBD00D1F239 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 01FE4DA428E1AEBD00D1F239 /* FixtureXcFramework */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 01FE4DA328E1AEBD00D1F239 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */, + 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */, + 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 01FE4DA128E1AEBD00D1F239 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */, + CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */, + 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */, + 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */, + 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */, + 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */, + 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */, + 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */, + 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */, + 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */, + 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */, + 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */, + 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */, + CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */, + 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */, + 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */, + 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */, + CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */, + 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */, + 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */, + 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */, + 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */, + 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */, + 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */, + 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */, + 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */, + CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */, + 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */, + 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */, + 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */, + 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */, + 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */, + 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */, + 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */, + CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */, + CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */, + 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */, + 09637A3F2B06082200F4F776 /* Logging.m in Sources */, + CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */, + 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */, + CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */, + 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */, + 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */, + 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */, + 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */, + 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */, + 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */, + CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */, + 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */, + 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */, + CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */, + CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */, + 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */, + CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */, + 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */, + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */, + CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */, + 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */, + 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */, + 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */, + 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */, + 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */, + 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */, + CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */, + 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */, + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */, + CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */, + CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */, + 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */, + 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */, + CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */, + 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */, + 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */, + 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */, + 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */, + CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 01FE4DAF28E1AEBD00D1F239 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 01FE4DB428E1AEBF00D1F239 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 01FE4DB728E1AEBF00D1F239 /* 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++20"; + 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 = ( + "DEBUG=1", + "$(inherited)", + ); + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 01FE4DB828E1AEBF00D1F239 /* 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++20"; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 01FE4DBA28E1AEBF00D1F239 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Fixture/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 01FE4DBB28E1AEBF00D1F239 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Fixture/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "FixtureXcFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 01FE4DB728E1AEBF00D1F239 /* Debug */, + 01FE4DB828E1AEBF00D1F239 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "FixtureXcFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 01FE4DBA28E1AEBF00D1F239 /* Debug */, + 01FE4DBB28E1AEBF00D1F239 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/bugsnag/bugsnag-cocoa"; + requirement = { + branch = master; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 01A414C72912CA18003152A4 /* Bugsnag */ = { + isa = XCSwiftPackageProductDependency; + package = 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */; + productName = Bugsnag; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 01FE4D9D28E1AEBD00D1F239 /* Project object */; +} diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme b/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme new file mode 100644 index 00000000..00ceee46 --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/features/fixtures/ios/build_xcframework.sh b/features/fixtures/ios/build_xcframework.sh new file mode 100644 index 00000000..4bc10bd2 --- /dev/null +++ b/features/fixtures/ios/build_xcframework.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +xcodebuild -version | awk 'NR==1{x=$0}END{print x" "$NF}' +echo "$(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -m)" + +set -euxo pipefail + +disable_swizzling_key='' +disable_swizzling_value='' +swizzling_premain_key='' +swizzling_premain_value='' + +fixture_name='Fixture' +for ((i=1;i<=$#;i++)); +do + if [ ${!i} = '--fixtureName' ] + then ((i++)) + fixture_name=${!i}; + fi + if [ ${!i} = '--disableSwizzling' ] + then + disable_swizzling_key='disableSwizzling' + disable_swizzling_value='\t\t\t\t\t\t\t\t\t\t'; + fi + if [ ${!i} = '--swizzlingPremain' ] + then + swizzling_premain_key='swizzleViewLoadPreMain' + swizzling_premain_value='\t\t\t\t\t\t\t\t\t' + fi +done; + +cp $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.template.plist $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist + +sed -i '' -e 's|DISABLE_SWIZZLING_KEY|'$disable_swizzling_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|DISABLE_SWIZZLING_VALUE|'$disable_swizzling_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|SWIZZLING_PREMAIN_KEY|'$swizzling_premain_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist + +cd $(dirname "${BASH_SOURCE[0]}") + +echo "--- FixtureXcFramework: xcodebuild archive" + +# +# Using CLANG_ENABLE_MODULES=NO to surface build errors +# https://github.com/bugsnag/bugsnag-cocoa/pull/1284 +# + +xcrun xcodebuild \ + -scheme FixtureXcFramework \ + -project FixtureXcFramework.xcodeproj \ + -destination generic/platform=iOS \ + -configuration Release \ + -archivePath archive/FixtureXcFramework.xcarchive \ + -allowProvisioningUpdates \ + -quiet \ + archive + +echo "--- FixtureXcFramework: xcodebuild -exportArchive" + +xcrun xcodebuild \ + -exportArchive \ + -archivePath archive/FixtureXcFramework.xcarchive \ + -destination generic/platform=iOS \ + -exportPath output/ \ + -quiet \ + -exportOptionsPlist exportOptions.plist From 40713cdb2933df1c9c1c6b1e597de2d092189818 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:17:33 +0100 Subject: [PATCH 26/51] update references --- features/fixtures/ios/Fixture/ErrorGenerator.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/fixtures/ios/Fixture/ErrorGenerator.m b/features/fixtures/ios/Fixture/ErrorGenerator.m index 5ca45242..6176e57a 100644 --- a/features/fixtures/ios/Fixture/ErrorGenerator.m +++ b/features/fixtures/ios/Fixture/ErrorGenerator.m @@ -6,7 +6,7 @@ // #import "ErrorGenerator.h" -#import "Fixture-Swift.h" +#import "FixtureXcFramework-Swift.h" @interface ErrorGenerator () From f567bc43a0d58fd43647dfef6eee29746b5b4115 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:20:30 +0100 Subject: [PATCH 27/51] update build scripts --- features/fixtures/ios/build.sh | 22 +++++++++++++++++++--- features/fixtures/ios/build_xcframework.sh | 4 +++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/features/fixtures/ios/build.sh b/features/fixtures/ios/build.sh index a58b2177..cf050382 100755 --- a/features/fixtures/ios/build.sh +++ b/features/fixtures/ios/build.sh @@ -38,9 +38,25 @@ sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname " cd $(dirname "${BASH_SOURCE[0]}") -xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -scheme Fixture archive -allowProvisioningUpdates -quiet - -xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -exportArchive -exportPath output -exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates -quiet +xcrun xcodebuild \ + -scheme Fixture \ + -project Fixture.xcodeproj \ + -destination generic/platform=iOS \ + -configuration Release \ + -archivePath archive/FixtureXcFramework.xcarchive \ + -allowProvisioningUpdates \ + -quiet \ + archive + +echo "--- FixtureXcFramework: xcodebuild -exportArchive" + +xcrun xcodebuild \ + -exportArchive \ + -archivePath archive/FixtureF.xcarchive \ + -destination generic/platform=iOS \ + -exportPath output/ \ + -quiet \ + -exportOptionsPlist exportOptions.plist mv ./output/Fixture.ipa ./output/$fixture_name.ipa diff --git a/features/fixtures/ios/build_xcframework.sh b/features/fixtures/ios/build_xcframework.sh index 4bc10bd2..5554cda4 100644 --- a/features/fixtures/ios/build_xcframework.sh +++ b/features/fixtures/ios/build_xcframework.sh @@ -10,7 +10,7 @@ disable_swizzling_value='' swizzling_premain_key='' swizzling_premain_value='' -fixture_name='Fixture' +fixture_name='FixtureXcFramework' for ((i=1;i<=$#;i++)); do if [ ${!i} = '--fixtureName' ] @@ -64,3 +64,5 @@ xcrun xcodebuild \ -exportPath output/ \ -quiet \ -exportOptionsPlist exportOptions.plist + +mv ./output/FixtureXcFramework.ipa ./output/$fixture_name.ipa From cd07f2c91d6e1e667e8ea97d83ea16c7041b8eae Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:20:58 +0100 Subject: [PATCH 28/51] update build scripts --- features/fixtures/ios/build.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/features/fixtures/ios/build.sh b/features/fixtures/ios/build.sh index cf050382..50de4538 100755 --- a/features/fixtures/ios/build.sh +++ b/features/fixtures/ios/build.sh @@ -38,6 +38,8 @@ sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname " cd $(dirname "${BASH_SOURCE[0]}") +echo "--- Fixture: xcodebuild archive" + xcrun xcodebuild \ -scheme Fixture \ -project Fixture.xcodeproj \ @@ -48,7 +50,7 @@ xcrun xcodebuild \ -quiet \ archive -echo "--- FixtureXcFramework: xcodebuild -exportArchive" +echo "--- Fixture: xcodebuild -exportArchive" xcrun xcodebuild \ -exportArchive \ From e178e1568586be4069ff6c65e0edb464670940ad Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:31:20 +0100 Subject: [PATCH 29/51] set references during build --- features/fixtures/ios/Fixture/ErrorGenerator.m | 2 +- features/fixtures/ios/build.sh | 2 ++ features/fixtures/ios/build_xcframework.sh | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) mode change 100644 => 100755 features/fixtures/ios/build_xcframework.sh diff --git a/features/fixtures/ios/Fixture/ErrorGenerator.m b/features/fixtures/ios/Fixture/ErrorGenerator.m index 6176e57a..b3a4d9a6 100644 --- a/features/fixtures/ios/Fixture/ErrorGenerator.m +++ b/features/fixtures/ios/Fixture/ErrorGenerator.m @@ -6,7 +6,7 @@ // #import "ErrorGenerator.h" -#import "FixtureXcFramework-Swift.h" +#import "FIXTURENAME-Swift.h" @interface ErrorGenerator () diff --git a/features/fixtures/ios/build.sh b/features/fixtures/ios/build.sh index 50de4538..4ad65226 100755 --- a/features/fixtures/ios/build.sh +++ b/features/fixtures/ios/build.sh @@ -36,6 +36,8 @@ sed -i '' -e 's|DISABLE_SWIZZLING_VALUE|'$disable_swizzling_value'|' $(dirname " sed -i '' -e 's|SWIZZLING_PREMAIN_KEY|'$swizzling_premain_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|FIXTURENAME-Swift.h|Fixture-Swift.h|' $(dirname "${BASH_SOURCE[0]}")/Fixture/ErrorGenerator.m + cd $(dirname "${BASH_SOURCE[0]}") echo "--- Fixture: xcodebuild archive" diff --git a/features/fixtures/ios/build_xcframework.sh b/features/fixtures/ios/build_xcframework.sh old mode 100644 new mode 100755 index 5554cda4..45ac06db --- a/features/fixtures/ios/build_xcframework.sh +++ b/features/fixtures/ios/build_xcframework.sh @@ -36,6 +36,9 @@ sed -i '' -e 's|DISABLE_SWIZZLING_VALUE|'$disable_swizzling_value'|' $(dirname " sed -i '' -e 's|SWIZZLING_PREMAIN_KEY|'$swizzling_premain_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist +sed -i '' -e 's|FIXTURENAME-Swift.h|FixtureXcFramework-Swift.h|' $(dirname "${BASH_SOURCE[0]}")/Fixture/ErrorGenerator.m + + cd $(dirname "${BASH_SOURCE[0]}") echo "--- FixtureXcFramework: xcodebuild archive" From ea64904bf9694d24c1eb600433dd9032a8fe8b12 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:37:12 +0100 Subject: [PATCH 30/51] update build scripts --- features/fixtures/ios/build.sh | 2 +- features/fixtures/ios/build_xcframework.sh | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/features/fixtures/ios/build.sh b/features/fixtures/ios/build.sh index 4ad65226..0dcd741a 100755 --- a/features/fixtures/ios/build.sh +++ b/features/fixtures/ios/build.sh @@ -56,7 +56,7 @@ echo "--- Fixture: xcodebuild -exportArchive" xcrun xcodebuild \ -exportArchive \ - -archivePath archive/FixtureF.xcarchive \ + -archivePath archive/Fixture.xcarchive \ -destination generic/platform=iOS \ -exportPath output/ \ -quiet \ diff --git a/features/fixtures/ios/build_xcframework.sh b/features/fixtures/ios/build_xcframework.sh index 45ac06db..f18402ce 100755 --- a/features/fixtures/ios/build_xcframework.sh +++ b/features/fixtures/ios/build_xcframework.sh @@ -29,6 +29,9 @@ do fi done; +unzip -q BugsnagPerformance.xcframework.zip +unzip -q BugsnagPerformanceSwift.xcframework.zip + cp $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.template.plist $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist sed -i '' -e 's|DISABLE_SWIZZLING_KEY|'$disable_swizzling_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist From acd87b3f90ff1f1d46a108622e2e0347fe3c0c38 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:41:59 +0100 Subject: [PATCH 31/51] update fixture build script naming --- features/fixtures/ios/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/fixtures/ios/build.sh b/features/fixtures/ios/build.sh index 0dcd741a..6ce46812 100755 --- a/features/fixtures/ios/build.sh +++ b/features/fixtures/ios/build.sh @@ -47,7 +47,7 @@ xcrun xcodebuild \ -project Fixture.xcodeproj \ -destination generic/platform=iOS \ -configuration Release \ - -archivePath archive/FixtureXcFramework.xcarchive \ + -archivePath archive/Fixture.xcarchive \ -allowProvisioningUpdates \ -quiet \ archive From c08c4d2765c5d25f85f797edea2f4ff8e7b6debd Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:46:13 +0100 Subject: [PATCH 32/51] remove all references to old fixture --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 524c183f..a1a8add6 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -52,7 +52,7 @@ steps: commands: - ./features/fixtures/ios/build_xcframework.sh - bundle install - - bundle exec upload-app --farm=bb --app=./features/fixtures/ios/output/FixtureXcFramework.ipa --app-id-file=./features/fixtures/iosXcFramework/output/bb_xcframework_ipa_url.txt + - bundle exec upload-app --farm=bb --app=./features/fixtures/ios/output/FixtureXcFramework.ipa --app-id-file=./features/fixtures/ios/output/bb_xcframework_ipa_url.txt plugins: - artifacts#v1.9.3: download: From 475a5a644743abd9ca2af4004aa9da027fc3a1cd Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:47:06 +0100 Subject: [PATCH 33/51] remove old fixture --- features/fixtures/iosXcFramework/.gitignore | 2 - .../iosXcFramework/ExportOptions.plist | 18 - .../Fixture.xcodeproj/project.pbxproj | 762 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/xcschemes/Fixture.xcscheme | 93 --- .../iosXcFramework/Fixture/AppDelegate.swift | 37 - .../AccentColor.colorset/Contents.json | 11 - .../AppIcon.appiconset/Contents.json | 13 - .../Fixture/Assets.xcassets/Contents.json | 6 - .../Base.lproj/LaunchScreen.storyboard | 25 - .../Fixture/Base.lproj/Main.storyboard | 33 - .../Fixture/CommandReaderThread.swift | 126 --- .../iosXcFramework/Fixture/ErrorGenerator.h | 19 - .../iosXcFramework/Fixture/ErrorGenerator.m | 36 - .../Fixture/Fixture-Bridging-Header.h | 10 - .../iosXcFramework/Fixture/Fixture.swift | 203 ----- .../Fixture/FixtureConfig.swift | 51 -- .../iosXcFramework/Fixture/Info.plist | 61 -- .../Fixture/Info.template.plist | 61 -- .../Fixture/MazeRunnerCommand.swift | 29 - .../Fixture/SceneDelegate.swift | 53 -- .../Fixture/SwiftErrorGenerator.swift | 21 - .../Fixture/ViewController.swift | 18 - .../Scenarios/AppDataOverrideScenario.swift | 24 - .../AutoInstrumentAVAssetScenario.swift | 42 - .../AutoInstrumentAppStartsScenario.swift | 20 - ...AutoInstrumentFileURLRequestScenario.swift | 24 - ...utoInstrumentGenericViewLoadScenario.swift | 49 -- ...InstrumentNavigationViewLoadScenario.swift | 47 -- ...oInstrumentNetworkBadAddressScenario.swift | 28 - ...utoInstrumentNetworkCallbackScenario.swift | 50 -- .../AutoInstrumentNetworkMultiple.swift | 40 - ...utoInstrumentNetworkNoParentScenario.swift | 30 - ...AutoInstrumentNetworkNullURLScenario.swift | 32 - ...umentNetworkPreStartDisabledScenario.swift | 34 - ...utoInstrumentNetworkPreStartScenario.swift | 34 - ...umentNetworkTracePropagationScenario.swift | 44 - ...oInstrumentNetworkWithParentScenario.swift | 30 - ...nstrumentNullNetworkCallbackScenario.swift | 31 - ...oInstrumentPreLoadedViewLoadScenario.swift | 42 - .../AutoInstrumentSubViewLoadScenario.swift | 65 -- ...utoInstrumentSwiftUIDeferredScenario.swift | 72 -- .../AutoInstrumentSwiftUIScenario.swift | 59 -- .../AutoInstrumentTabViewLoadScenario.swift | 47 -- .../AutoInstrumentViewLoadScenario.swift | 37 - .../BackgroundForegroundScenario.swift | 25 - .../Scenarios/BatchingScenario.swift | 22 - .../BatchingWithTimeoutScenario.swift | 22 - .../Scenarios/ComplexViewScenario.swift | 285 ------- .../Scenarios/EarlySpanOnEndScenario.swift | 34 - .../Scenarios/FirstClassNoScenario.swift | 17 - .../Scenarios/FirstClassYesScenario.swift | 17 - .../FixedSamplingProbabilityOneScenario.swift | 25 - ...FixedSamplingProbabilityZeroScenario.swift | 21 - .../iosXcFramework/Scenarios/ForceUBSan.h | 20 - .../iosXcFramework/Scenarios/ForceUBSan.m | 12 - ...csAutoInstrumentRenderingOffScenario.swift | 35 - .../FrameMetricsFronzenFramesScenario.swift | 38 - .../FrameMetricsNoSlowFramesScenario.swift | 26 - ...assSpanInstrumentRenderingOnScenario.swift | 38 - .../FrameMetricsSlowFramesScenario.swift | 35 - ...csSpanInstrumentRenderingOffScenario.swift | 37 - .../InfraCheckMinimalBugsnagScenario.swift | 20 - .../InfraCheckNoBugsnagScenario.swift | 26 - .../Scenarios/InitialPScenario.swift | 27 - .../ManualNetworkCallbackScenario.swift | 63 -- ...lNetworkSpanCallbackSetToNilScenario.swift | 44 - .../Scenarios/ManualNetworkSpanScenario.swift | 39 - ...anualNetworkTracePropagationScenario.swift | 58 -- .../Scenarios/ManualParentSpanScenario.swift | 26 - .../ManualSpanBeforeStartScenario.swift | 22 - .../Scenarios/ManualSpanScenario.swift | 31 - .../Scenarios/ManualUIViewLoadScenario.swift | 19 - .../ManualViewLoadPhaseScenario.swift | 19 - .../Scenarios/ManualViewLoadScenario.swift | 18 - .../Scenarios/MaxPayloadSizeScenario.swift | 23 - .../Scenarios/ModifyEarlySpansScenario.swift | 32 - .../iosXcFramework/Scenarios/ObjCURLSession.h | 15 - .../iosXcFramework/Scenarios/ObjCURLSession.m | 16 - .../Scenarios/OnEndCallbackScenario.swift | 46 -- .../Scenarios/ParentSpanScenario.swift | 24 - .../Scenarios/ProbabilityExpiryScenario.swift | 28 - .../ReleaseStageNotEnabledScenario.swift | 23 - .../Scenarios/RetryScenario.swift | 20 - .../SamplingProbabilityZeroScenario.swift | 28 - .../iosXcFramework/Scenarios/Scenario.swift | 175 ---- .../SetAttributeCountLimitScenario.swift | 23 - .../Scenarios/SetAttributesScenario.swift | 25 - .../SetAttributesWithLimitsScenario.swift | 25 - .../ViewDidLoadDoesntTriggerScenario.swift | 39 - features/fixtures/iosXcFramework/build.sh | 50 -- .../fixtures/iosXcFramework/utils/Logging.h | 25 - .../fixtures/iosXcFramework/utils/Logging.m | 51 -- .../iosXcFramework/utils/Logging.swift | 45 -- 95 files changed, 4418 deletions(-) delete mode 100644 features/fixtures/iosXcFramework/.gitignore delete mode 100644 features/fixtures/iosXcFramework/ExportOptions.plist delete mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj delete mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme delete mode 100644 features/fixtures/iosXcFramework/Fixture/AppDelegate.swift delete mode 100644 features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json delete mode 100644 features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json delete mode 100644 features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard delete mode 100644 features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard delete mode 100644 features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift delete mode 100644 features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h delete mode 100644 features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m delete mode 100644 features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h delete mode 100644 features/fixtures/iosXcFramework/Fixture/Fixture.swift delete mode 100644 features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift delete mode 100644 features/fixtures/iosXcFramework/Fixture/Info.plist delete mode 100644 features/fixtures/iosXcFramework/Fixture/Info.template.plist delete mode 100644 features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift delete mode 100644 features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift delete mode 100644 features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift delete mode 100644 features/fixtures/iosXcFramework/Fixture/ViewController.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m delete mode 100644 features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/Scenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift delete mode 100644 features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift delete mode 100755 features/fixtures/iosXcFramework/build.sh delete mode 100644 features/fixtures/iosXcFramework/utils/Logging.h delete mode 100644 features/fixtures/iosXcFramework/utils/Logging.m delete mode 100644 features/fixtures/iosXcFramework/utils/Logging.swift diff --git a/features/fixtures/iosXcFramework/.gitignore b/features/fixtures/iosXcFramework/.gitignore deleted file mode 100644 index 7e48d904..00000000 --- a/features/fixtures/iosXcFramework/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -Fixture.xcarchive -output diff --git a/features/fixtures/iosXcFramework/ExportOptions.plist b/features/fixtures/iosXcFramework/ExportOptions.plist deleted file mode 100644 index c8002a2b..00000000 --- a/features/fixtures/iosXcFramework/ExportOptions.plist +++ /dev/null @@ -1,18 +0,0 @@ - - - - - compileBitcode - - method - development - signingStyle - automatic - stripSwiftSymbols - - teamID - 7W9PZ27Y5F - thinning - <none> - - diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj deleted file mode 100644 index 99c0ec4c..00000000 --- a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.pbxproj +++ /dev/null @@ -1,762 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 55; - objects = { - -/* Begin PBXBuildFile section */ - 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */; }; - 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */ = {isa = PBXBuildFile; productRef = 01A414C72912CA18003152A4 /* Bugsnag */; }; - 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */; }; - 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */; }; - 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */; }; - 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */; }; - 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */; }; - 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */; }; - 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */; }; - 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */; }; - 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */; }; - 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */; }; - 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */; }; - 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC428E1AF9600D1F239 /* Scenario.swift */; }; - 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC628E1D5A400D1F239 /* Fixture.swift */; }; - 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */; }; - 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */; }; - 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */; }; - 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */; }; - 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */; }; - 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */; }; - 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3B2B0607F300F4F776 /* Logging.swift */; }; - 09637A3F2B06082200F4F776 /* Logging.m in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3E2B06082200F4F776 /* Logging.m */; }; - 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */; }; - 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */; }; - 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A442B0B883B00F4F776 /* FixtureConfig.swift */; }; - 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */; }; - 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */; }; - 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */; }; - 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */; }; - 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */; }; - 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */; }; - 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */; }; - 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */; }; - 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */; }; - 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */; }; - 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */; }; - 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */; }; - 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */; }; - 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */; }; - 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */; }; - 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */; }; - 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */; }; - 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 09F025062BA08804007D9F73 /* ObjCURLSession.m */; }; - 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */; }; - 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */; }; - 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; }; - 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; }; - 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */; }; - 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */; }; - 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */; }; - 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */; }; - 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */; }; - 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */; }; - 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */; }; - 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */; }; - 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */; }; - 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */; }; - 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */; }; - 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */; }; - 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */; }; - 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */; }; - 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */; }; - CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */; }; - CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */; }; - CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */; }; - CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */; }; - CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */; }; - CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */; }; - CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */; }; - CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */; }; - CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */ = {isa = PBXBuildFile; fileRef = CBC90C4229C466BD00280884 /* ForceUBSan.m */; }; - CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */; }; - CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */; }; - CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */; }; - CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */; }; - CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */; }; - CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */; }; - CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */; }; - CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */; }; - CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */; }; - CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF62108291A4F47004BEE0B /* RetryScenario.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 55155E072CBD1DB100B5B3FE /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */, - 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentViewLoadScenario.swift; sourceTree = ""; }; - 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SamplingProbabilityZeroScenario.swift; sourceTree = ""; }; - 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAppStartsScenario.swift; sourceTree = ""; }; - 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadScenario.swift; sourceTree = ""; }; - 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanBeforeStartScenario.swift; sourceTree = ""; }; - 01FE4DA528E1AEBD00D1F239 /* Fixture.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Fixture.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 01FE4DAF28E1AEBD00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 01FE4DB428E1AEBF00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 01FE4DB628E1AEBF00D1F239 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "bugsnag-cocoa-performance"; path = ../../..; sourceTree = ""; }; - 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanScenario.swift; sourceTree = ""; }; - 01FE4DC428E1AF9600D1F239 /* Scenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scenario.swift; sourceTree = ""; }; - 01FE4DC628E1D5A400D1F239 /* Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fixture.swift; sourceTree = ""; }; - 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartScenario.swift; sourceTree = ""; }; - 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartDisabledScenario.swift; sourceTree = ""; }; - 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkCallbackScenario.swift; sourceTree = ""; }; - 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplexViewScenario.swift; sourceTree = ""; }; - 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualParentSpanScenario.swift; sourceTree = ""; }; - 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesScenario.swift; sourceTree = ""; }; - 09637A3B2B0607F300F4F776 /* Logging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; - 09637A3D2B06082200F4F776 /* Logging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Logging.h; sourceTree = ""; }; - 09637A3E2B06082200F4F776 /* Logging.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Logging.m; sourceTree = ""; }; - 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandReaderThread.swift; sourceTree = ""; }; - 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MazeRunnerCommand.swift; sourceTree = ""; }; - 09637A442B0B883B00F4F776 /* FixtureConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixtureConfig.swift; sourceTree = ""; }; - 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIDeferredScenario.swift; sourceTree = ""; }; - 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNullNetworkCallbackScenario.swift; sourceTree = ""; }; - 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIScenario.swift; sourceTree = ""; }; - 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadPhaseScenario.swift; sourceTree = ""; }; - 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckNoBugsnagScenario.swift; sourceTree = ""; }; - 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckMinimalBugsnagScenario.swift; sourceTree = ""; }; - 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnEndCallbackScenario.swift; sourceTree = ""; }; - 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ErrorGenerator.h; sourceTree = ""; }; - 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ErrorGenerator.m; sourceTree = ""; }; - 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftErrorGenerator.swift; sourceTree = ""; }; - 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAVAssetScenario.swift; sourceTree = ""; }; - 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkTracePropagationScenario.swift; sourceTree = ""; }; - 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkTracePropagationScenario.swift; sourceTree = ""; }; - 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkCallbackScenario.swift; sourceTree = ""; }; - 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EarlySpanOnEndScenario.swift; sourceTree = ""; }; - 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesWithLimitsScenario.swift; sourceTree = ""; }; - 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributeCountLimitScenario.swift; sourceTree = ""; }; - 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModifyEarlySpansScenario.swift; sourceTree = ""; }; - 09F025052BA08804007D9F73 /* ObjCURLSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ObjCURLSession.h; sourceTree = ""; }; - 09F025062BA08804007D9F73 /* ObjCURLSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ObjCURLSession.m; sourceTree = ""; }; - 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNullURLScenario.swift; sourceTree = ""; }; - 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDidLoadDoesntTriggerScenario.swift; sourceTree = ""; }; - 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformance.xcframework; path = ../../../BugsnagPerformance.xcframework; sourceTree = ""; }; - 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformanceSwift.xcframework; path = ../../../BugsnagPerformanceSwift.xcframework; sourceTree = ""; }; - 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentGenericViewLoadScenario.swift; sourceTree = ""; }; - 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentPreLoadedViewLoadScenario.swift; sourceTree = ""; }; - 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentTabViewLoadScenario.swift; sourceTree = ""; }; - 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNavigationViewLoadScenario.swift; sourceTree = ""; }; - 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsFronzenFramesScenario.swift; sourceTree = ""; }; - 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSlowFramesScenario.swift; sourceTree = ""; }; - 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNoSlowFramesScenario.swift; sourceTree = ""; }; - 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseStageNotEnabledScenario.swift; sourceTree = ""; }; - 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsAutoInstrumentRenderingOffScenario.swift; sourceTree = ""; }; - 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSpanInstrumentRenderingOffScenario.swift; sourceTree = ""; }; - 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift; sourceTree = ""; }; - 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDataOverrideScenario.swift; sourceTree = ""; }; - 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityOneScenario.swift; sourceTree = ""; }; - 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityZeroScenario.swift; sourceTree = ""; }; - 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanCallbackSetToNilScenario.swift; sourceTree = ""; }; - CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingWithTimeoutScenario.swift; sourceTree = ""; }; - CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPScenario.swift; sourceTree = ""; }; - CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "BugsnagPerformanceConfiguration+Private.h"; path = "../../../../Sources/BugsnagPerformance/Private/BugsnagPerformanceConfiguration+Private.h"; sourceTree = ""; }; - CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentFileURLRequestScenario.swift; sourceTree = ""; }; - CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkBadAddressScenario.swift; sourceTree = ""; }; - CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkWithParentScenario.swift; sourceTree = ""; }; - CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundForegroundScenario.swift; sourceTree = ""; }; - CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualUIViewLoadScenario.swift; sourceTree = ""; }; - CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Fixture-Bridging-Header.h"; sourceTree = ""; }; - CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingScenario.swift; sourceTree = ""; }; - CBC90C4129C466BD00280884 /* ForceUBSan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForceUBSan.h; sourceTree = ""; }; - CBC90C4229C466BD00280884 /* ForceUBSan.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ForceUBSan.m; sourceTree = ""; }; - CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassNoScenario.swift; sourceTree = ""; }; - CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassYesScenario.swift; sourceTree = ""; }; - CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSubViewLoadScenario.swift; sourceTree = ""; }; - CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNoParentScenario.swift; sourceTree = ""; }; - CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProbabilityExpiryScenario.swift; sourceTree = ""; }; - CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParentSpanScenario.swift; sourceTree = ""; }; - CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanScenario.swift; sourceTree = ""; }; - CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkMultiple.swift; sourceTree = ""; }; - CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaxPayloadSizeScenario.swift; sourceTree = ""; }; - CBF62108291A4F47004BEE0B /* RetryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryScenario.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 01FE4DA228E1AEBD00D1F239 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */, - 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */, - 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 01FE4D9C28E1AEBD00D1F239 = { - isa = PBXGroup; - children = ( - 09637A3A2B0607DA00F4F776 /* utils */, - 01FE4DA728E1AEBD00D1F239 /* Fixture */, - 01FE4DC128E1AF0700D1F239 /* Scenarios */, - 01FE4DBC28E1AED000D1F239 /* Packages */, - 01FE4DA628E1AEBD00D1F239 /* Products */, - 01FE4DBE28E1AEDF00D1F239 /* Frameworks */, - ); - sourceTree = ""; - }; - 01FE4DA628E1AEBD00D1F239 /* Products */ = { - isa = PBXGroup; - children = ( - 01FE4DA528E1AEBD00D1F239 /* Fixture.app */, - ); - name = Products; - sourceTree = ""; - }; - 01FE4DA728E1AEBD00D1F239 /* Fixture */ = { - isa = PBXGroup; - children = ( - 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */, - 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */, - CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */, - 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */, - CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */, - 01FE4DC628E1D5A400D1F239 /* Fixture.swift */, - 01FE4DB628E1AEBF00D1F239 /* Info.plist */, - 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */, - 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */, - 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */, - 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */, - 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */, - 09637A442B0B883B00F4F776 /* FixtureConfig.swift */, - 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */, - 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */, - 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */, - ); - path = Fixture; - sourceTree = ""; - }; - 01FE4DBC28E1AED000D1F239 /* Packages */ = { - isa = PBXGroup; - children = ( - 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */, - ); - name = Packages; - sourceTree = ""; - }; - 01FE4DBE28E1AEDF00D1F239 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */, - 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 01FE4DC128E1AF0700D1F239 /* Scenarios */ = { - isa = PBXGroup; - children = ( - 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */, - 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */, - 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */, - CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */, - 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */, - 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */, - CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */, - 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */, - CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */, - CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */, - 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */, - 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */, - 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */, - 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */, - CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */, - 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */, - 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */, - CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */, - 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */, - 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */, - 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */, - 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */, - CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */, - CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */, - CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */, - 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */, - 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */, - CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */, - CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */, - 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */, - 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */, - CBC90C4129C466BD00280884 /* ForceUBSan.h */, - CBC90C4229C466BD00280884 /* ForceUBSan.m */, - 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */, - 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */, - 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */, - 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */, - 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */, - 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */, - 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */, - 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */, - CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */, - 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */, - 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */, - CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */, - 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */, - 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */, - 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */, - 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */, - CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */, - 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */, - 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */, - CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */, - 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */, - 09F025052BA08804007D9F73 /* ObjCURLSession.h */, - 09F025062BA08804007D9F73 /* ObjCURLSession.m */, - 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */, - CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */, - CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */, - 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */, - CBF62108291A4F47004BEE0B /* RetryScenario.swift */, - 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */, - 01FE4DC428E1AF9600D1F239 /* Scenario.swift */, - 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */, - 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */, - 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */, - 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */, - ); - path = Scenarios; - sourceTree = ""; - }; - 09637A3A2B0607DA00F4F776 /* utils */ = { - isa = PBXGroup; - children = ( - 09637A3B2B0607F300F4F776 /* Logging.swift */, - 09637A3D2B06082200F4F776 /* Logging.h */, - 09637A3E2B06082200F4F776 /* Logging.m */, - ); - path = utils; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 01FE4DA428E1AEBD00D1F239 /* Fixture */ = { - isa = PBXNativeTarget; - buildConfigurationList = 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "Fixture" */; - buildPhases = ( - 01FE4DA128E1AEBD00D1F239 /* Sources */, - 01FE4DA228E1AEBD00D1F239 /* Frameworks */, - 01FE4DA328E1AEBD00D1F239 /* Resources */, - 55155E072CBD1DB100B5B3FE /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Fixture; - packageProductDependencies = ( - 01A414C72912CA18003152A4 /* Bugsnag */, - ); - productName = Fixture; - productReference = 01FE4DA528E1AEBD00D1F239 /* Fixture.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 01FE4D9D28E1AEBD00D1F239 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1400; - LastUpgradeCheck = 1400; - TargetAttributes = { - 01FE4DA428E1AEBD00D1F239 = { - CreatedOnToolsVersion = 14.0; - LastSwiftMigration = 1400; - }; - }; - }; - buildConfigurationList = 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "Fixture" */; - compatibilityVersion = "Xcode 13.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 01FE4D9C28E1AEBD00D1F239; - packageReferences = ( - 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */, - ); - productRefGroup = 01FE4DA628E1AEBD00D1F239 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 01FE4DA428E1AEBD00D1F239 /* Fixture */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 01FE4DA328E1AEBD00D1F239 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */, - 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */, - 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 01FE4DA128E1AEBD00D1F239 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */, - CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */, - 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */, - 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */, - 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */, - 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */, - 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */, - 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */, - 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */, - 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */, - 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */, - 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */, - 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */, - CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */, - 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */, - 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */, - 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */, - CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */, - 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */, - 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */, - 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */, - 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */, - 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */, - 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */, - 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */, - 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */, - CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */, - 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */, - 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */, - 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */, - 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */, - 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */, - 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */, - 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */, - CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */, - CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */, - 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */, - 09637A3F2B06082200F4F776 /* Logging.m in Sources */, - CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */, - 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */, - CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */, - 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */, - 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */, - 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */, - 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */, - 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */, - 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */, - CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */, - 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */, - 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */, - CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */, - CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */, - 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */, - CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */, - 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */, - 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */, - CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */, - 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */, - 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */, - 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */, - 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */, - 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */, - 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */, - CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */, - 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */, - 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */, - CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */, - CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */, - 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */, - 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */, - CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */, - 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */, - 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */, - 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */, - 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */, - CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 01FE4DAF28E1AEBD00D1F239 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 01FE4DB428E1AEBF00D1F239 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 01FE4DB728E1AEBF00D1F239 /* 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++20"; - 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 = ( - "DEBUG=1", - "$(inherited)", - ); - 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; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 01FE4DB828E1AEBF00D1F239 /* 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++20"; - 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; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 01FE4DBA28E1AEBF00D1F239 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 7W9PZ27Y5F; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Fixture/Info.plist; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 01FE4DBB28E1AEBF00D1F239 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 7W9PZ27Y5F; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Fixture/Info.plist; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "Fixture" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 01FE4DB728E1AEBF00D1F239 /* Debug */, - 01FE4DB828E1AEBF00D1F239 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "Fixture" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 01FE4DBA28E1AEBF00D1F239 /* Debug */, - 01FE4DBB28E1AEBF00D1F239 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/bugsnag/bugsnag-cocoa"; - requirement = { - branch = master; - kind = branch; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 01A414C72912CA18003152A4 /* Bugsnag */ = { - isa = XCSwiftPackageProductDependency; - package = 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */; - productName = Bugsnag; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 01FE4D9D28E1AEBD00D1F239 /* Project object */; -} diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/features/fixtures/iosXcFramework/Fixture.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme b/features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme deleted file mode 100644 index b97c6859..00000000 --- a/features/fixtures/iosXcFramework/Fixture.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/features/fixtures/iosXcFramework/Fixture/AppDelegate.swift b/features/fixtures/iosXcFramework/Fixture/AppDelegate.swift deleted file mode 100644 index 1f2f0a8d..00000000 --- a/features/fixtures/iosXcFramework/Fixture/AppDelegate.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// AppDelegate.swift -// Fixture -// -// Created by Nick Dowell on 26/09/2022. -// - -import UIKit - -@main -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - logInfo(">>>>>>>>>> Fixture app has launched <<<<<<<<<<") - return true - } -} - -@available(iOS 13.0, *) -extension AppDelegate { - - // MARK: UISceneSession Lifecycle - - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb878970..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 13613e3e..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json b/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard b/features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 865e9329..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard b/features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard deleted file mode 100644 index 477c04ee..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Base.lproj/Main.storyboard +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift b/features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift deleted file mode 100644 index 173db934..00000000 --- a/features/fixtures/iosXcFramework/Fixture/CommandReaderThread.swift +++ /dev/null @@ -1,126 +0,0 @@ -// -// CommandReaderThread.swift -// iOSTestApp -// -// Created by Karl Stenerud on 16.11.23. -// Copyright © 2023 Bugsnag. All rights reserved. -// - -import UIKit -import os - -class CommandReaderThread: Thread { - var fixtureConfig: FixtureConfig - var commandReceiver: CommandReceiver - var lastCommandID: String = "" - - init(fixtureConfig: FixtureConfig, commandReceiver: CommandReceiver) { - self.fixtureConfig = fixtureConfig - self.commandReceiver = commandReceiver - } - - override func main() { - while true { - if self.commandReceiver.canReceiveCommand() { - receiveNextCommand() - } else { - logDebug("A command is already in progress, waiting 1 second more...") - } - Thread.sleep(forTimeInterval: 1) - } - } - - func newStartedFetchTask() -> CommandFetchTask { - let fetchTask = CommandFetchTask(url: fixtureConfig.commandURL, afterCommandID: lastCommandID) - fetchTask.start() - return fetchTask - } - - func receiveNextCommand() { - let maxWaitTime = 5.0 - let pollingInterval = 1.0 - - var fetchTask = newStartedFetchTask() - let startTime = Date() - - while true { - Thread.sleep(forTimeInterval: pollingInterval) - switch fetchTask.state { - case CommandFetchState.success: - logDebug("Command fetch: Request succeeded") - let command = fetchTask.command! - if (command.uuid != "") { - lastCommandID = command.uuid - } - commandReceiver.receiveCommand(command: command) - return - case CommandFetchState.fetching: - let duration = Date() - startTime - if duration < maxWaitTime { - logDebug("Command fetch: Server hasn't responded in \(duration)s (max \(maxWaitTime)). Waiting \(pollingInterval)s more...") - } else { - fetchTask.cancel() - logInfo("Command fetch: Server hasn't responded in \(duration)s (max \(maxWaitTime)). Trying again...") - fetchTask = newStartedFetchTask() - } - break - case CommandFetchState.failed: - logInfo("Command fetch: Request failed. Trying again...") - fetchTask = newStartedFetchTask() - break - } - } - } -} - -extension Date { - static func - (lhs: Date, rhs: Date) -> TimeInterval { - return lhs.timeIntervalSinceReferenceDate - rhs.timeIntervalSinceReferenceDate - } -} - -enum CommandFetchState { - case failed, fetching, success -} - -class CommandFetchTask { - var url: URL - var state = CommandFetchState.failed - var command: MazeRunnerCommand? - var task: URLSessionTask? - - init(url: URL, afterCommandID: String) { - self.url = URL(string: "\(url.absoluteString)?after=\(afterCommandID)")! - } - - func cancel() { - task?.cancel() - } - - func start() { - logInfo("Fetching next command from \(url)") - state = CommandFetchState.fetching - let request = URLRequest(url: url) - task = URLSession.shared.dataTask(with: request) { data, response, error in - if let data = data { - do { - let asString = String(data: data, encoding: .utf8)! - logInfo("Received command \(asString)") - let decoded = try JSONSerialization.jsonObject(with: data, options: []) as! [String: Any] - let command = MazeRunnerCommand.init(fromJSONDict: decoded) - logInfo("Command fetched and decoded") - self.command = command; - self.state = CommandFetchState.success - } catch { - self.state = CommandFetchState.failed - let dataAsString = String(data: data, encoding: .utf8) - logError("Failed to fetch command: Invalid Response from \(String(describing: self.url)): [\(String(describing: dataAsString))]: Error is: \(error)") - } - } else if let error = error { - self.state = CommandFetchState.failed - logError("Failed to fetch command: HTTP Request to \(String(describing: self.url)) failed: \(error)") - } - } - task?.resume() - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h b/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h deleted file mode 100644 index 85367af2..00000000 --- a/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// ErrorGenerator.h -// Fixture -// -// Created by Karl Stenerud on 26.07.24. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface ErrorGenerator : NSObject - -- (void)throwObjCException; -- (NSError *)throwSwiftException; - -@end - -NS_ASSUME_NONNULL_END diff --git a/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m b/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m deleted file mode 100644 index 5ca45242..00000000 --- a/features/fixtures/iosXcFramework/Fixture/ErrorGenerator.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// ErrorGenerator.m -// Fixture -// -// Created by Karl Stenerud on 26.07.24. -// - -#import "ErrorGenerator.h" -#import "Fixture-Swift.h" - -@interface ErrorGenerator () - -@property(nonatomic,readwrite) SwiftErrorGenerator *swiftErrorGenerator; - -@end - -@implementation ErrorGenerator - -- (instancetype)init { - if ((self = [super init])) { - _swiftErrorGenerator = [[SwiftErrorGenerator alloc] init]; - } - return self; -} - -- (void)throwObjCException { - [NSException raise:@"MyException" format:@"Oops..."]; -} - -- (NSError *)throwSwiftException { - NSError *error = nil; - [self.swiftErrorGenerator throwSwiftErrorAndReturnError:&error]; - return error; -} - -@end diff --git a/features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h b/features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h deleted file mode 100644 index 705b4143..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Fixture-Bridging-Header.h +++ /dev/null @@ -1,10 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// - -#import -#import -#import "BugsnagPerformanceConfiguration+Private.h" -#import "Logging.h" -#import "ObjCURLSession.h" -#import "ErrorGenerator.h" diff --git a/features/fixtures/iosXcFramework/Fixture/Fixture.swift b/features/fixtures/iosXcFramework/Fixture/Fixture.swift deleted file mode 100644 index 83c1bb6e..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Fixture.swift +++ /dev/null @@ -1,203 +0,0 @@ -// -// Fixture.swift -// Fixture -// -// Created by Nick Dowell on 26/09/2022. -// - -import Foundation - -protocol CommandReceiver { - func canReceiveCommand() -> Bool - func receiveCommand(command: MazeRunnerCommand) -} - -class Fixture: NSObject, CommandReceiver { - static let defaultMazeRunnerURL = URL(string: "http://bs-local.com:9339")! - - var readyToReceiveCommand = false - var commandReaderThread: CommandReaderThread? - var fixtureConfig: FixtureConfig = FixtureConfig(mazeRunnerBaseAddress: defaultMazeRunnerURL) - var scenario: Scenario? = nil - - func start() { - DispatchQueue.global(qos: .userInitiated).async { - self.loadMazeRunnerAddress { address in - self.fixtureConfig = FixtureConfig(mazeRunnerBaseAddress: address) - self.beginReceivingCommands(fixtureConfig: self.fixtureConfig) - } - } - } - - func beginReceivingCommands(fixtureConfig: FixtureConfig) { - readyToReceiveCommand = true - commandReaderThread = CommandReaderThread(fixtureConfig: fixtureConfig, commandReceiver: self) - commandReaderThread!.start() - } - - func canReceiveCommand() -> Bool { - return readyToReceiveCommand - } - - func receiveCommand(command: MazeRunnerCommand) { - readyToReceiveCommand = false - DispatchQueue.main.async { - logInfo("Executing command [\(command.action)] with args \(command.args)") - switch command.action { - case "load_scenario": - self.loadScenario(scenarioName: command.args["scenario"] as! String) - self.readyToReceiveCommand = true - break - case "configure_bugsnag": - self.configureBugsnag(path: command.args["path"] as! String, - value: command.args["value"] as! String) - self.readyToReceiveCommand = true - break - case "start_bugsnag": - self.startBugsnag() - self.readyToReceiveCommand = true - break - case "run_loaded_scenario": - self.runLoadedScenario(completion: { - self.readyToReceiveCommand = true - }) - break - case "run_scenario": - self.runScenario(scenarioName: command.args["scenario"] as! String, completion: { - self.readyToReceiveCommand = true - }) - break - case "invoke_method": - self.invokeMethod(methodName: command.args["method"] as! String, - args: command.args["arguments"] as! [String]) - self.readyToReceiveCommand = true - break - case "background": - self.scenario?.enterBackground(forSeconds: Int(command.args["duration"] as! String)!) - self.readyToReceiveCommand = true - break - case "noop": - self.readyToReceiveCommand = true - break - default: - assertionFailure("\(command.action): Unknown command") - self.readyToReceiveCommand = true - } - } - } - - private func loadScenario(scenarioName: String) { - logInfo("========== Loading scenario \(scenarioName) ==========") - let scenarioClass: AnyClass = NSClassFromString("Fixture.\(scenarioName)")! - logInfo("Loaded scenario class: \(scenarioClass)") - scenario = (scenarioClass as! Scenario.Type).init(fixtureConfig: fixtureConfig) as Scenario? - logInfo("Configuring scenario in class \(scenarioClass)") - scenario!.configure() - logInfo("Clearing persistent data") - scenario!.clearPersistentData() - } - - private func configureBugsnag(path: String, value: String) { - logInfo("Configuring bugsnag [\(path)] to [\(value)]") - scenario!.configureBugsnag(path: path, value: value) - } - - private func startBugsnag() { - logInfo("Starting bugsnag performance") - scenario!.startBugsnag() - } - - private func runLoadedScenario(completion: @escaping () -> ()) { - logInfo("Starting scenario \(String(describing: scenario))") - scenario!.run() - logInfo("========== Completed scenario \(String(describing: scenario)) ==========") - DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { - self.scenario!.reportMeasurements() - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { - completion() - } - } - } - - private func runScenario(scenarioName: String, completion: @escaping () -> ()) { - loadScenario(scenarioName: scenarioName) - startBugsnag() - runLoadedScenario(completion: completion) - } - - private func invokeMethod(methodName: String, args: Array) { - logInfo("Invoking method \(methodName) with args \(args) on \(String(describing: scenario!.self))") - - let sel = NSSelectorFromString(methodName) - if (!scenario!.responds(to: sel)) { - fatalError("\(String(describing: scenario!.self)) does not respond to \(methodName). Did you set the @objcMembers annotation on \(String(describing: scenario!.self))?") - } - - switch args.count { - case 0: - scenario!.perform(sel) - case 1: - // Note: Parameter must accept a string - scenario!.perform(sel, with: args[0]) - default: - fatalError("invoking \(methodName) with args \(args): Fixture currently only supports up to 1 argument") - } - } - - func loadMazeRunnerAddress(completion: (URL)->()) { - let defaultUrl = Fixture.defaultMazeRunnerURL - - // Only iOS 12 and above will run on BitBar for now - if #available(iOS 12.0, *) {} else { - completion(defaultUrl) - return - } - - for n in 1...60 { - let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] - - logInfo("Reading Maze Runner address from fixture_config.json") - do { - let fileUrl = URL(fileURLWithPath: "fixture_config", - relativeTo: documentsUrl).appendingPathExtension("json") - let savedData = try Data(contentsOf: fileUrl) - if let contents = String(data: savedData, encoding: .utf8) { - logInfo(String(format: "Found fixture_config.json after %d seconds", n)) - let decoder = JSONDecoder() - let jsonData = contents.data(using: .utf8) - let config = try decoder.decode(FixtureConfigJSON.self, from: jsonData!) - let address = "http://" + config.maze_address - logInfo("Using Maze Runner address: \(address)") - completion(URL(string: address)!) - return - } - } - catch let error as NSError { - logWarn("Failed to read fixture_config.json: \(error)") - } - logInfo("Waiting for fixture_config.json to appear") - sleep(1) - } - - logError("Unable to read from fixture_config.json, defaulting to BrowserStack environment") - completion(defaultUrl) - return - } - - private struct FixtureConfigJSON: Decodable { - var maze_address: String - } -} - -class PresetFixture: Fixture { - let scenarioName: String - init(scenarioName: String) { - self.scenarioName = scenarioName - } - - override func start() { - receiveCommand(command: MazeRunnerCommand(uuid: "0", action: "load_scenario", args: ["scenario": scenarioName], message: "")) - receiveCommand(command: MazeRunnerCommand(uuid: "0", action: "start_bugsnag", args: [:], message: "")) - receiveCommand(command: MazeRunnerCommand(uuid: "0", action: "run_loaded_scenario", args: [:], message: "")) - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift b/features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift deleted file mode 100644 index f35b550f..00000000 --- a/features/fixtures/iosXcFramework/Fixture/FixtureConfig.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// FixtureConfig.swift -// Fixture -// -// Created by Karl Stenerud on 20.11.23. -// - -import Foundation - -class FixtureConfig { - // Base MazeRunner URL - let mazeRunnerURL: URL - - // Admin URLs we normally don't want to capture - let docsURL: URL - let tracesURL: URL - let commandURL: URL - let metricsURL: URL - let notifyURL: URL - let sessionsURL: URL - - // URLs explicitly used in tests - let reflectURL: URL - - // Convenience URL sets - let adminMazeRunnerURLs: [URL] - let allMazeRunnerURLs: [URL] - - init(mazeRunnerBaseAddress: URL) { - mazeRunnerURL = mazeRunnerBaseAddress - - docsURL = mazeRunnerBaseAddress.appendingPathComponent("docs") - tracesURL = mazeRunnerBaseAddress.appendingPathComponent("traces") - commandURL = mazeRunnerBaseAddress.appendingPathComponent("command") - metricsURL = mazeRunnerBaseAddress.appendingPathComponent("metrics") - notifyURL = mazeRunnerBaseAddress.appendingPathComponent("notify") - sessionsURL = mazeRunnerBaseAddress.appendingPathComponent("sessions") - - reflectURL = mazeRunnerBaseAddress.appendingPathComponent("reflect") - - adminMazeRunnerURLs = [ - docsURL, - tracesURL, - commandURL, - metricsURL, - notifyURL, - sessionsURL, - ] - allMazeRunnerURLs = [mazeRunnerURL] - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/Info.plist b/features/fixtures/iosXcFramework/Fixture/Info.plist deleted file mode 100644 index 44c52ff2..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Info.plist +++ /dev/null @@ -1,61 +0,0 @@ - - - - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main - - - - - bugsnag - - performance - - - - - - bundleVersion - 30 - autoInstrumentNetworkRequests - - autoInstrumentViewControllers - - autoInstrumentAppStarts - - - enabledReleaseStages - - release - staging - - releaseStage - staging - bundleVersion - 40 - appVersion - 10.0 - apiKey - 0123456789abcdef0123456789abcdef - - - diff --git a/features/fixtures/iosXcFramework/Fixture/Info.template.plist b/features/fixtures/iosXcFramework/Fixture/Info.template.plist deleted file mode 100644 index c7ba6937..00000000 --- a/features/fixtures/iosXcFramework/Fixture/Info.template.plist +++ /dev/null @@ -1,61 +0,0 @@ - - - - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main - - - - - bugsnag - - performance - - DISABLE_SWIZZLING_KEY - DISABLE_SWIZZLING_VALUE - SWIZZLING_PREMAIN_KEY - SWIZZLING_PREMAIN_VALUE - bundleVersion - 30 - autoInstrumentNetworkRequests - - autoInstrumentViewControllers - - autoInstrumentAppStarts - - - enabledReleaseStages - - release - staging - - releaseStage - staging - bundleVersion - 40 - appVersion - 10.0 - apiKey - 0123456789abcdef0123456789abcdef - - - diff --git a/features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift b/features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift deleted file mode 100644 index 6fa8093a..00000000 --- a/features/fixtures/iosXcFramework/Fixture/MazeRunnerCommand.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// MazeRunnerCommand.swift -// Fixture -// -// Created by Karl Stenerud on 16.11.23. -// - -import Foundation - -class MazeRunnerCommand { - let message: String - let action: String - let uuid: String - let args: Dictionary - - init(uuid: String, action: String, args: Dictionary, message: String) { - self.uuid = uuid - self.message = message - self.action = action - self.args = args - } - - init(fromJSONDict: Dictionary) { - self.uuid = fromJSONDict["uuid"] as? String ?? "" - self.action = fromJSONDict["action"] as! String - self.args = fromJSONDict["args"] as? Dictionary ?? [:] - self.message = fromJSONDict["message"] as? String ?? "" - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift b/features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift deleted file mode 100644 index c89da8d3..00000000 --- a/features/fixtures/iosXcFramework/Fixture/SceneDelegate.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// SceneDelegate.swift -// Fixture -// -// Created by Nick Dowell on 26/09/2022. -// - -import UIKit - -@available(iOS 13.0, *) -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } - } - - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - } - - -} - diff --git a/features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift b/features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift deleted file mode 100644 index f74bd03b..00000000 --- a/features/fixtures/iosXcFramework/Fixture/SwiftErrorGenerator.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// SwiftErrorGenerator.swift -// Fixture -// -// Created by Karl Stenerud on 26.07.24. -// - -import Foundation - -enum MySwiftError: Error { - case oops -} - -@objc -@objcMembers -class SwiftErrorGenerator: NSObject { - - func throwSwiftError() throws { - throw MySwiftError.oops - } -} diff --git a/features/fixtures/iosXcFramework/Fixture/ViewController.swift b/features/fixtures/iosXcFramework/Fixture/ViewController.swift deleted file mode 100644 index b20cc5e5..00000000 --- a/features/fixtures/iosXcFramework/Fixture/ViewController.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// ViewController.swift -// Fixture -// -// Created by Nick Dowell on 26/09/2022. -// - -import UIKit - -class ViewController: UIViewController { - var fixture: Fixture = Fixture() -// var fixture: Fixture = PresetFixture(scenarioName: "AutoInstrumentAVAssetScenario") - - required init?(coder: NSCoder) { - super.init(coder: coder) - fixture.start() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift deleted file mode 100644 index 56e4e73c..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AppDataOverrideScenario.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// AppDataOverrideScenario.swift -// Fixture -// -// Created by Robert B on 16/08/2024. -// - -import BugsnagPerformance - -@objcMembers -class AppDataOverrideScenario: Scenario { - - override func configure() { - super.configure() - config.serviceName = "com.bugsnag.AppDataOverrideScenario" - config.bundleVersion = "100" - config.appVersion = "42.0" - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "AppDataOverrideScenario") - span.end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift deleted file mode 100644 index ce0f8a67..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAVAssetScenario.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// AutoInstrumentAVAssetScenario.swift -// Fixture -// -// Created by Karl Stenerud on 06.06.24. -// - -import Foundation -import AVFoundation - -@objcMembers -class AutoInstrumentAVAssetScenario: Scenario, AVAssetDownloadDelegate { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - let currentFileName = "the-file" - let configuration = URLSessionConfiguration.background(withIdentifier: currentFileName) - - let downloadSession = AVAssetDownloadURLSession(configuration: configuration, - assetDownloadDelegate: self, - delegateQueue: OperationQueue.main) - let asset = AVURLAsset(url: url) - let downloadTask = downloadSession.makeAssetDownloadTask(asset: asset, - assetTitle: currentFileName, - assetArtworkData: nil, - options: nil) - downloadTask!.resume() - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - let span = BugsnagPerformance.startSpan(name: "parentSpan") - span.end(); - query(string: "?status=200") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift deleted file mode 100644 index 8cecf9d8..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentAppStartsScenario.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// AutoInstrumentAppStartsScenario.swift -// Fixture -// -// Created by Nick Dowell on 07/10/2022. -// - -import BugsnagPerformance - -@objcMembers -class AutoInstrumentAppStartsScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentAppStarts = true - } - - override func run() { - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift deleted file mode 100644 index d56b4936..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentFileURLRequestScenario.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// AutoInstrumentFileURLRequestScenario.swift -// Fixture -// -// Created by Karl Stenerud on 11.05.23. -// - -import Foundation - -@objcMembers -class AutoInstrumentFileURLRequestScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - let url = URL(string: "file:///x")! - URLSession.shared.dataTask(with: url).resume() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift deleted file mode 100644 index d30453f6..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentGenericViewLoadScenario.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// AutoInstrumentGenericViewLoadScenario.swift -// Fixture -// -// Created by Robert B on 07/12/2023. -// - -import UIKit - -protocol AutoInstrumentGenericViewLoadScenario_GenericsBaseProtocol { - -} - -class AutoInstrumentGenericViewLoadScenario_GenericsClass: AutoInstrumentGenericViewLoadScenario_GenericsBaseProtocol { - -} - -@objcMembers -class AutoInstrumentGenericViewLoadScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - // This test can generate a variable number of spans depending on the OS version, - // so use a timed send instead. - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 1 - } - - override func run() { - UIApplication.shared.windows[0].rootViewController!.present( - AutoInstrumentGenericViewLoadScenario_ViewController().bugsnagTraced(), animated: true) - } -} - -class AutoInstrumentGenericViewLoadScenario_ViewController: UIViewController { - - override func loadView() { - let label = UILabel() - label.backgroundColor = .white - label.textAlignment = .center - label.text = String(describing: type(of: self)) - view = label - } -} - -class TestViewController: AutoInstrumentGenericViewLoadScenario_ViewController { - -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift deleted file mode 100644 index c7ea8158..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNavigationViewLoadScenario.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// AutoInstrumentNavigationViewLoadScenario.swift -// Fixture -// -// Created by Robert B on 16/06/2023. -// - -import Foundation - -import UIKit - -@objcMembers -class AutoInstrumentNavigationViewLoadScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - // This test can generate a variable number of spans depending on the OS version, - // so use a timed send instead. - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 1 - } - - override func run() { - UIApplication.shared.windows[0].rootViewController!.present( - AutoInstrumentNavigationViewLoadScenario_ViewController(), animated: true) - } -} - -class AutoInstrumentNavigationViewLoadScenario_ViewController: UITabBarController { - let subVC = AutoInstrumentNavigationViewLoadScenario_SubViewController() - - override func viewDidLoad() { - viewControllers = [subVC] - } -} - -class AutoInstrumentNavigationViewLoadScenario_SubViewController: UIViewController { - - override func loadView() { - let label = UILabel() - label.backgroundColor = .white - label.textAlignment = .center - label.text = String(describing: type(of: self)) - view = label - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift deleted file mode 100644 index 8e5d13b8..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkBadAddressScenario.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// AutoInstrumentNetworkBadAddressScenario.swift -// Fixture -// -// Created by Karl Stenerud on 12.05.23. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkBadAddressScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - query(string: "/?status=200") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift deleted file mode 100644 index 105e9eee..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkCallbackScenario.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// AutoInstrumentNetworkCallbackScenario.swift -// Fixture -// -// Created by Karl Stenerud on 20.07.23. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkCallbackScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - config.networkRequestCallback = { (origInfo: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo in - let info = self.filterAdminMazeRunnerNetRequests(info: origInfo) - - let testUrl = info.url - if (testUrl == nil) { - return info - } - - let url = testUrl! - - if url.absoluteString == "https://google.com" { - info.url = nil - } else if url.lastPathComponent == "changeme" { - info.url = URL(string:"changed", relativeTo:url.deletingLastPathComponent()) - } - - return info - } - } - - func query(url: URL) { - let task = URLSession.shared.dataTask(with: url) {(data, response, error) in - } - task.resume() - - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - query(url: URL(string: "https://bugsnag.com")!) - query(url: URL(string: "https://bugsnag.com/changeme")!) - query(url: URL(string: "https://google.com")!) - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift deleted file mode 100644 index a5eed2a9..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkMultiple.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// AutoInstrumentNetworkMultiple.swift -// Fixture -// -// Created by Karl Stenerud on 23.06.23. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkMultiple: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - func query(url: String) { - let url = URL(string: "https://google.com")! - let task = URLSession.shared.dataTask(with: url) {(data, response, error) in - } - task.resume() - - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - query(url: "https://google.com") - query(url: "https://facebook.com") - query(url: "https://amazon.com") - query(url: "https://bing.com") - query(url: "https://reuters.com") - query(url: "https://sap.com") - query(url: "https://redhat.com") - query(url: "https://ubuntu.com") - query(url: "https://kubernetes.io") - query(url: "https://bugsnag.com") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift deleted file mode 100644 index 919de386..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNoParentScenario.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// AutoInstrumentNetworkNoParentScenario.swift -// Fixture -// -// Created by Karl Stenerud on 25.04.23. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkNoParentScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - let span = BugsnagPerformance.startSpan(name: "parentSpan") - span.end(); - query(string: "?status=200") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift deleted file mode 100644 index 5bbfcab8..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkNullURLScenario.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// AutoInstrumentNetworkNullURLScenario.swift -// Fixture -// -// Created by Karl Stenerud on 12.03.24. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkNullURLScenario: Scenario { - - override func configure() { - // Early phase span. Make sure it doesn't crash or generate a span - ObjCURLSession.dataTask(with: nil).resume() - - super.configure() - config.autoInstrumentNetworkRequests = true - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - // Send an actual request to be captured - query(string: "?status=200") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift deleted file mode 100644 index f410f6dd..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartDisabledScenario.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// AutoInstrumentNetworkPreStartDisabledScenario.swift -// Fixture -// -// Created by Karl Stenerud on 23.09.24. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkPreStartDisabledScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = false - } - - override func startBugsnag() { - query(string: "?status=200") - - // Wait for the query to finish before starting bugsnag - Thread.sleep(forTimeInterval: 2.0) - - super.startBugsnag() - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift deleted file mode 100644 index b07ba4cf..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkPreStartScenario.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// AutoInstrumentNetworkPreStartScenario.swift -// Fixture -// -// Created by Karl Stenerud on 23.09.24. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkPreStartScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - override func startBugsnag() { - query(string: "?status=200") - - // Wait for the query to finish before starting bugsnag - Thread.sleep(forTimeInterval: 2.0) - - super.startBugsnag() - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift deleted file mode 100644 index 25e56df0..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkTracePropagationScenario.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// AutoInstrumentNetworkTracePropagationScenario.swift -// Fixture -// -// Created by Karl Stenerud on 30.04.24. -// - -import BugsnagPerformance - -@objcMembers -class AutoInstrumentNetworkTracePropagationScenario: Scenario { - - private var urlPaths: [String] = [] - - required init(fixtureConfig: FixtureConfig) { - super.init(fixtureConfig: fixtureConfig) - } - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - func setCallSites(callSiteStrs: String) { - var newSites: [String] = [] - for path in splitArgs(args: callSiteStrs) { - newSites.append(String(path)) - } - urlPaths = newSites - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - for path in urlPaths { - query(string: path) - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift deleted file mode 100644 index cca8f8e0..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNetworkWithParentScenario.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// AutoInstrumentNetworkWithParentScenario.swift -// Fixture -// -// Created by Karl Stenerud on 20.10.22. -// - -import Foundation - -@objcMembers -class AutoInstrumentNetworkWithParentScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - let span = BugsnagPerformance.startSpan(name: "parentSpan") - query(string: "?status=200") - span.end(); - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift deleted file mode 100644 index 7018a0e7..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentNullNetworkCallbackScenario.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// AutoInstrumentNullNetworkCallbackScenario.swift -// Fixture -// -// Created by Karl Stenerud on 02.07.24. -// - -import Foundation - -@objcMembers -class AutoInstrumentNullNetworkCallbackScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = true - config.networkRequestCallback = nil - } - - func query(url: URL) { - let task = URLSession.shared.dataTask(with: url) {(data, response, error) in - } - task.resume() - - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - query(url: URL(string: "https://bugsnag.com")!) - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift deleted file mode 100644 index 1b894ed4..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentPreLoadedViewLoadScenario.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// AutoInstrumentPreLoadedViewLoadScenario.swift -// Fixture -// -// Created by Robert Bartoszewski on 25/01/2024. -// - -import Foundation - -import UIKit - -@objcMembers -class AutoInstrumentPreLoadedViewLoadScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - // This test can generate a variable number of spans depending on the OS version, - // so use a timed send instead. - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 1 - } - - override func run() { - let viewController = AutoInstrumentPreLoadedViewLoadScenario_ViewController() - _ = viewController.view - Thread.sleep(forTimeInterval: 1.5) - UIApplication.shared.windows[0].rootViewController!.present( - viewController, animated: true) - } -} - -class AutoInstrumentPreLoadedViewLoadScenario_ViewController: UIViewController { - - override func loadView() { - let label = UILabel() - label.backgroundColor = .white - label.textAlignment = .center - label.text = String(describing: type(of: self)) - view = label - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift deleted file mode 100644 index 82f7a144..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSubViewLoadScenario.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// AutoInstrumentSubViewLoadScenario.swift -// Fixture -// -// Created by Karl Stenerud on 27.03.23. -// - -import UIKit - -@objcMembers -class AutoInstrumentSubViewLoadScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - // This test can generate a variable number of spans depending on the OS version, - // so use a timed send instead. - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 1 - } - - override func run() { - UIApplication.shared.windows[0].rootViewController!.present( - AutoInstrumentSubViewLoadScenario_ViewController(), animated: true) - } -} - -class AutoInstrumentSubViewLoadScenario_ViewController: UIViewController { - let subVC = AutoInstrumentSubViewLoadScenario_SubViewController() - - override func viewDidLoad() { - super.viewDidLoad() - add(childViewController:AutoInstrumentSubViewLoadScenario_SubViewController(), to:view) - } -} - -class AutoInstrumentSubViewLoadScenario_SubViewController: UIViewController { - - override func loadView() { - let label = UILabel() - label.backgroundColor = .white - label.textAlignment = .center - label.text = String(describing: type(of: self)) - view = label - } - - override func viewDidLoad() { - super.viewDidLoad() - } -} - -extension UIViewController { - func add(childViewController viewController: UIViewController, to contentView: UIView) { - addChild(viewController) - viewController.view.translatesAutoresizingMaskIntoConstraints = false - contentView.addSubview(viewController.view) - NSLayoutConstraint.activate([ - viewController.view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), - viewController.view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), - viewController.view.topAnchor.constraint(equalTo: contentView.topAnchor), - viewController.view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) - ]) - viewController.didMove(toParent: self) - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift deleted file mode 100644 index 3a8a4568..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIDeferredScenario.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// AutoInstrumentSwiftUIDeferredScenario.swift -// Fixture -// -// Created by Karl Stenerud on 27.12.23. -// - -import SwiftUI -import BugsnagPerformance -import BugsnagPerformanceSwift - -@objcMembers -class AutoInstrumentSwiftUIDeferredScenario: Scenario { - var view = AutoInstrumentSwiftUIDeferredScenario_View(model: AutoInstrumentSwiftUIDeferredModel()) - - override func run() { - if #available(iOS 13.0.0, *) { - UIApplication.shared.windows[0].rootViewController!.present( - UIHostingController(rootView: view), animated: true) - } else { - fatalError("SwiftUI is not available on this version of iOS") - } - } - - func toggleHideText1() { - self.view.toggleHideText1() - } - - func toggleEndSpanDefer() { - self.view.toggleEndSpanDefer() - } -} - -class AutoInstrumentSwiftUIDeferredModel: ObservableObject { - @Published var shouldShowText1: Bool = true - @Published var shouldDeferEndSpan: Bool = true - - func toggleHideText1() { - shouldShowText1.toggle() - } - - func toggleEndSpanDefer() { - shouldDeferEndSpan.toggle() - } -} - -@available(iOS 13.0.0, *) -struct AutoInstrumentSwiftUIDeferredScenario_View: View { - @ObservedObject var model : AutoInstrumentSwiftUIDeferredModel - - func toggleHideText1() { - DispatchQueue.main.async { self.model.toggleHideText1() } - } - - func toggleEndSpanDefer() { - DispatchQueue.main.async { self.model.toggleEndSpanDefer() } - } - - var body: some View { - VStack { - if model.shouldShowText1 { - Text("Text 1") - .bugsnagTraced("text1") - .bugsnagDeferEndUntilViewDisappears() - } - } - .bugsnagTraced("vstack1") - .bugsnagDeferEndUntil { - return !model.shouldDeferEndSpan - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift deleted file mode 100644 index 8205cf61..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentSwiftUIScenario.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// AutoInstrumentSwiftUIScenario.swift -// Fixture -// -// Created by Karl Stenerud on 27.11.23. -// - -import SwiftUI -import BugsnagPerformance -import BugsnagPerformanceSwift - -@objcMembers -class AutoInstrumentSwiftUIScenario: Scenario { - var view = AutoInstrumentSwiftUIScenario_View(model: AutoInstrumentSwiftUIModel()) - - override func run() { - if #available(iOS 13.0.0, *) { - UIApplication.shared.windows[0].rootViewController!.present( - UIHostingController(rootView: view), animated: true) - } else { - fatalError("SwiftUI is not available on this version of iOS") - } - } - - func switchView() { - self.view.switchView() - } -} - -class AutoInstrumentSwiftUIModel: ObservableObject { - @Published var shouldSwitchViews: Bool = false - - func switchViews() { - shouldSwitchViews.toggle() - } -} - -@available(iOS 13.0.0, *) -struct AutoInstrumentSwiftUIScenario_View: View { - @ObservedObject var model : AutoInstrumentSwiftUIModel - - func switchView() { - DispatchQueue.main.async { self.model.switchViews() } - } - - var body: some View { - if !model.shouldSwitchViews { - return AnyView(VStack { - Image(systemName: "globe") - .imageScale(.large) - .bugsnagTraced("My Image view") - } - .bugsnagTraced("My VStack view") - .padding()) - } else { - return AnyView(Text("Switched").bugsnagTraced("Text")) - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift deleted file mode 100644 index 821c3f6e..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentTabViewLoadScenario.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// AutoInstrumentTabViewLoadScenario.swift -// Fixture -// -// Created by Robert B on 16/06/2023. -// - -import Foundation - -import UIKit - -@objcMembers -class AutoInstrumentTabViewLoadScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - // This test can generate a variable number of spans depending on the OS version, - // so use a timed send instead. - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 1 - } - - override func run() { - UIApplication.shared.windows[0].rootViewController!.present( - AutoInstrumentTabViewLoadScenario_ViewController(), animated: true) - } -} - -class AutoInstrumentTabViewLoadScenario_ViewController: UITabBarController { - let subVC = AutoInstrumentTabViewLoadScenario_SubViewController() - - override func viewDidLoad() { - viewControllers = [subVC] - } -} - -class AutoInstrumentTabViewLoadScenario_SubViewController: UIViewController { - - override func loadView() { - let label = UILabel() - label.backgroundColor = .white - label.textAlignment = .center - label.text = String(describing: type(of: self)) - view = label - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift deleted file mode 100644 index 1fc01f6d..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/AutoInstrumentViewLoadScenario.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// AutoInstrumentViewLoadScenario.swift -// Fixture -// -// Created by Nick Dowell on 12/10/2022. -// - -import UIKit - -@objcMembers -class AutoInstrumentViewLoadScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - // This test can generate a variable number of spans depending on the OS version, - // so use a timed send instead. - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 1 - } - - override func run() { - UIApplication.shared.windows[0].rootViewController!.present( - AutoInstrumentViewLoadScenario_ViewController(), animated: true) - } -} - -class AutoInstrumentViewLoadScenario_ViewController: UIViewController { - - override func loadView() { - let label = UILabel() - label.backgroundColor = .white - label.textAlignment = .center - label.text = String(describing: type(of: self)) - view = label - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift b/features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift deleted file mode 100644 index f62815c8..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/BackgroundForegroundScenario.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// BackgroundForegroundScenario.swift -// Fixture -// -// Created by Karl Stenerud on 10.03.23. -// - -import BugsnagPerformance - -@objcMembers -class BackgroundForegroundScenario: Scenario { - var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid - - override func configure() { - super.configure() - config.internal.autoTriggerExportOnBatchSize = 1 - } - - override func run() { - NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) { _ in - logInfo("### Scenario: didEnterBackgroundNotification: Starting and ending 'BackgroundForegroundScenario' span") - BugsnagPerformance.startSpan(name: "BackgroundForegroundScenario").end() - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift b/features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift deleted file mode 100644 index 88d35e3f..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/BatchingScenario.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// BatchingScenario.swift -// Fixture -// -// Created by Karl Stenerud on 02.11.22. -// - -import BugsnagPerformance - -@objcMembers -class BatchingScenario: Scenario { - - override func configure() { - super.configure() - config.internal.autoTriggerExportOnBatchSize = 2 - } - - override func run() { - BugsnagPerformance.startSpan(name: "Span1").end() - BugsnagPerformance.startSpan(name: "Span2").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift b/features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift deleted file mode 100644 index 4ec16d93..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/BatchingWithTimeoutScenario.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// BatchingScenario.swift -// Fixture -// -// Created by Karl Stenerud on 02.11.22. -// - -import BugsnagPerformance - -@objcMembers -class BatchingWithTimeoutScenario: Scenario { - - override func configure() { - super.configure() - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 10 - } - - override func run() { - BugsnagPerformance.startSpan(name: "Span1").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift deleted file mode 100644 index 7c627105..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ComplexViewScenario.swift +++ /dev/null @@ -1,285 +0,0 @@ -// -// ComplexViewScenario.swift -// Fixture -// -// Created by Karl Stenerud on 26.01.24. -// - -import BugsnagPerformance - -@objcMembers -class ComplexViewScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - // This test can generate a variable number of spans depending on the OS version, - // so use a timed send instead. - config.internal.autoTriggerExportOnBatchSize = 100 - config.internal.performWorkInterval = 1 - } - - override func run() { - let viewController = ComplexViewScenario_ViewController() - _ = viewController.view - UIApplication.shared.windows[0].rootViewController!.present( - viewController, animated: true) - } - } - -extension UIColor { - func image(_ size: CGSize = CGSize(width: 128, height: 128)) -> UIImage { - return UIGraphicsImageRenderer(size: size).image { rendererContext in - self.setFill() - rendererContext.fill(CGRect(origin: .zero, size: size)) - } - } -} - -extension UIView { - func anchor (top: NSLayoutYAxisAnchor?, - left: NSLayoutXAxisAnchor?, - bottom: NSLayoutYAxisAnchor?, - right: NSLayoutXAxisAnchor?, - paddingTop: CGFloat, - paddingLeft: CGFloat, - paddingBottom: CGFloat, - paddingRight: CGFloat, - width: CGFloat, - height: CGFloat) { - - translatesAutoresizingMaskIntoConstraints = false - - if let top = top { - self.topAnchor.constraint(equalTo: top, constant: paddingTop+self.safeAreaInsets.top).isActive = true - } - if let left = left { - self.leftAnchor.constraint(equalTo: left, constant: paddingLeft).isActive = true - } - if let right = right { - rightAnchor.constraint(equalTo: right, constant: -paddingRight).isActive = true - } - if let bottom = bottom { - bottomAnchor.constraint(equalTo: bottom, constant: -paddingBottom-self.safeAreaInsets.bottom).isActive = true - } - if height > 0 { - heightAnchor.constraint(equalToConstant: height).isActive = true - } - if width > 0 { - widthAnchor.constraint(equalToConstant: width).isActive = true - } - } -} - -struct ColorItem { - - var name : String - var image : UIImage - var description : String -} - -class ColorItemCell : UITableViewCell { - - var item : ColorItem? { - didSet { - image.image = item?.image - nameLabel.text = item?.name - descriptionLabel.text = item?.description - } - } - - private let image : UIImageView = { - let view = UIImageView(image: UIColor.white.image()) - view.contentMode = .scaleAspectFit - view.clipsToBounds = true - return view - }() - - private let nameLabel : UILabel = { - let label = UILabel() - label.textColor = .black - label.font = UIFont.boldSystemFont(ofSize: 16) - label.textAlignment = .left - return label - }() - - private let descriptionLabel : UILabel = { - let label = UILabel() - label.textColor = .black - label.font = UIFont.systemFont(ofSize: 16) - label.textAlignment = .left - label.numberOfLines = 0 - return label - }() - - private let decreaseButton : UIButton = { - let button = UIButton(type: .custom) - button.setTitle("-", for: .normal) - button.setTitleColor(.black, for: .normal) - button.imageView?.contentMode = .scaleAspectFill - return button - }() - - private let increaseButton : UIButton = { - let button = UIButton(type: .custom) - button.setTitle("+", for: .normal) - button.setTitleColor(.black, for: .normal) - button.imageView?.contentMode = .scaleAspectFill - return button - }() - - var itemQuantity : UILabel = { - let label = UILabel() - label.font = UIFont.boldSystemFont(ofSize: 16) - label.textAlignment = .left - label.text = "1" - label.textColor = .black - return label - }() - - @objc func onDecrease() { - adjustQuantity(by: -1) - } - - @objc func onIncrease() { - adjustQuantity(by: 1) - } - - func adjustQuantity(by amount: Int) { - var quantity = Int(itemQuantity.text!)! + amount - if quantity < 0 { - quantity = 0 - } - itemQuantity.text = "\(quantity)" - } - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - - contentView.addSubview(image) - image.anchor(top: topAnchor, - left: leftAnchor, - bottom: bottomAnchor, - right: nil, - paddingTop: 5, - paddingLeft: 5, - paddingBottom: 5, - paddingRight: 0, - width: 90, - height: 0) - - contentView.addSubview(nameLabel) - nameLabel.anchor(top: topAnchor, - left: image.rightAnchor, - bottom: nil, - right: nil, - paddingTop: 20, - paddingLeft: 10, - paddingBottom: 0, - paddingRight: 0, - width: frame.size.width / 2, - height: 0) - - contentView.addSubview(descriptionLabel) - descriptionLabel.anchor(top: nameLabel.bottomAnchor, - left: image.rightAnchor, - bottom: nil, - right: nil, - paddingTop: 0, - paddingLeft: 10, - paddingBottom: 0, - paddingRight: 0, - width: frame.size.width / 2, - height: 0) - - let stackView = UIStackView(arrangedSubviews: [decreaseButton,itemQuantity,increaseButton]) - stackView.distribution = .equalSpacing - stackView.axis = .horizontal - stackView.spacing = 5 - contentView.addSubview(stackView) - stackView.anchor(top: topAnchor, - left: nameLabel.rightAnchor, - bottom: bottomAnchor, - right: rightAnchor, - paddingTop: 15, - paddingLeft: 5, - paddingBottom: 15, - paddingRight: 10, - width: 0, - height: 70) - - increaseButton.addTarget(self, action: #selector(onIncrease), for: .touchUpInside) - decreaseButton.addTarget(self, action: #selector(onDecrease), for: .touchUpInside) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) not supported") - } -} - -class ComplexViewScenario_ViewController: UIViewController { - // Override so that these get instrumented - override func loadView() { - super.loadView() - } - - override func viewDidLoad() { - super.viewDidLoad() - let controller = ComplexViewScenario_TableViewController() - controller.view.frame = self.view.bounds - self.view.addSubview(controller.view) - self.addChild(controller) - controller.didMove(toParent: self) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - } -} - -class ComplexViewScenario_TableViewController: UITableViewController { - let cellId = "myCell" - var colorItems : [ColorItem] = [ColorItem]() - - // Override so that these get instrumented - override func loadView() { - super.loadView() - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - } - - override func viewDidLoad() { - super.viewDidLoad() - - colorItems.append(ColorItem(name: "Orange", image: UIColor.orange.image(), description: "Nothing rhymes with it")) - colorItems.append(ColorItem(name: "Red", image: UIColor.red.image(), description: "The strongest color")) - colorItems.append(ColorItem(name: "Yellow", image: UIColor.yellow.image(), description: "Sunflower color")) - - tableView.register(ColorItemCell.self, forCellReuseIdentifier: cellId) - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ColorItemCell - cell.item = colorItems[indexPath.row] - cell.selectionStyle = UITableViewCell.SelectionStyle.none - return cell - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return colorItems.count - } - - override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 100 - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift b/features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift deleted file mode 100644 index 29f6aef5..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/EarlySpanOnEndScenario.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// EarlySpanOnEndScenario.swift -// Fixture -// -// Created by Karl Stenerud on 15.08.24. -// - -import Foundation - -@objcMembers -class EarlySpanOnEndScenario: Scenario { - - override func configure() { - // Early network span - query(string: "test") - - super.configure() - config.autoInstrumentAppStarts = true - config.autoInstrumentNetworkRequests = true - config.add { span in - // We've turned on app start spans, but they'll get filtered - // out here because they don't contain "HTTP" in their names. - return span.name.contains("HTTP") - } - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift deleted file mode 100644 index 36831493..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FirstClassNoScenario.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// FirstClassNoScenario.swift -// Fixture -// -// Created by Karl Stenerud on 24.03.23. -// - -import BugsnagPerformance - -@objcMembers -class FirstClassNoScenario: Scenario { - - override func run() { - let opts = BugsnagPerformanceSpanOptions().setFirstClass(.no) - BugsnagPerformance.startSpan(name: "FirstClassNoScenario", options: opts).end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift deleted file mode 100644 index fc3e478f..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FirstClassYesScenario.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// FirstClassYesScenario.swift -// Fixture -// -// Created by Karl Stenerud on 24.03.23. -// - -import BugsnagPerformance - -@objcMembers -class FirstClassYesScenario: Scenario { - - override func run() { - let opts = BugsnagPerformanceSpanOptions().setFirstClass(.yes) - BugsnagPerformance.startSpan(name: "FirstClassYesScenario", options: opts).end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift deleted file mode 100644 index 66000987..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityOneScenario.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// ServiceNameScenario.swift -// Fixture -// -// Created by Robert B on 20/08/2024. -// - -import BugsnagPerformance - -@objcMembers -class FixedSamplingProbabilityOneScenario: Scenario { - - override func configure() { - super.configure() - config.samplingProbability = 1.0 - } - - override func run() { - BugsnagPerformance.startSpan(name: "FixedSamplingProbabilitySpan1").end() - } - - func step2() { - BugsnagPerformance.startSpan(name: "FixedSamplingProbabilitySpan2").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift deleted file mode 100644 index 7f4e7550..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FixedSamplingProbabilityZeroScenario.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// FixedSamplingProbabilityZeroScenario.swift -// Fixture -// -// Created by Robert B on 23/08/2024. -// - -import BugsnagPerformance - -@objcMembers -class FixedSamplingProbabilityZeroScenario: Scenario { - - override func configure() { - super.configure() - config.samplingProbability = 0.0 - } - - override func run() { - BugsnagPerformance.startSpan(name: "FixedSamplingProbabilitySpan1").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h b/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h deleted file mode 100644 index f1efaa0a..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// ForceUBSan.h -// Fixture -// -// Created by Karl Stenerud on 17.03.23. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -// This file exists solely to force the Xcode scheme to allow UBSan to run. -// The UB sanitizer is forcibly disabled if Xcode thinks it's a Swift-only project. -// Linking in a non-swift framework isn't enough to convince it. - -@interface ForceUBSan : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m b/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m deleted file mode 100644 index d7a2432d..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ForceUBSan.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// ForceUBSan.m -// Fixture -// -// Created by Karl Stenerud on 17.03.23. -// - -#import "ForceUBSan.h" - -@implementation ForceUBSan - -@end diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift deleted file mode 100644 index 23cd245c..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsAutoInstrumentRenderingOffScenario.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// FrameMetricsAutoInstrumentRenderingOffScenario.swift -// Fixture -// -// Created by Robert B on 26/09/2024. -// - -import Bugsnag -import BugsnagPerformance - -@objcMembers -class FrameMetricsAutoInstrumentRenderingOffScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentRendering = false - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "FrameMetricsAutoInstrumentRenderingOffScenario") - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.3) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.5) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.2) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { - span.end() - } - } - } - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift deleted file mode 100644 index eb717f99..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsFronzenFramesScenario.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// FrameMetricsFronzenFramesScenario.swift -// Fixture -// -// Created by Robert B on 20/09/2024. -// - -import Bugsnag -import BugsnagPerformance - -@objcMembers -class FrameMetricsFronzenFramesScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentRendering = true - config.internal.autoTriggerExportOnBatchSize = 3 - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "FrameMetricsFronzenFramesScenario") - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.3) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { - Thread.sleep(forTimeInterval: 0.8) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { - Thread.sleep(forTimeInterval: 0.4) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { - Thread.sleep(forTimeInterval: 1.0) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { - span.end() - } - } - } - } - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift deleted file mode 100644 index 94711781..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNoSlowFramesScenario.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// FrameMetricsNoSlowFramesScenario.swift -// Fixture -// -// Created by Robert B on 20/09/2024. -// - -import Bugsnag -import BugsnagPerformance - -@objcMembers -class FrameMetricsNoSlowFramesScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentRendering = true - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "FrameMetricsNoSlowFramesScenario") - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - span.end() - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift deleted file mode 100644 index e27ff7cd..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift -// Fixture -// -// Created by Robert B on 27/09/2024. -// - -import Bugsnag -import BugsnagPerformance - -@objcMembers -class FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentRendering = true - } - - override func run() { - let options = BugsnagPerformanceSpanOptions() - options.setInstrumentRendering(.yes) - options.setFirstClass(.no) - let span = BugsnagPerformance.startSpan(name: "FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario", options: options) - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.3) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.5) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.2) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { - span.end() - } - } - } - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift deleted file mode 100644 index 92b4e377..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSlowFramesScenario.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// FrameMetricsSlowFramesScenario.swift -// Fixture -// -// Created by Robert B on 20/09/2024. -// - -import Bugsnag -import BugsnagPerformance - -@objcMembers -class FrameMetricsSlowFramesScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentRendering = true - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "FrameMetricsSlowFramesScenario") - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.3) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.5) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.2) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { - span.end() - } - } - } - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift b/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift deleted file mode 100644 index 6b02b3f7..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/FrameMetricsSpanInstrumentRenderingOffScenario.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// FrameMetricsSpanInstrumentRenderingOffScenario.swift -// Fixture -// -// Created by Robert B on 26/09/2024. -// - -import Bugsnag -import BugsnagPerformance - -@objcMembers -class FrameMetricsSpanInstrumentRenderingOffScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentRendering = true - } - - override func run() { - let options = BugsnagPerformanceSpanOptions() - options.setInstrumentRendering(.no) - let span = BugsnagPerformance.startSpan(name: "FrameMetricsSpanInstrumentRenderingOffScenario", options: options) - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.3) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.5) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - Thread.sleep(forTimeInterval: 0.2) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { - span.end() - } - } - } - } - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift b/features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift deleted file mode 100644 index dc8245f7..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/InfraCheckMinimalBugsnagScenario.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// InfraCheckMinimalBugsnagScenario.swift -// Fixture -// -// Created by Karl Stenerud on 02.10.24. -// - -import Foundation - -// Scenario for testing the infrastructure with minimal Bugsnag involvement. -@objcMembers -class InfraCheckMinimalBugsnagScenario: Scenario { - override func run() { - logDebug("InfraCheckMinimalBugsnagScenario.run(): Calling reflect URL") - callReflectUrl(appendingToUrl: "?status=200") - logDebug("InfraCheckMinimalBugsnagScenario.run(): Opening and closing a basic span") - BugsnagPerformance.startSpan(name: "test").end() - logDebug("InfraCheckMinimalBugsnagScenario.run(): Done") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift b/features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift deleted file mode 100644 index a2e5b9bd..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/InfraCheckNoBugsnagScenario.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// InfraCheckNoBugsnagScenario.swift -// Fixture -// -// Created by Karl Stenerud on 02.10.24. -// - -import Foundation - -// Scenario for testing the infrastructure with NO Bugsnag involvement. -@objcMembers -class InfraCheckNoBugsnagScenario: Scenario { - override func configure() { - logDebug("InfraCheckNoBugsnagScenario.configure(): Doing nothing") - } - - override func startBugsnag() { - logDebug("InfraCheckNoBugsnagScenario.startBugsnag(): Doing nothing") - } - - override func run() { - logDebug("InfraCheckNoBugsnagScenario.run(): Calling reflect URL") - callReflectUrl(appendingToUrl: "?status=200") - logDebug("InfraCheckNoBugsnagScenario.run(): Done") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift b/features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift deleted file mode 100644 index 73f1a0aa..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/InitialPScenario.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// InitialPScenario.swift -// Fixture -// -// Created by Karl Stenerud on 04.01.23. -// - -import BugsnagPerformance - -@objcMembers -class InitialPScenario: Scenario { - let initialDelayBeforeSpans = 5.0 - - override func configure() { - super.configure() - config.internal.initialRecurringWorkDelay = initialDelayBeforeSpans - } - override func run() { - // Wait to receive an initial P value response. - Thread.sleep(forTimeInterval: initialDelayBeforeSpans + 0.1) - BugsnagPerformance.startSpan(name: "First").end() - } - - func step2() { - BugsnagPerformance.startSpan(name: "Second").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift deleted file mode 100644 index 467a0912..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkCallbackScenario.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// ManualNetworkCallbackScenario.swift -// Fixture -// -// Created by Karl Stenerud on 24.07.23. -// - -import Foundation - -@objcMembers -class ManualNetworkCallbackScenario: Scenario { - - public var urlSession: URLSession? - - required init(fixtureConfig: FixtureConfig) { - super.init(fixtureConfig: fixtureConfig) - self.urlSession = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main) - } - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = false - config.networkRequestCallback = { (origInfo: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo in - let info = self.filterAdminMazeRunnerNetRequests(info: origInfo) - - let testUrl = info.url - if (testUrl == nil) { - return info - } - - let url = testUrl! - - if url.absoluteString == "https://google.com" { - info.url = nil - } else if url.lastPathComponent == "changeme" { - info.url = URL(string:"changed", relativeTo:url.deletingLastPathComponent()) - } - - return info - } - } - - func query(url: URL) { - let task = self.urlSession!.dataTask(with: url) {(data, response, error) in - } - task.resume() - - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - query(url: URL(string: "https://bugsnag.com")!) - query(url: URL(string: "https://bugsnag.com/changeme")!) - query(url: URL(string: "https://google.com")!) - } -} - -extension ManualNetworkCallbackScenario : URLSessionDataDelegate { - func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift deleted file mode 100644 index 71ccb14a..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanCallbackSetToNilScenario.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// ManualNetworkSpanCallbackSetToNilScenario.swift -// Fixture -// -// Created by Robert B on 21/06/2024. -// - -import BugsnagPerformance -import os - -class MyCallbackSetToNilNetworkDelegate: NSObject { - static let shared = MyCallbackSetToNilNetworkDelegate() - public let urlConfiguration = URLSessionConfiguration.default - public var urlSession: URLSession! - - private override init() { - super.init() - self.urlSession = URLSession(configuration: urlConfiguration, delegate: self, delegateQueue: OperationQueue()) - } -} - -extension MyCallbackSetToNilNetworkDelegate : URLSessionDataDelegate { - func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) - } -} - -@objcMembers -class ManualNetworkSpanCallbackSetToNilScenario: Scenario { - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - MyCallbackSetToNilNetworkDelegate.shared.urlSession.dataTask(with: url).resume() - } - - override func configure() { - super.configure() - config.networkRequestCallback = nil - } - - override func run() { - query(string: "?status=200") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift deleted file mode 100644 index 9d01b1b0..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkSpanScenario.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// ManualNetworkSpan.swift -// Fixture -// -// Created by Karl Stenerud on 17.10.22. -// - -import BugsnagPerformance -import os - -class MyNetworkDelegate: NSObject { - static let shared = MyNetworkDelegate() - public let urlConfiguration = URLSessionConfiguration.default - public var urlSession: URLSession! - - private override init() { - super.init() - self.urlSession = URLSession(configuration: urlConfiguration, delegate: self, delegateQueue: OperationQueue()) - } -} - -extension MyNetworkDelegate : URLSessionDataDelegate { - func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) - } -} - -@objcMembers -class ManualNetworkSpanScenario: Scenario { - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - MyNetworkDelegate.shared.urlSession.dataTask(with: url).resume() - } - - override func run() { - query(string: "?status=200") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift deleted file mode 100644 index 8862b51b..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualNetworkTracePropagationScenario.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// ManualNetworkTracePropagationScenario.swift -// Fixture -// -// Created by Karl Stenerud on 29.04.24. -// - -import BugsnagPerformance - -@objcMembers -class ManualNetworkTracePropagationScenario: Scenario { - - public var urlSession: URLSession? - private var urlPaths: [String] = [] - - required init(fixtureConfig: FixtureConfig) { - super.init(fixtureConfig: fixtureConfig) - self.urlSession = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main) - } - - override func configure() { - super.configure() - config.autoInstrumentNetworkRequests = false - } - - func query(url: URL) { - let task = self.urlSession!.dataTask(with: url) {(data, response, error) in - } - task.resume() - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - urlSession!.dataTask(with: url).resume() - } - - func setCallSites(callSiteStrs: String) { - var newSites: [String] = [] - for path in splitArgs(args: callSiteStrs) { - newSites.append(String(path)) - } - urlPaths = newSites - } - - override func run() { - // Force the automatic spans to be sent in a separate trace that we will discard - waitForCurrentBatch() - for path in urlPaths { - query(string: path) - } - } -} - -extension ManualNetworkTracePropagationScenario : URLSessionDataDelegate { - func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - BugsnagPerformance.reportNetworkRequestSpan(task: task, metrics: metrics) - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift deleted file mode 100644 index b53ce168..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualParentSpanScenario.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// ManualParentSpanScenario.swift -// Fixture -// -// Created by Karl Stenerud on 01.07.24. -// - -import BugsnagPerformance - -@objcMembers -class ManualParentSpanScenario: Scenario { - - override func configure() { - super.configure() - config.internal.autoTriggerExportOnBatchSize = 1; - } - - override func run() { - let opts = BugsnagPerformanceSpanOptions() - opts.setParentContext(BugsnagPerformanceSpanContext(traceIdHi: 0x123456789abcdef0, - traceIdLo: 0xfedcba9876543210, - spanId: 0x23456789abcdef01)) - let spanChild = BugsnagPerformance.startSpan(name: "SpanChild", options: opts) - spanChild.end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift deleted file mode 100644 index 7299c33d..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualSpanBeforeStartScenario.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// ManualSpanBeforeStartScenario.swift -// Fixture -// -// Created by Nick Dowell on 04/10/2022. -// - -import BugsnagPerformance - -@objcMembers -class ManualSpanBeforeStartScenario: Scenario { - - override func startBugsnag() { - config.appVersion = "42" - config.bundleVersion = "42.42" - BugsnagPerformance.startSpan(name: "BeforeStart").end() - super.startBugsnag() - } - - override func run() { - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift deleted file mode 100644 index cb148e7c..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualSpanScenario.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// ManualSpanScenario.swift -// Fixture -// -// Created by Nick Dowell on 26/09/2022. -// - -import Bugsnag -import BugsnagPerformance - -@objcMembers -class ManualSpanScenario: Scenario { - - override func startBugsnag() { - Bugsnag.start(with: { - let config = BugsnagConfiguration.loadConfig() - config.apiKey = "12312312312312312312312312312312" - config.endpoints.notify = fixtureConfig.notifyURL.absoluteString - config.endpoints.sessions = fixtureConfig.sessionsURL.absoluteString - return config - }()) - - super.startBugsnag() - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "ManualSpanScenario") - Bugsnag.notifyError(NSError(domain: "Test", code: 0)) - span.end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift deleted file mode 100644 index 5cc25a30..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualUIViewLoadScenario.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// ManualUIViewLoadScenario.swift -// Fixture -// -// Created by Karl Stenerud on 14.02.23. -// - -import BugsnagPerformance - -@objcMembers -class ManualUIViewLoadScenario: Scenario { - - override func run() { - let controller = UIViewController() - let options = BugsnagPerformanceSpanOptions().setStartTime(Date()) - BugsnagPerformance.startViewLoadSpan(controller: controller, options: options) - BugsnagPerformance.endViewLoadSpan(controller: controller, endTime: Date()) - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift deleted file mode 100644 index 6535f66f..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadPhaseScenario.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// ManualViewLoadPhaseScenario.swift -// Fixture -// -// Created by Karl Stenerud on 24.11.23. -// - -import BugsnagPerformance - -@objcMembers -class ManualViewLoadPhaseScenario: Scenario { - override func run() { - let options = BugsnagPerformanceSpanOptions().setStartTime(Date()) - let parentSpan = BugsnagPerformance.startViewLoadSpan(name: "ManualViewLoadPhaseScenario", viewType: .swiftUI, options:options) - let phaseSpan = BugsnagPerformance.startViewLoadPhaseSpan(name: "ManualViewLoadPhaseScenario", phase: "SomePhase", parentContext: parentSpan) - phaseSpan.end() - parentSpan.end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift deleted file mode 100644 index b6568c80..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ManualViewLoadScenario.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// ManualViewLoadScenario.swift -// Fixture -// -// Created by Nick Dowell on 10/10/2022. -// - -import BugsnagPerformance - -@objcMembers -class ManualViewLoadScenario: Scenario { - - override func run() { - BugsnagPerformance.startViewLoadSpan(name: "ManualViewController", viewType: .uiKit).end() - let options = BugsnagPerformanceSpanOptions().setStartTime(Date()) - BugsnagPerformance.startViewLoadSpan(name: "ManualView", viewType: .swiftUI, options:options).end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift b/features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift deleted file mode 100644 index 523f7799..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/MaxPayloadSizeScenario.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// MaxPayloadSizeScenario.swift -// Fixture -// -// Created by Karl Stenerud on 30.06.23. -// - -import BugsnagPerformance - -@objcMembers -class MaxPayloadSizeScenario: Scenario { - - override func configure() { - super.configure() - config.internal.maxPackageContentLength = 10 - config.internal.autoTriggerExportOnBatchSize = 1 - config.internal.performWorkInterval = 1 - } - - override func run() { - BugsnagPerformance.startSpan(name: "MaxPayloadSizeScenario").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift deleted file mode 100644 index 3e1498f0..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ModifyEarlySpansScenario.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// ModifyEarlySpansScenario.swift -// Fixture -// -// Created by Karl Stenerud on 29.08.24. -// - -import BugsnagPerformance - -@objcMembers -class ModifyEarlySpansScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentAppStarts = true - config.autoInstrumentNetworkRequests = true - config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in - span.setAttribute("modifiedOnEnd", withValue: "yes") - return true - }) - - query(string: "?status=200") - } - - func query(string: String) { - let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } - - override func run() { - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h b/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h deleted file mode 100644 index 04b96419..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// ObjCURLSession.h -// Fixture -// -// Created by Karl Stenerud on 12.03.24. -// - -#import - -// Wrapper so that we can pass in nil arguments -@interface ObjCURLSession : NSObject - -+ (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url; - -@end diff --git a/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m b/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m deleted file mode 100644 index 1302ed8a..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ObjCURLSession.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// ObjCURLSession.m -// Fixture -// -// Created by Karl Stenerud on 12.03.24. -// - -#import "ObjCURLSession.h" - -@implementation ObjCURLSession - -+ (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url { - return [[NSURLSession sharedSession] dataTaskWithURL:url]; -} - -@end diff --git a/features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift b/features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift deleted file mode 100644 index 5f0660ae..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/OnEndCallbackScenario.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// OnEndCallbackScenario.swift -// Fixture -// -// Created by Karl Stenerud on 25.07.24. -// - -import BugsnagPerformance - -enum MyError: Error { - case invalid -} -@objcMembers -class OnEndCallbackScenario: Scenario { - - override func configure() { - super.configure() - - config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in - return true - }) - config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in - return span.name != "drop_me" - }) - config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in - self.errorGenerator.throwObjCException() - return true - }) - config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in - // Swift is actually auto-compiling in a catch-and-convert-to-NSError - // whenever a Swift throw crosses the Swift-ObjC membrane. But we do this - // anyway just in case something changes and this starts to break. - self.errorGenerator.throwSwiftException() - return true - }) - config.add(onSpanEndCallback: { (span: BugsnagPerformanceSpan) -> Bool in - return span.name != "drop_me_too" - }) - } - - override func run() { - BugsnagPerformance.startSpan(name: "MySpan").end() - BugsnagPerformance.startSpan(name: "drop_me").end() - BugsnagPerformance.startSpan(name: "drop_me_too").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift deleted file mode 100644 index b2108589..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ParentSpanScenario.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ParentSpanScenario.swift -// Fixture -// -// Created by Karl Stenerud on 21.02.23. -// - -import BugsnagPerformance - -@objcMembers -class ParentSpanScenario: Scenario { - - override func configure() { - super.configure() - config.internal.autoTriggerExportOnBatchSize = 2; - } - - override func run() { - let spanParent = BugsnagPerformance.startSpan(name: "SpanParent") - let spanChild = BugsnagPerformance.startSpan(name: "SpanChild") - spanChild.end() - spanParent.end(); - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift deleted file mode 100644 index acfb79bf..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ProbabilityExpiryScenario.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// ProbabilityExpiryScenario.swift -// Fixture -// -// Created by Karl Stenerud on 24.02.23. -// - -import BugsnagPerformance - -@objcMembers -class ProbabilityExpiryScenario: Scenario { - override func configure() { - super.configure() - config.internal.probabilityRequestsPauseForSeconds = 0.1 - config.internal.probabilityValueExpiresAfterSeconds = 0.1 - } - - override func run() { - // Check that another P value request gets sent when a span is started after - // the current P value has expired. - - // Give the initial P value time to expire. - Thread.sleep(forTimeInterval: 0.5) - - // Now starting a new span should trigger a new P value request. - BugsnagPerformance.startSpan(name: "myspan") - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift deleted file mode 100644 index 9b2f3c16..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ReleaseStageNotEnabledScenario.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// ReleaseStageNotEnabledScenario.swift -// Fixture -// -// Created by Robert B on 17/03/2023. -// - -import BugsnagPerformance - -@objcMembers -class ReleaseStageNotEnabledScenario: Scenario { - - override func configure() { - super.configure() - config.releaseStage = "dev" - config.enabledReleaseStages = Set(arrayLiteral: "staging", "release") - } - - override func run() { - BugsnagPerformance.startSpan(name: "Span1").end() - BugsnagPerformance.startSpan(name: "Span2").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift b/features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift deleted file mode 100644 index 309d44f0..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/RetryScenario.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// RetryScenario.swift -// Fixture -// -// Created by Karl Stenerud on 08.11.22. -// - -import BugsnagPerformance - -@objcMembers -class RetryScenario: Scenario { - - override func run() { - BugsnagPerformance.startSpan(name: "WillRetry").end() - } - - func step2() { - BugsnagPerformance.startSpan(name: "Success").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift deleted file mode 100644 index 7b2f545c..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/SamplingProbabilityZeroScenario.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// SamplingProbabilityZeroScenario.swift -// Fixture -// -// Created by Nick Dowell on 26/10/2022. -// - -import BugsnagPerformance - -@objcMembers -class SamplingProbabilityZeroScenario: Scenario { - - override func configure() { - super.configure() - config.internal.initialSamplingProbability = 0 - } - - override func startBugsnag() { - BugsnagPerformance.startSpan(name: "Pre-start").end() - super.startBugsnag() - } - - override func run() { - // Wait for the initial P value response. - waitForCurrentBatch() - BugsnagPerformance.startSpan(name: "Post-start").end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/Scenario.swift b/features/fixtures/iosXcFramework/Scenarios/Scenario.swift deleted file mode 100644 index c08de86f..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/Scenario.swift +++ /dev/null @@ -1,175 +0,0 @@ -// -// Scenario.swift -// Fixture -// -// Created by Nick Dowell on 26/09/2022. -// - -import BugsnagPerformance -import Foundation - -typealias MazerunnerMeasurement = (name: String, metrics: [String: Any]) - -class Scenario: NSObject { - let errorGenerator = ErrorGenerator() - let fixtureConfig: FixtureConfig - var config = BugsnagPerformanceConfiguration.loadConfig() - var pendingMeasurements: [MazerunnerMeasurement] = [] - - private override init() { - fatalError("do not use the default init of Scenario") - } - - required init(fixtureConfig: FixtureConfig) { - self.fixtureConfig = fixtureConfig - } - - func configure() { - logDebug("Scenario.configure()") - config.internal.clearPersistenceOnStart = true - config.internal.autoTriggerExportOnBatchSize = 1 - config.apiKey = "12312312312312312312312312312312" - config.autoInstrumentAppStarts = false - config.autoInstrumentNetworkRequests = false - config.autoInstrumentViewControllers = false - config.autoInstrumentRendering = false - config.endpoint = fixtureConfig.tracesURL - config.networkRequestCallback = filterAdminMazeRunnerNetRequests - } - - func urlHasAnyPrefixIn(url: URL, prefixes: [URL]) -> Bool { - for prefix in prefixes { - if url.absoluteString.hasPrefix(prefix.absoluteString) { - return true - } - } - return false - } - - func filterNetRequestsContainingPrefixes(info: BugsnagPerformanceNetworkRequestInfo, - prefixes: [URL]) -> BugsnagPerformanceNetworkRequestInfo { - if info.url == nil { - return info - } - - if urlHasAnyPrefixIn(url: info.url!, prefixes: prefixes) { - info.url = nil - } - return info - } - - func filterAllMazeRunnerNetRequests(info: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo { - return filterNetRequestsContainingPrefixes(info: info, prefixes: fixtureConfig.allMazeRunnerURLs) - } - - func filterAdminMazeRunnerNetRequests(info: BugsnagPerformanceNetworkRequestInfo) -> BugsnagPerformanceNetworkRequestInfo { - // Everything except reflectURL - return filterNetRequestsContainingPrefixes(info: info, prefixes: fixtureConfig.adminMazeRunnerURLs) - } - - func clearPersistentData() { - logDebug("Scenario.clearPersistentData()") - UserDefaults.standard.removePersistentDomain( - forName: Bundle.main.bundleIdentifier!) - let cachesUrl = FileManager.default.urls(for: .cachesDirectory, in: .allDomainsMask).first! - for file in try! FileManager.default.contentsOfDirectory(at: cachesUrl, includingPropertiesForKeys: nil) { - try! FileManager.default.removeItem(at: file) - } - } - - func splitArgs(args: String) -> [String] { - return args.split(separator: ",").map(String.init) - } - - func configureBugsnag(path: String, value: String) { - logDebug("Scenario.configureBugsnag()") - switch path { - case "propagateTraceParentToUrlsMatching": - var regexes: Set = [] - for reStr in splitArgs(args: value) { - regexes.insert(try! NSRegularExpression(pattern: reStr)) - } - config.tracePropagationUrls = regexes - break - default: - fatalError("\(path): Unknown configuration path") - } - } - - func startBugsnag() { - logDebug("Scenario.startBugsnag()") - performAndReportDuration({ - BugsnagPerformance.start(configuration: config) - }, measurement: "start") - } - - func run() { - logError("Scenario.run() has not been overridden!") - fatalError("To be implemented by subclass") - } - - func enterBackground(forSeconds seconds: Int) { -#if canImport(UIKit) - var documentName = "background_forever.html" - if (seconds >= 0) { - documentName = "background_for_\(seconds)_sec.html" - } - let url = self.fixtureConfig.docsURL.appendingPathComponent(documentName) - logInfo("Backgrounding the app using \(documentName)") - UIApplication.shared.open(url, options: [:]) { success in - logInfo("Opened \(url) \(success ? "successfully" : "unsuccessfully")"); - } -#else - fatalError("This e2e test requires UIApplication, which is not available on this platform.") -#endif - } - - func reportMeasurements() { - pendingMeasurements.forEach { measurement in - report(metrics: measurement.metrics, name: measurement.name) - } - pendingMeasurements = [] - } - - func waitForCurrentBatch() { - logDebug("Scenario.waitForCurrentBatch()") - // Wait long enough to allow the current batch to be packaged and sent - Thread.sleep(forTimeInterval: 1.0) - } - - func performAndReportDuration(_ body: () -> Void, measurement: String) { - let startDate = Date() - body() - let endDate = Date() - - let calendar = Calendar.current - let duration = calendar.dateComponents([.nanosecond], from: startDate, to: endDate) - let metrics = ["duration.nanos": "\(duration.nanosecond ?? 0)"] - pendingMeasurements.append((name: measurement, metrics: metrics)) - } - - func report(metrics: [String: Any], name: String) { - var request = URLRequest(url: fixtureConfig.metricsURL) - request.httpMethod = "POST" - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - - var body = metrics - body["metric.measurement"] = name - body["device.manufacturer"] = "Apple" - body["device.model"] = UIDevice.current.model - body["os.name"] = UIDevice.current.systemName - body["os.version"] = UIDevice.current.systemVersion - let jsonData = try? JSONSerialization.data(withJSONObject: body) - guard let jsonData = jsonData else { - return - } - request.httpBody = jsonData - - URLSession.shared.dataTask(with: request).resume() - } - - func callReflectUrl(appendingToUrl: String) { - let url = URL(string: appendingToUrl, relativeTo: fixtureConfig.reflectURL)! - URLSession.shared.dataTask(with: url).resume() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift deleted file mode 100644 index 28c335e1..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/SetAttributeCountLimitScenario.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// SetAttributeCountLimitScenario.swift -// Fixture -// -// Created by Karl Stenerud on 16.09.24. -// - -import BugsnagPerformance - -@objcMembers -class SetAttributeCountLimitScenario: Scenario { - - override func configure() { - super.configure() - config.attributeCountLimit = 3 - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "MySpan") - span.setAttribute("a", withValue: "12345678901") - span.end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift deleted file mode 100644 index c1cdf120..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/SetAttributesScenario.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// SetAttributesScenario.swift -// Fixture -// -// Created by Karl Stenerud on 19.07.24. -// - -import BugsnagPerformance - -@objcMembers -class SetAttributesScenario: Scenario { - - override func run() { - let span = BugsnagPerformance.startSpan(name: "MySpan") - span.setAttribute("a", withValue: "xyz") - span.setAttribute("b", withValue: "abc") - span.setAttribute("b", withValue: nil) - span.setAttribute("c", withValue: ["array_0", 1, true, 1.5]) - span.setAttribute("d", withValue: URL(string: "https://bugsnag.com")) - span.setAttribute("e", withValue: [{}]) - span.setAttribute("f", withValue: [[]]) - span.setAttribute("x", withValue: []) - span.end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift b/features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift deleted file mode 100644 index d8b7344f..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/SetAttributesWithLimitsScenario.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// SetAttributesWithLimitsScenario.swift -// Fixture -// -// Created by Karl Stenerud on 13.09.24. -// - -import BugsnagPerformance - -@objcMembers -class SetAttributesWithLimitsScenario: Scenario { - - override func configure() { - super.configure() - config.attributeStringValueLimit = 10 - config.attributeArrayLengthLimit = 3 - } - - override func run() { - let span = BugsnagPerformance.startSpan(name: "MySpan") - span.setAttribute("a", withValue: "12345678901") - span.setAttribute("b", withValue: [1, 2, 3, 4]) - span.end() - } -} diff --git a/features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift b/features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift deleted file mode 100644 index da35a579..00000000 --- a/features/fixtures/iosXcFramework/Scenarios/ViewDidLoadDoesntTriggerScenario.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// ViewDidLoadDoesntTriggerScenario.swift -// Fixture -// -// Created by Karl Stenerud on 21.03.24. -// - -import UIKit - -@objcMembers -class ViewDidLoadDoesntTriggerScenario: Scenario { - - override func configure() { - super.configure() - config.autoInstrumentViewControllers = true - } - - override func run() { - let vc = ViewDidLoadDoesntTriggerScenario_ViewController() - - // Simulate showing a view, except that viewDidAppear doesn't trigger - vc.loadView() - vc.viewDidLoad() - vc.viewWillAppear(false) - vc.viewWillLayoutSubviews() - vc.viewDidLayoutSubviews() - } -} - -class ViewDidLoadDoesntTriggerScenario_ViewController: UIViewController { - - override func loadView() { - let label = UILabel() - label.backgroundColor = .white - label.textAlignment = .center - label.text = String(describing: type(of: self)) - view = label - } -} diff --git a/features/fixtures/iosXcFramework/build.sh b/features/fixtures/iosXcFramework/build.sh deleted file mode 100755 index 9beb48a9..00000000 --- a/features/fixtures/iosXcFramework/build.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -xcodebuild -version | awk 'NR==1{x=$0}END{print x" "$NF}' -echo "$(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -m)" - -set -euxo pipefail - -disable_swizzling_key='' -disable_swizzling_value='' -swizzling_premain_key='' -swizzling_premain_value='' - -fixture_name='Fixture' -for ((i=1;i<=$#;i++)); -do - if [ ${!i} = '--fixtureName' ] - then ((i++)) - fixture_name=${!i}; - fi - if [ ${!i} = '--disableSwizzling' ] - then - disable_swizzling_key='disableSwizzling' - disable_swizzling_value='\t\t\t\t\t\t\t\t\t\t'; - fi - if [ ${!i} = '--swizzlingPremain' ] - then - swizzling_premain_key='swizzleViewLoadPreMain' - swizzling_premain_value='\t\t\t\t\t\t\t\t\t' - fi -done; - -unzip -q BugsnagPerformance.xcframework.zip -unzip -q BugsnagPerformanceSwift.xcframework.zip - -cp $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.template.plist $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist - -sed -i '' -e 's|DISABLE_SWIZZLING_KEY|'$disable_swizzling_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist -sed -i '' -e 's|DISABLE_SWIZZLING_VALUE|'$disable_swizzling_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist -sed -i '' -e 's|SWIZZLING_PREMAIN_KEY|'$swizzling_premain_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist -sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist - -cd $(dirname "${BASH_SOURCE[0]}") - -xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -scheme Fixture archive -allowProvisioningUpdates -quiet - -xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -exportArchive -exportPath output -exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates -quiet - -mv ./output/Fixture.ipa ./output/$fixture_name.ipa - -#rm ./Fixture/Info.plist diff --git a/features/fixtures/iosXcFramework/utils/Logging.h b/features/fixtures/iosXcFramework/utils/Logging.h deleted file mode 100644 index 374ba6d3..00000000 --- a/features/fixtures/iosXcFramework/utils/Logging.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Logging.h -// iOSTestApp -// -// Created by Karl Stenerud on 02.11.23. -// Copyright © 2023 Bugsnag. All rights reserved. -// - -#import - -void logDebugObjC(NSString *format, ...); -void logInfoObjC(NSString *format, ...); -void logWarnObjC(NSString *format, ...); -void logErrorObjC(NSString *format, ...); - -//#define logInfo(FMT, ...) logInfoObjC(FMT, __VA_ARGS__) -//#define logWarn(FMT, ...) logWarnObjC(FMT, __VA_ARGS__) -//#define logError(FMT, ...) logErrorObjC(FMT, __VA_ARGS__) - -#define logDebug logDebugObjC -#define logInfo logInfoObjC -#define logWarn logWarnObjC -#define logError logErrorObjC - -void logInternal(const char* level, NSString *format, va_list args); diff --git a/features/fixtures/iosXcFramework/utils/Logging.m b/features/fixtures/iosXcFramework/utils/Logging.m deleted file mode 100644 index 742201d7..00000000 --- a/features/fixtures/iosXcFramework/utils/Logging.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// Logging.m -// iOSTestApp -// -// Created by Karl Stenerud on 02.11.23. -// Copyright © 2023 Bugsnag. All rights reserved. -// - -#import "Logging.h" - -extern void bsg_i_kslog_logCBasic(const char *fmt, ...) __printflike(1, 2); - -void logInternal(const char* level, NSString *format, va_list args) { - NSString *formatted = [[NSString alloc] initWithFormat:format arguments:args]; - NSString *fullMessage = [NSString stringWithFormat:@"bugsnagci %s: %@", level, formatted]; - - NSLog(@"%@", fullMessage); - bsg_i_kslog_logCBasic("%s", - [[NSString stringWithFormat:@"%@ %@", - [NSDate date], fullMessage] - cStringUsingEncoding:NSUTF8StringEncoding]); - -} - -void logDebugObjC(NSString *format, ...) { - va_list args; - va_start(args, format); - logInternal("debug", format, args); - va_end(args); -} - -void logInfoObjC(NSString *format, ...) { - va_list args; - va_start(args, format); - logInternal("info", format, args); - va_end(args); -} - -void logWarnObjC(NSString *format, ...) { - va_list args; - va_start(args, format); - logInternal("warn", format, args); - va_end(args); -} - -void logErrorObjC(NSString *format, ...) { - va_list args; - va_start(args, format); - logInternal("error", format, args); - va_end(args); -} diff --git a/features/fixtures/iosXcFramework/utils/Logging.swift b/features/fixtures/iosXcFramework/utils/Logging.swift deleted file mode 100644 index 92538e87..00000000 --- a/features/fixtures/iosXcFramework/utils/Logging.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// logging.swift -// Fixture -// -// Created by Karl Stenerud on 02.11.23. -// Copyright © 2023 Bugsnag. All rights reserved. -// - -import Foundation - -//public func logDebug(_ format: String) { -// logDebug(format: format, args: 0 as Int) -//} -public func logDebug(_ format: String, _ args: CVarArg...) { - withVaList(args) { - logInternal("debug", format, $0) - } -} - -//public func logInfo(_ format: String) { -// logInfo(format: format, args: 0 as Int) -//} -public func logInfo(_ format: String, _ args: CVarArg...) { - withVaList(args) { - logInternal("info", format, $0) - } -} - -//public func logWarn(_ format: String) { -// logWarn(format: format, args: 0 as Int) -//} -public func logWarn(_ format: String, _ args: CVarArg...) { - withVaList(args) { - logInternal("warn", format, $0) - } -} - -//public func logError(_ format: String) { -// logError(format: format, args: 0 as Int) -//} -public func logError(_ format: String, _ args: CVarArg...) { - withVaList(args) { - logInternal("error", format, $0) - } -} From 5597b5e428e9e480e01c424dbbd0458494286d65 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 10:52:09 +0100 Subject: [PATCH 34/51] remove old fixture --- .buildkite/pipeline.yml | 16 ++++++++-------- docker-compose.yml | 16 ---------------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index a1a8add6..47cefe8b 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -253,8 +253,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb-xcframework - run: maze-runner-bb-xcframework + pull: maze-runner-bb + run: maze-runner-bb service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" @@ -287,8 +287,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb-xcframework - run: maze-runner-bb-xcframework + pull: maze-runner-bb + run: maze-runner-bb service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" @@ -321,8 +321,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb-xcframework - run: maze-runner-bb-xcframework + pull: maze-runner-bb + run: maze-runner-bb service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" @@ -355,8 +355,8 @@ steps: - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb-xcframework - run: maze-runner-bb-xcframework + pull: maze-runner-bb + run: maze-runner-bb service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" diff --git a/docker-compose.yml b/docker-compose.yml index edec94d4..d535a7f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,22 +38,6 @@ services: - /var/run/docker.sock:/var/run/docker.sock - ./reports/:/app/reports/ - maze-runner-bb-xcframework: - image: 855461928731.dkr.ecr.us-west-1.amazonaws.com/maze-runner-releases:latest-v9-cli - environment: - <<: *common-environment - BITBAR_USERNAME: - BITBAR_ACCESS_KEY: - ports: - - "9000-9499:9339" - - "9000-9499:9340" - volumes: - - ./features/fixtures/iosXcFramework/output:/app/build - - ./features/:/app/features/ - - ./maze_output:/app/maze_output - - /var/run/docker.sock:/var/run/docker.sock - - ./reports/:/app/reports/ - maze-runner-bs: image: 855461928731.dkr.ecr.us-west-1.amazonaws.com/maze-runner-releases:latest-v9-cli environment: From a272244bdcef1fd1b7ca43e6e9b11f861bcd74ac Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 13:19:16 +0100 Subject: [PATCH 35/51] update xcframework fixture scheme --- .../xcschemes/FixtureXcFramework.xcscheme | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme b/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme index 00ceee46..cbbb552d 100644 --- a/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme @@ -43,6 +43,16 @@ debugDocumentVersioning = "YES" debugServiceExtension = "internal" allowLocationSimulation = "YES"> + + + + + + + + From a31682d1e091ae4a5d2fe25a26eb993a9bf0efd8 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 14:15:54 +0100 Subject: [PATCH 36/51] update xcframework fixture --- .../fixtures/ios/Fixture/ErrorGenerator.m | 2 +- .../project.pbxproj | 762 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcschemes/FixtureXcFramework.xcscheme | 93 --- features/fixtures/ios/build.sh | 24 +- features/fixtures/ios/build_xcframework.sh | 37 +- 7 files changed, 8 insertions(+), 925 deletions(-) delete mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj delete mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme diff --git a/features/fixtures/ios/Fixture/ErrorGenerator.m b/features/fixtures/ios/Fixture/ErrorGenerator.m index b3a4d9a6..5ca45242 100644 --- a/features/fixtures/ios/Fixture/ErrorGenerator.m +++ b/features/fixtures/ios/Fixture/ErrorGenerator.m @@ -6,7 +6,7 @@ // #import "ErrorGenerator.h" -#import "FIXTURENAME-Swift.h" +#import "Fixture-Swift.h" @interface ErrorGenerator () diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj deleted file mode 100644 index 95ab3a89..00000000 --- a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj +++ /dev/null @@ -1,762 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 55; - objects = { - -/* Begin PBXBuildFile section */ - 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */; }; - 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */ = {isa = PBXBuildFile; productRef = 01A414C72912CA18003152A4 /* Bugsnag */; }; - 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */; }; - 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */; }; - 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */; }; - 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */; }; - 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */; }; - 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */; }; - 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */; }; - 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */; }; - 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */; }; - 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */; }; - 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */; }; - 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC428E1AF9600D1F239 /* Scenario.swift */; }; - 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC628E1D5A400D1F239 /* Fixture.swift */; }; - 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */; }; - 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */; }; - 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */; }; - 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */; }; - 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */; }; - 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */; }; - 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3B2B0607F300F4F776 /* Logging.swift */; }; - 09637A3F2B06082200F4F776 /* Logging.m in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3E2B06082200F4F776 /* Logging.m */; }; - 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */; }; - 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */; }; - 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A442B0B883B00F4F776 /* FixtureConfig.swift */; }; - 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */; }; - 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */; }; - 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */; }; - 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */; }; - 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */; }; - 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */; }; - 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */; }; - 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */; }; - 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */; }; - 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */; }; - 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */; }; - 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */; }; - 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */; }; - 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */; }; - 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */; }; - 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */; }; - 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */; }; - 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 09F025062BA08804007D9F73 /* ObjCURLSession.m */; }; - 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */; }; - 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */; }; - 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; }; - 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; }; - 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */; }; - 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */; }; - 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */; }; - 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */; }; - 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */; }; - 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */; }; - 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */; }; - 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */; }; - 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */; }; - 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */; }; - 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */; }; - 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */; }; - 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */; }; - 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */; }; - 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */; }; - CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */; }; - CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */; }; - CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */; }; - CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */; }; - CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */; }; - CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */; }; - CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */; }; - CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */; }; - CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */ = {isa = PBXBuildFile; fileRef = CBC90C4229C466BD00280884 /* ForceUBSan.m */; }; - CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */; }; - CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */; }; - CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */; }; - CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */; }; - CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */; }; - CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */; }; - CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */; }; - CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */; }; - CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */; }; - CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF62108291A4F47004BEE0B /* RetryScenario.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 55155E072CBD1DB100B5B3FE /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 55155E0A2CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */, - 55155E062CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentViewLoadScenario.swift; sourceTree = ""; }; - 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SamplingProbabilityZeroScenario.swift; sourceTree = ""; }; - 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAppStartsScenario.swift; sourceTree = ""; }; - 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadScenario.swift; sourceTree = ""; }; - 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanBeforeStartScenario.swift; sourceTree = ""; }; - 01FE4DA528E1AEBD00D1F239 /* FixtureXcFramework.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FixtureXcFramework.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 01FE4DAF28E1AEBD00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 01FE4DB428E1AEBF00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 01FE4DB628E1AEBF00D1F239 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "bugsnag-cocoa-performance"; path = ../../..; sourceTree = ""; }; - 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanScenario.swift; sourceTree = ""; }; - 01FE4DC428E1AF9600D1F239 /* Scenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scenario.swift; sourceTree = ""; }; - 01FE4DC628E1D5A400D1F239 /* Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fixture.swift; sourceTree = ""; }; - 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartScenario.swift; sourceTree = ""; }; - 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartDisabledScenario.swift; sourceTree = ""; }; - 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkCallbackScenario.swift; sourceTree = ""; }; - 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplexViewScenario.swift; sourceTree = ""; }; - 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualParentSpanScenario.swift; sourceTree = ""; }; - 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesScenario.swift; sourceTree = ""; }; - 09637A3B2B0607F300F4F776 /* Logging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; - 09637A3D2B06082200F4F776 /* Logging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Logging.h; sourceTree = ""; }; - 09637A3E2B06082200F4F776 /* Logging.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Logging.m; sourceTree = ""; }; - 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandReaderThread.swift; sourceTree = ""; }; - 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MazeRunnerCommand.swift; sourceTree = ""; }; - 09637A442B0B883B00F4F776 /* FixtureConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixtureConfig.swift; sourceTree = ""; }; - 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIDeferredScenario.swift; sourceTree = ""; }; - 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNullNetworkCallbackScenario.swift; sourceTree = ""; }; - 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIScenario.swift; sourceTree = ""; }; - 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadPhaseScenario.swift; sourceTree = ""; }; - 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckNoBugsnagScenario.swift; sourceTree = ""; }; - 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckMinimalBugsnagScenario.swift; sourceTree = ""; }; - 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnEndCallbackScenario.swift; sourceTree = ""; }; - 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ErrorGenerator.h; sourceTree = ""; }; - 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ErrorGenerator.m; sourceTree = ""; }; - 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftErrorGenerator.swift; sourceTree = ""; }; - 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAVAssetScenario.swift; sourceTree = ""; }; - 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkTracePropagationScenario.swift; sourceTree = ""; }; - 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkTracePropagationScenario.swift; sourceTree = ""; }; - 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkCallbackScenario.swift; sourceTree = ""; }; - 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EarlySpanOnEndScenario.swift; sourceTree = ""; }; - 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesWithLimitsScenario.swift; sourceTree = ""; }; - 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributeCountLimitScenario.swift; sourceTree = ""; }; - 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModifyEarlySpansScenario.swift; sourceTree = ""; }; - 09F025052BA08804007D9F73 /* ObjCURLSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ObjCURLSession.h; sourceTree = ""; }; - 09F025062BA08804007D9F73 /* ObjCURLSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ObjCURLSession.m; sourceTree = ""; }; - 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNullURLScenario.swift; sourceTree = ""; }; - 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDidLoadDoesntTriggerScenario.swift; sourceTree = ""; }; - 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformance.xcframework; path = ../../../BugsnagPerformance.xcframework; sourceTree = ""; }; - 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformanceSwift.xcframework; path = ../../../BugsnagPerformanceSwift.xcframework; sourceTree = ""; }; - 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentGenericViewLoadScenario.swift; sourceTree = ""; }; - 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentPreLoadedViewLoadScenario.swift; sourceTree = ""; }; - 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentTabViewLoadScenario.swift; sourceTree = ""; }; - 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNavigationViewLoadScenario.swift; sourceTree = ""; }; - 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsFronzenFramesScenario.swift; sourceTree = ""; }; - 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSlowFramesScenario.swift; sourceTree = ""; }; - 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNoSlowFramesScenario.swift; sourceTree = ""; }; - 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseStageNotEnabledScenario.swift; sourceTree = ""; }; - 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsAutoInstrumentRenderingOffScenario.swift; sourceTree = ""; }; - 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSpanInstrumentRenderingOffScenario.swift; sourceTree = ""; }; - 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift; sourceTree = ""; }; - 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDataOverrideScenario.swift; sourceTree = ""; }; - 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityOneScenario.swift; sourceTree = ""; }; - 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityZeroScenario.swift; sourceTree = ""; }; - 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanCallbackSetToNilScenario.swift; sourceTree = ""; }; - CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingWithTimeoutScenario.swift; sourceTree = ""; }; - CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPScenario.swift; sourceTree = ""; }; - CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "BugsnagPerformanceConfiguration+Private.h"; path = "../../../../Sources/BugsnagPerformance/Private/BugsnagPerformanceConfiguration+Private.h"; sourceTree = ""; }; - CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentFileURLRequestScenario.swift; sourceTree = ""; }; - CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkBadAddressScenario.swift; sourceTree = ""; }; - CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkWithParentScenario.swift; sourceTree = ""; }; - CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundForegroundScenario.swift; sourceTree = ""; }; - CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualUIViewLoadScenario.swift; sourceTree = ""; }; - CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Fixture-Bridging-Header.h"; sourceTree = ""; }; - CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingScenario.swift; sourceTree = ""; }; - CBC90C4129C466BD00280884 /* ForceUBSan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForceUBSan.h; sourceTree = ""; }; - CBC90C4229C466BD00280884 /* ForceUBSan.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ForceUBSan.m; sourceTree = ""; }; - CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassNoScenario.swift; sourceTree = ""; }; - CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassYesScenario.swift; sourceTree = ""; }; - CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSubViewLoadScenario.swift; sourceTree = ""; }; - CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNoParentScenario.swift; sourceTree = ""; }; - CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProbabilityExpiryScenario.swift; sourceTree = ""; }; - CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParentSpanScenario.swift; sourceTree = ""; }; - CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanScenario.swift; sourceTree = ""; }; - CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkMultiple.swift; sourceTree = ""; }; - CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaxPayloadSizeScenario.swift; sourceTree = ""; }; - CBF62108291A4F47004BEE0B /* RetryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryScenario.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 01FE4DA228E1AEBD00D1F239 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */, - 55155E052CBD1DB100B5B3FE /* BugsnagPerformance.xcframework in Frameworks */, - 55155E092CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 01FE4D9C28E1AEBD00D1F239 = { - isa = PBXGroup; - children = ( - 09637A3A2B0607DA00F4F776 /* utils */, - 01FE4DA728E1AEBD00D1F239 /* Fixture */, - 01FE4DC128E1AF0700D1F239 /* Scenarios */, - 01FE4DBC28E1AED000D1F239 /* Packages */, - 01FE4DA628E1AEBD00D1F239 /* Products */, - 01FE4DBE28E1AEDF00D1F239 /* Frameworks */, - ); - sourceTree = ""; - }; - 01FE4DA628E1AEBD00D1F239 /* Products */ = { - isa = PBXGroup; - children = ( - 01FE4DA528E1AEBD00D1F239 /* FixtureXcFramework.app */, - ); - name = Products; - sourceTree = ""; - }; - 01FE4DA728E1AEBD00D1F239 /* Fixture */ = { - isa = PBXGroup; - children = ( - 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */, - 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */, - CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */, - 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */, - CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */, - 01FE4DC628E1D5A400D1F239 /* Fixture.swift */, - 01FE4DB628E1AEBF00D1F239 /* Info.plist */, - 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */, - 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */, - 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */, - 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */, - 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */, - 09637A442B0B883B00F4F776 /* FixtureConfig.swift */, - 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */, - 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */, - 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */, - ); - path = Fixture; - sourceTree = ""; - }; - 01FE4DBC28E1AED000D1F239 /* Packages */ = { - isa = PBXGroup; - children = ( - 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */, - ); - name = Packages; - sourceTree = ""; - }; - 01FE4DBE28E1AEDF00D1F239 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 55155E082CBD1E4200B5B3FE /* BugsnagPerformanceSwift.xcframework */, - 55155E042CBD1DB100B5B3FE /* BugsnagPerformance.xcframework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 01FE4DC128E1AF0700D1F239 /* Scenarios */ = { - isa = PBXGroup; - children = ( - 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */, - 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */, - 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */, - CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */, - 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */, - 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */, - CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */, - 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */, - CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */, - CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */, - 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */, - 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */, - 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */, - 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */, - CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */, - 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */, - 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */, - CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */, - 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */, - 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */, - 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */, - 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */, - CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */, - CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */, - CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */, - 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */, - 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */, - CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */, - CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */, - 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */, - 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */, - CBC90C4129C466BD00280884 /* ForceUBSan.h */, - CBC90C4229C466BD00280884 /* ForceUBSan.m */, - 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */, - 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */, - 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */, - 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */, - 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */, - 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */, - 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */, - 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */, - CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */, - 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */, - 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */, - CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */, - 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */, - 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */, - 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */, - 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */, - CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */, - 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */, - 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */, - CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */, - 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */, - 09F025052BA08804007D9F73 /* ObjCURLSession.h */, - 09F025062BA08804007D9F73 /* ObjCURLSession.m */, - 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */, - CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */, - CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */, - 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */, - CBF62108291A4F47004BEE0B /* RetryScenario.swift */, - 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */, - 01FE4DC428E1AF9600D1F239 /* Scenario.swift */, - 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */, - 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */, - 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */, - 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */, - ); - path = Scenarios; - sourceTree = ""; - }; - 09637A3A2B0607DA00F4F776 /* utils */ = { - isa = PBXGroup; - children = ( - 09637A3B2B0607F300F4F776 /* Logging.swift */, - 09637A3D2B06082200F4F776 /* Logging.h */, - 09637A3E2B06082200F4F776 /* Logging.m */, - ); - path = utils; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 01FE4DA428E1AEBD00D1F239 /* FixtureXcFramework */ = { - isa = PBXNativeTarget; - buildConfigurationList = 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "FixtureXcFramework" */; - buildPhases = ( - 01FE4DA128E1AEBD00D1F239 /* Sources */, - 01FE4DA228E1AEBD00D1F239 /* Frameworks */, - 01FE4DA328E1AEBD00D1F239 /* Resources */, - 55155E072CBD1DB100B5B3FE /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FixtureXcFramework; - packageProductDependencies = ( - 01A414C72912CA18003152A4 /* Bugsnag */, - ); - productName = Fixture; - productReference = 01FE4DA528E1AEBD00D1F239 /* FixtureXcFramework.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 01FE4D9D28E1AEBD00D1F239 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1400; - LastUpgradeCheck = 1400; - TargetAttributes = { - 01FE4DA428E1AEBD00D1F239 = { - CreatedOnToolsVersion = 14.0; - LastSwiftMigration = 1400; - }; - }; - }; - buildConfigurationList = 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "FixtureXcFramework" */; - compatibilityVersion = "Xcode 13.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 01FE4D9C28E1AEBD00D1F239; - packageReferences = ( - 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */, - ); - productRefGroup = 01FE4DA628E1AEBD00D1F239 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 01FE4DA428E1AEBD00D1F239 /* FixtureXcFramework */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 01FE4DA328E1AEBD00D1F239 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */, - 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */, - 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 01FE4DA128E1AEBD00D1F239 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */, - CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */, - 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */, - 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */, - 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */, - 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */, - 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */, - 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */, - 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */, - 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */, - 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */, - 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */, - 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */, - CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */, - 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */, - 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */, - 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */, - CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */, - 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */, - 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */, - 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */, - 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */, - 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */, - 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */, - 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */, - 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */, - CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */, - 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */, - 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */, - 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */, - 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */, - 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */, - 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */, - 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */, - CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */, - CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */, - 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */, - 09637A3F2B06082200F4F776 /* Logging.m in Sources */, - CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */, - 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */, - CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */, - 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */, - 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */, - 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */, - 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */, - 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */, - 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */, - CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */, - 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */, - 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */, - CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */, - CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */, - 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */, - CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */, - 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */, - 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */, - CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */, - 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */, - 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */, - 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */, - 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */, - 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */, - 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */, - CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */, - 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */, - 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */, - CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */, - CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */, - 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */, - 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */, - CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */, - 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */, - 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */, - 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */, - 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */, - CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 01FE4DAF28E1AEBD00D1F239 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 01FE4DB428E1AEBF00D1F239 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 01FE4DB728E1AEBF00D1F239 /* 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++20"; - 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 = ( - "DEBUG=1", - "$(inherited)", - ); - 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; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 01FE4DB828E1AEBF00D1F239 /* 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++20"; - 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; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 01FE4DBA28E1AEBF00D1F239 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 7W9PZ27Y5F; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Fixture/Info.plist; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 01FE4DBB28E1AEBF00D1F239 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 7W9PZ27Y5F; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = Fixture/Info.plist; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformancexcframework; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "FixtureXcFramework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 01FE4DB728E1AEBF00D1F239 /* Debug */, - 01FE4DB828E1AEBF00D1F239 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "FixtureXcFramework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 01FE4DBA28E1AEBF00D1F239 /* Debug */, - 01FE4DBB28E1AEBF00D1F239 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/bugsnag/bugsnag-cocoa"; - requirement = { - branch = master; - kind = branch; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 01A414C72912CA18003152A4 /* Bugsnag */ = { - isa = XCSwiftPackageProductDependency; - package = 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */; - productName = Bugsnag; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 01FE4D9D28E1AEBD00D1F239 /* Project object */; -} diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme b/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme deleted file mode 100644 index cbbb552d..00000000 --- a/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/FixtureXcFramework.xcscheme +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/features/fixtures/ios/build.sh b/features/fixtures/ios/build.sh index 6ce46812..9e6f3623 100755 --- a/features/fixtures/ios/build.sh +++ b/features/fixtures/ios/build.sh @@ -36,31 +36,11 @@ sed -i '' -e 's|DISABLE_SWIZZLING_VALUE|'$disable_swizzling_value'|' $(dirname " sed -i '' -e 's|SWIZZLING_PREMAIN_KEY|'$swizzling_premain_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist -sed -i '' -e 's|FIXTURENAME-Swift.h|Fixture-Swift.h|' $(dirname "${BASH_SOURCE[0]}")/Fixture/ErrorGenerator.m - cd $(dirname "${BASH_SOURCE[0]}") -echo "--- Fixture: xcodebuild archive" - -xcrun xcodebuild \ - -scheme Fixture \ - -project Fixture.xcodeproj \ - -destination generic/platform=iOS \ - -configuration Release \ - -archivePath archive/Fixture.xcarchive \ - -allowProvisioningUpdates \ - -quiet \ - archive - -echo "--- Fixture: xcodebuild -exportArchive" +xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -scheme Fixture -project Fixture.xcodeproj archive -allowProvisioningUpdates -quiet -xcrun xcodebuild \ - -exportArchive \ - -archivePath archive/Fixture.xcarchive \ - -destination generic/platform=iOS \ - -exportPath output/ \ - -quiet \ - -exportOptionsPlist exportOptions.plist +xcodebuild -destination generic/platform=iOS -archivePath Fixture.xcarchive -exportArchive -exportPath output -exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates -quiet mv ./output/Fixture.ipa ./output/$fixture_name.ipa diff --git a/features/fixtures/ios/build_xcframework.sh b/features/fixtures/ios/build_xcframework.sh index f18402ce..ddf93346 100755 --- a/features/fixtures/ios/build_xcframework.sh +++ b/features/fixtures/ios/build_xcframework.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash xcodebuild -version | awk 'NR==1{x=$0}END{print x" "$NF}' echo "$(sw_vers -productName) $(sw_vers -productVersion) $(sw_vers -buildVersion) $(uname -m)" @@ -29,9 +29,6 @@ do fi done; -unzip -q BugsnagPerformance.xcframework.zip -unzip -q BugsnagPerformanceSwift.xcframework.zip - cp $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.template.plist $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist sed -i '' -e 's|DISABLE_SWIZZLING_KEY|'$disable_swizzling_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist @@ -39,36 +36,12 @@ sed -i '' -e 's|DISABLE_SWIZZLING_VALUE|'$disable_swizzling_value'|' $(dirname " sed -i '' -e 's|SWIZZLING_PREMAIN_KEY|'$swizzling_premain_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist sed -i '' -e 's|SWIZZLING_PREMAIN_VALUE|'$swizzling_premain_value'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist -sed -i '' -e 's|FIXTURENAME-Swift.h|FixtureXcFramework-Swift.h|' $(dirname "${BASH_SOURCE[0]}")/Fixture/ErrorGenerator.m - - cd $(dirname "${BASH_SOURCE[0]}") -echo "--- FixtureXcFramework: xcodebuild archive" - -# -# Using CLANG_ENABLE_MODULES=NO to surface build errors -# https://github.com/bugsnag/bugsnag-cocoa/pull/1284 -# - -xcrun xcodebuild \ - -scheme FixtureXcFramework \ - -project FixtureXcFramework.xcodeproj \ - -destination generic/platform=iOS \ - -configuration Release \ - -archivePath archive/FixtureXcFramework.xcarchive \ - -allowProvisioningUpdates \ - -quiet \ - archive +xcodebuild -destination generic/platform=iOS -archivePath $fixture_name.xcarchive -scheme Fixture -project FixtureXcFramework.xcodeproj archive -allowProvisioningUpdates -quiet -echo "--- FixtureXcFramework: xcodebuild -exportArchive" +xcodebuild -destination generic/platform=iOS -archivePath $fixture_name.xcarchive -exportArchive -exportPath output -exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates -quiet -xcrun xcodebuild \ - -exportArchive \ - -archivePath archive/FixtureXcFramework.xcarchive \ - -destination generic/platform=iOS \ - -exportPath output/ \ - -quiet \ - -exportOptionsPlist exportOptions.plist +mv ./output/Fixture.ipa ./output/$fixture_name.ipa -mv ./output/FixtureXcFramework.ipa ./output/$fixture_name.ipa +#rm ./Fixture/Info.plist From 2351adb8b74abc944c841dc2586098845b6d0bd6 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 14:34:53 +0100 Subject: [PATCH 37/51] update xcframework fixture --- .../project.pbxproj | 762 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Fixture.xcscheme | 93 +++ 4 files changed, 870 insertions(+) create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj new file mode 100644 index 00000000..63ffb506 --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj @@ -0,0 +1,762 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */; }; + 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */ = {isa = PBXBuildFile; productRef = 01A414C72912CA18003152A4 /* Bugsnag */; }; + 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */; }; + 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */; }; + 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */; }; + 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */; }; + 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */; }; + 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */; }; + 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */; }; + 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */; }; + 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */; }; + 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */; }; + 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */; }; + 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC428E1AF9600D1F239 /* Scenario.swift */; }; + 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FE4DC628E1D5A400D1F239 /* Fixture.swift */; }; + 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */; }; + 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */; }; + 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */; }; + 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */; }; + 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */; }; + 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */; }; + 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3B2B0607F300F4F776 /* Logging.swift */; }; + 09637A3F2B06082200F4F776 /* Logging.m in Sources */ = {isa = PBXBuildFile; fileRef = 09637A3E2B06082200F4F776 /* Logging.m */; }; + 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */; }; + 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */; }; + 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09637A442B0B883B00F4F776 /* FixtureConfig.swift */; }; + 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */; }; + 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */; }; + 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */; }; + 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */; }; + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */; }; + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */; }; + 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */; }; + 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */; }; + 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */; }; + 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */; }; + 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */; }; + 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */; }; + 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */; }; + 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */; }; + 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */; }; + 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */; }; + 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */; }; + 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 09F025062BA08804007D9F73 /* ObjCURLSession.m */; }; + 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */; }; + 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */; }; + 55A1B7CB2CBFF140009D68A7 /* BugsnagPerformance.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55A1B7C92CBFF140009D68A7 /* BugsnagPerformance.xcframework */; }; + 55A1B7CC2CBFF140009D68A7 /* BugsnagPerformance.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55A1B7C92CBFF140009D68A7 /* BugsnagPerformance.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 55A1B7CD2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55A1B7CA2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework */; }; + 55A1B7CE2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 55A1B7CA2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */; }; + 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */; }; + 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */; }; + 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */; }; + 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */; }; + 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */; }; + 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */; }; + 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */; }; + 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */; }; + 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */; }; + 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */; }; + 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */; }; + 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */; }; + 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */; }; + 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */; }; + CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */; }; + CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */; }; + CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */; }; + CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */; }; + CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */; }; + CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */; }; + CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */; }; + CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */; }; + CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */ = {isa = PBXBuildFile; fileRef = CBC90C4229C466BD00280884 /* ForceUBSan.m */; }; + CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */; }; + CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */; }; + CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */; }; + CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */; }; + CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */; }; + CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */; }; + CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */; }; + CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */; }; + CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */; }; + CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF62108291A4F47004BEE0B /* RetryScenario.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 55A1B7CF2CBFF140009D68A7 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 55A1B7CE2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework in Embed Frameworks */, + 55A1B7CC2CBFF140009D68A7 /* BugsnagPerformance.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentViewLoadScenario.swift; sourceTree = ""; }; + 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SamplingProbabilityZeroScenario.swift; sourceTree = ""; }; + 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAppStartsScenario.swift; sourceTree = ""; }; + 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadScenario.swift; sourceTree = ""; }; + 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanBeforeStartScenario.swift; sourceTree = ""; }; + 01FE4DA528E1AEBD00D1F239 /* Fixture.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Fixture.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 01FE4DAF28E1AEBD00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 01FE4DB428E1AEBF00D1F239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 01FE4DB628E1AEBF00D1F239 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "bugsnag-cocoa-performance"; path = ../../..; sourceTree = ""; }; + 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualSpanScenario.swift; sourceTree = ""; }; + 01FE4DC428E1AF9600D1F239 /* Scenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scenario.swift; sourceTree = ""; }; + 01FE4DC628E1D5A400D1F239 /* Fixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fixture.swift; sourceTree = ""; }; + 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartScenario.swift; sourceTree = ""; }; + 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkPreStartDisabledScenario.swift; sourceTree = ""; }; + 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkCallbackScenario.swift; sourceTree = ""; }; + 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplexViewScenario.swift; sourceTree = ""; }; + 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualParentSpanScenario.swift; sourceTree = ""; }; + 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesScenario.swift; sourceTree = ""; }; + 09637A3B2B0607F300F4F776 /* Logging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; + 09637A3D2B06082200F4F776 /* Logging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Logging.h; sourceTree = ""; }; + 09637A3E2B06082200F4F776 /* Logging.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Logging.m; sourceTree = ""; }; + 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandReaderThread.swift; sourceTree = ""; }; + 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MazeRunnerCommand.swift; sourceTree = ""; }; + 09637A442B0B883B00F4F776 /* FixtureConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixtureConfig.swift; sourceTree = ""; }; + 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIDeferredScenario.swift; sourceTree = ""; }; + 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNullNetworkCallbackScenario.swift; sourceTree = ""; }; + 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSwiftUIScenario.swift; sourceTree = ""; }; + 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualViewLoadPhaseScenario.swift; sourceTree = ""; }; + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckNoBugsnagScenario.swift; sourceTree = ""; }; + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfraCheckMinimalBugsnagScenario.swift; sourceTree = ""; }; + 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnEndCallbackScenario.swift; sourceTree = ""; }; + 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ErrorGenerator.h; sourceTree = ""; }; + 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ErrorGenerator.m; sourceTree = ""; }; + 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftErrorGenerator.swift; sourceTree = ""; }; + 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentAVAssetScenario.swift; sourceTree = ""; }; + 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkTracePropagationScenario.swift; sourceTree = ""; }; + 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkTracePropagationScenario.swift; sourceTree = ""; }; + 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkCallbackScenario.swift; sourceTree = ""; }; + 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EarlySpanOnEndScenario.swift; sourceTree = ""; }; + 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributesWithLimitsScenario.swift; sourceTree = ""; }; + 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAttributeCountLimitScenario.swift; sourceTree = ""; }; + 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModifyEarlySpansScenario.swift; sourceTree = ""; }; + 09F025052BA08804007D9F73 /* ObjCURLSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ObjCURLSession.h; sourceTree = ""; }; + 09F025062BA08804007D9F73 /* ObjCURLSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ObjCURLSession.m; sourceTree = ""; }; + 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNullURLScenario.swift; sourceTree = ""; }; + 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDidLoadDoesntTriggerScenario.swift; sourceTree = ""; }; + 55A1B7C92CBFF140009D68A7 /* BugsnagPerformance.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformance.xcframework; path = ../../../BugsnagPerformance.xcframework; sourceTree = ""; }; + 55A1B7CA2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = BugsnagPerformanceSwift.xcframework; path = ../../../BugsnagPerformanceSwift.xcframework; sourceTree = ""; }; + 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentGenericViewLoadScenario.swift; sourceTree = ""; }; + 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentPreLoadedViewLoadScenario.swift; sourceTree = ""; }; + 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentTabViewLoadScenario.swift; sourceTree = ""; }; + 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNavigationViewLoadScenario.swift; sourceTree = ""; }; + 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsFronzenFramesScenario.swift; sourceTree = ""; }; + 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSlowFramesScenario.swift; sourceTree = ""; }; + 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNoSlowFramesScenario.swift; sourceTree = ""; }; + 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseStageNotEnabledScenario.swift; sourceTree = ""; }; + 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsAutoInstrumentRenderingOffScenario.swift; sourceTree = ""; }; + 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsSpanInstrumentRenderingOffScenario.swift; sourceTree = ""; }; + 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift; sourceTree = ""; }; + 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDataOverrideScenario.swift; sourceTree = ""; }; + 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityOneScenario.swift; sourceTree = ""; }; + 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityZeroScenario.swift; sourceTree = ""; }; + 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanCallbackSetToNilScenario.swift; sourceTree = ""; }; + CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingWithTimeoutScenario.swift; sourceTree = ""; }; + CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPScenario.swift; sourceTree = ""; }; + CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "BugsnagPerformanceConfiguration+Private.h"; path = "../../../../Sources/BugsnagPerformance/Private/BugsnagPerformanceConfiguration+Private.h"; sourceTree = ""; }; + CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentFileURLRequestScenario.swift; sourceTree = ""; }; + CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkBadAddressScenario.swift; sourceTree = ""; }; + CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkWithParentScenario.swift; sourceTree = ""; }; + CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundForegroundScenario.swift; sourceTree = ""; }; + CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualUIViewLoadScenario.swift; sourceTree = ""; }; + CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Fixture-Bridging-Header.h"; sourceTree = ""; }; + CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingScenario.swift; sourceTree = ""; }; + CBC90C4129C466BD00280884 /* ForceUBSan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForceUBSan.h; sourceTree = ""; }; + CBC90C4229C466BD00280884 /* ForceUBSan.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ForceUBSan.m; sourceTree = ""; }; + CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassNoScenario.swift; sourceTree = ""; }; + CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstClassYesScenario.swift; sourceTree = ""; }; + CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentSubViewLoadScenario.swift; sourceTree = ""; }; + CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkNoParentScenario.swift; sourceTree = ""; }; + CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProbabilityExpiryScenario.swift; sourceTree = ""; }; + CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParentSpanScenario.swift; sourceTree = ""; }; + CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanScenario.swift; sourceTree = ""; }; + CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkMultiple.swift; sourceTree = ""; }; + CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaxPayloadSizeScenario.swift; sourceTree = ""; }; + CBF62108291A4F47004BEE0B /* RetryScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryScenario.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 01FE4DA228E1AEBD00D1F239 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 55A1B7CB2CBFF140009D68A7 /* BugsnagPerformance.xcframework in Frameworks */, + 55A1B7CD2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework in Frameworks */, + 01A414C82912CA18003152A4 /* Bugsnag in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 01FE4D9C28E1AEBD00D1F239 = { + isa = PBXGroup; + children = ( + 09637A3A2B0607DA00F4F776 /* utils */, + 01FE4DA728E1AEBD00D1F239 /* Fixture */, + 01FE4DC128E1AF0700D1F239 /* Scenarios */, + 01FE4DBC28E1AED000D1F239 /* Packages */, + 01FE4DA628E1AEBD00D1F239 /* Products */, + 01FE4DBE28E1AEDF00D1F239 /* Frameworks */, + ); + sourceTree = ""; + }; + 01FE4DA628E1AEBD00D1F239 /* Products */ = { + isa = PBXGroup; + children = ( + 01FE4DA528E1AEBD00D1F239 /* Fixture.app */, + ); + name = Products; + sourceTree = ""; + }; + 01FE4DA728E1AEBD00D1F239 /* Fixture */ = { + isa = PBXGroup; + children = ( + 01FE4DA828E1AEBD00D1F239 /* AppDelegate.swift */, + 01FE4DB128E1AEBF00D1F239 /* Assets.xcassets */, + CB211D0629EEB615008F748D /* BugsnagPerformanceConfiguration+Private.h */, + 09637A402B060E7C00F4F776 /* CommandReaderThread.swift */, + CBAAE25429125F5F006D4AA0 /* Fixture-Bridging-Header.h */, + 01FE4DC628E1D5A400D1F239 /* Fixture.swift */, + 01FE4DB628E1AEBF00D1F239 /* Info.plist */, + 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */, + 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */, + 09637A422B0617FE00F4F776 /* MazeRunnerCommand.swift */, + 01FE4DAA28E1AEBD00D1F239 /* SceneDelegate.swift */, + 01FE4DAC28E1AEBD00D1F239 /* ViewController.swift */, + 09637A442B0B883B00F4F776 /* FixtureConfig.swift */, + 098C3B4E2C53CEC0006F9886 /* ErrorGenerator.h */, + 098C3B4F2C53CEC0006F9886 /* ErrorGenerator.m */, + 098C3B512C53CECF006F9886 /* SwiftErrorGenerator.swift */, + ); + path = Fixture; + sourceTree = ""; + }; + 01FE4DBC28E1AED000D1F239 /* Packages */ = { + isa = PBXGroup; + children = ( + 01FE4DBD28E1AED000D1F239 /* bugsnag-cocoa-performance */, + ); + name = Packages; + sourceTree = ""; + }; + 01FE4DBE28E1AEDF00D1F239 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55A1B7C92CBFF140009D68A7 /* BugsnagPerformance.xcframework */, + 55A1B7CA2CBFF140009D68A7 /* BugsnagPerformanceSwift.xcframework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 01FE4DC128E1AF0700D1F239 /* Scenarios */ = { + isa = PBXGroup; + children = ( + 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */, + 01D3A7DF28F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift */, + 099331FB2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift */, + CB2B8A9C2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift */, + 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */, + 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */, + CB2B8A9E2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift */, + 0921F02D2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift */, + CBEC89222A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift */, + CBE0872A29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift */, + 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */, + 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */, + 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */, + 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */, + CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */, + 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */, + 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */, + CBC90CE329D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift */, + 096EE5EE2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift */, + 0983A1782B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift */, + 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */, + 0185C47128F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift */, + CB572EAC29BB829800FD7A2A /* BackgroundForegroundScenario.swift */, + CBAAE2582912601D006D4AA0 /* BatchingScenario.swift */, + CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */, + 09301DC02B63A65A000A7C12 /* ComplexViewScenario.swift */, + 09DC62292C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift */, + CBC90CDD29CDCFF700280884 /* FirstClassNoScenario.swift */, + CBC90CDF29CDD02800280884 /* FirstClassYesScenario.swift */, + 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */, + 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */, + CBC90C4129C466BD00280884 /* ForceUBSan.h */, + CBC90C4229C466BD00280884 /* ForceUBSan.m */, + 9691A9DC2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift */, + 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */, + 9691A9E02CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift */, + 966634E12C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift */, + 966634DF2C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift */, + 9691A9DE2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift */, + 0988B5382CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift */, + 0988B5362CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift */, + CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */, + 09DA59A42A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift */, + 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */, + CBE6B66A28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift */, + 09D59E162BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift */, + 093EE63C2C32E5B900632B30 /* ManualParentSpanScenario.swift */, + 01E7918928EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift */, + 01FE4DC228E1AF3700D1F239 /* ManualSpanScenario.swift */, + CB7FD92A299BB4E300499E13 /* ManualUIViewLoadScenario.swift */, + 098808DF2B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift */, + 01E3F99028F46B6700003F44 /* ManualViewLoadScenario.swift */, + CBEC89442A4ED0590088A3CE /* MaxPayloadSizeScenario.swift */, + 09E9BDAE2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift */, + 09F025052BA08804007D9F73 /* ObjCURLSession.h */, + 09F025062BA08804007D9F73 /* ObjCURLSession.m */, + 098C3B2C2C523EC5006F9886 /* OnEndCallbackScenario.swift */, + CBE615F629A4C1F0000E72D8 /* ParentSpanScenario.swift */, + CBE43A9829A8EFA3000B4205 /* ProbabilityExpiryScenario.swift */, + 967F6F1929C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift */, + CBF62108291A4F47004BEE0B /* RetryScenario.swift */, + 01A58C1429096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift */, + 01FE4DC428E1AF9600D1F239 /* Scenario.swift */, + 09E045602C98649D003882D3 /* SetAttributeCountLimitScenario.swift */, + 094F41E52C4A84D6008162A4 /* SetAttributesScenario.swift */, + 09E0455E2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift */, + 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */, + ); + path = Scenarios; + sourceTree = ""; + }; + 09637A3A2B0607DA00F4F776 /* utils */ = { + isa = PBXGroup; + children = ( + 09637A3B2B0607F300F4F776 /* Logging.swift */, + 09637A3D2B06082200F4F776 /* Logging.h */, + 09637A3E2B06082200F4F776 /* Logging.m */, + ); + path = utils; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 01FE4DA428E1AEBD00D1F239 /* Fixture */ = { + isa = PBXNativeTarget; + buildConfigurationList = 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "Fixture" */; + buildPhases = ( + 01FE4DA128E1AEBD00D1F239 /* Sources */, + 01FE4DA228E1AEBD00D1F239 /* Frameworks */, + 01FE4DA328E1AEBD00D1F239 /* Resources */, + 55A1B7CF2CBFF140009D68A7 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Fixture; + packageProductDependencies = ( + 01A414C72912CA18003152A4 /* Bugsnag */, + ); + productName = Fixture; + productReference = 01FE4DA528E1AEBD00D1F239 /* Fixture.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 01FE4D9D28E1AEBD00D1F239 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1400; + LastUpgradeCheck = 1400; + TargetAttributes = { + 01FE4DA428E1AEBD00D1F239 = { + CreatedOnToolsVersion = 14.0; + LastSwiftMigration = 1400; + }; + }; + }; + buildConfigurationList = 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "FixtureXcFramework" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 01FE4D9C28E1AEBD00D1F239; + packageReferences = ( + 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */, + ); + productRefGroup = 01FE4DA628E1AEBD00D1F239 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 01FE4DA428E1AEBD00D1F239 /* Fixture */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 01FE4DA328E1AEBD00D1F239 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 01FE4DB528E1AEBF00D1F239 /* LaunchScreen.storyboard in Resources */, + 01FE4DB228E1AEBF00D1F239 /* Assets.xcassets in Resources */, + 01FE4DB028E1AEBD00D1F239 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 01FE4DA128E1AEBD00D1F239 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CBE43A9929A8EFA3000B4205 /* ProbabilityExpiryScenario.swift in Sources */, + CBE0872B29F81BBB007455F2 /* AutoInstrumentNetworkNoParentScenario.swift in Sources */, + 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */, + 09E045612C98649D003882D3 /* SetAttributeCountLimitScenario.swift in Sources */, + 09637A432B0617FE00F4F776 /* MazeRunnerCommand.swift in Sources */, + 966634E22C9DE648004A934D /* FrameMetricsNoSlowFramesScenario.swift in Sources */, + 9691A9DF2CA5E62800707CDF /* FrameMetricsSpanInstrumentRenderingOffScenario.swift in Sources */, + 09F025092BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift in Sources */, + 0185C47228F6C983006F9BDC /* AutoInstrumentViewLoadScenario.swift in Sources */, + 09D59E172BDFA23600199E1B /* ManualNetworkTracePropagationScenario.swift in Sources */, + 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */, + 09D59E1D2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift in Sources */, + 01FE4DAD28E1AEBD00D1F239 /* ViewController.swift in Sources */, + CBEC89232A458BA70088A3CE /* AutoInstrumentNetworkMultiple.swift in Sources */, + 093EE63D2C32E5B900632B30 /* ManualParentSpanScenario.swift in Sources */, + 01FE4DA928E1AEBD00D1F239 /* AppDelegate.swift in Sources */, + 096EE5EF2B3C2B3E006059CE /* AutoInstrumentSwiftUIDeferredScenario.swift in Sources */, + CBAAE2592912601D006D4AA0 /* BatchingScenario.swift in Sources */, + 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */, + 09637A3C2B0607F300F4F776 /* Logging.swift in Sources */, + 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */, + 01D3A7E028F0290D0063D79E /* AutoInstrumentAppStartsScenario.swift in Sources */, + 09E0455F2C94662B003882D3 /* SetAttributesWithLimitsScenario.swift in Sources */, + 01E3F99128F46B6700003F44 /* ManualViewLoadScenario.swift in Sources */, + 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */, + 01A58C1529096AF4006E4DF7 /* SamplingProbabilityZeroScenario.swift in Sources */, + CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */, + 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */, + 09E9BDAF2C80907B00DC7C8E /* ModifyEarlySpansScenario.swift in Sources */, + 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */, + 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */, + 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */, + 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */, + 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */, + CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */, + CB7FD92B299BB4E300499E13 /* ManualUIViewLoadScenario.swift in Sources */, + 9691A9E12CA7588700707CDF /* FrameMetricsNonFirstClassSpanInstrumentRenderingOnScenario.swift in Sources */, + 09637A3F2B06082200F4F776 /* Logging.m in Sources */, + CB3477182901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift in Sources */, + 091B95742CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift in Sources */, + CBE6B66B28FD66B400D1CF78 /* ManualNetworkSpanScenario.swift in Sources */, + 098C3B2D2C523EC5006F9886 /* OnEndCallbackScenario.swift in Sources */, + 098808E02B10A6E400DC1677 /* ManualViewLoadPhaseScenario.swift in Sources */, + 01FE4DC528E1AF9600D1F239 /* Scenario.swift in Sources */, + 09DA59A52A6E866B00A06EEE /* ManualNetworkCallbackScenario.swift in Sources */, + 09301DC12B63A65A000A7C12 /* ComplexViewScenario.swift in Sources */, + 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */, + CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */, + 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */, + 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */, + CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */, + CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */, + 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */, + CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */, + 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */, + 0988B5372CAD32C500D131B1 /* InfraCheckNoBugsnagScenario.swift in Sources */, + CB2B8A9D2A0CCEF90054FBBE /* AutoInstrumentFileURLRequestScenario.swift in Sources */, + 091B95722CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift in Sources */, + 098C3B522C53CECF006F9886 /* SwiftErrorGenerator.swift in Sources */, + 01FE4DC328E1AF3700D1F239 /* ManualSpanScenario.swift in Sources */, + 01FE4DC728E1D5A400D1F239 /* Fixture.swift in Sources */, + 094F41E62C4A84D6008162A4 /* SetAttributesScenario.swift in Sources */, + 09637A412B060E7C00F4F776 /* CommandReaderThread.swift in Sources */, + CBC90CE029CDD02800280884 /* FirstClassYesScenario.swift in Sources */, + 09F025072BA08804007D9F73 /* ObjCURLSession.m in Sources */, + 0988B5392CAD36C500D131B1 /* InfraCheckMinimalBugsnagScenario.swift in Sources */, + CBC90CDE29CDCFF700280884 /* FirstClassNoScenario.swift in Sources */, + CBC90C4329C466BD00280884 /* ForceUBSan.m in Sources */, + 9691A9DD2CA5E61500707CDF /* FrameMetricsAutoInstrumentRenderingOffScenario.swift in Sources */, + 09637A452B0B883B00F4F776 /* FixtureConfig.swift in Sources */, + CBC90CE429D1BDE400280884 /* AutoInstrumentSubViewLoadScenario.swift in Sources */, + 098C3B502C53CEC0006F9886 /* ErrorGenerator.m in Sources */, + 0921F02E2A69262300C764EB /* AutoInstrumentNetworkCallbackScenario.swift in Sources */, + 01E7918A28EC7B5E00855993 /* ManualSpanBeforeStartScenario.swift in Sources */, + 09DC622A2C6DE242000AA8E1 /* EarlySpanOnEndScenario.swift in Sources */, + CBE615F729A4C1F0000E72D8 /* ParentSpanScenario.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 01FE4DAE28E1AEBD00D1F239 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 01FE4DAF28E1AEBD00D1F239 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 01FE4DB328E1AEBF00D1F239 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 01FE4DB428E1AEBF00D1F239 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 01FE4DB728E1AEBF00D1F239 /* 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++20"; + 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 = ( + "DEBUG=1", + "$(inherited)", + ); + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 01FE4DB828E1AEBF00D1F239 /* 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++20"; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 01FE4DBA28E1AEBF00D1F239 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Fixture/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformance; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 01FE4DBB28E1AEBF00D1F239 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = Fixture/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.fixtures.cocoaperformance; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Fixture/Fixture-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 01FE4DA028E1AEBD00D1F239 /* Build configuration list for PBXProject "FixtureXcFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 01FE4DB728E1AEBF00D1F239 /* Debug */, + 01FE4DB828E1AEBF00D1F239 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 01FE4DB928E1AEBF00D1F239 /* Build configuration list for PBXNativeTarget "Fixture" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 01FE4DBA28E1AEBF00D1F239 /* Debug */, + 01FE4DBB28E1AEBF00D1F239 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/bugsnag/bugsnag-cocoa"; + requirement = { + branch = master; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 01A414C72912CA18003152A4 /* Bugsnag */ = { + isa = XCSwiftPackageProductDependency; + package = 01A414C62912CA18003152A4 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */; + productName = Bugsnag; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 01FE4D9D28E1AEBD00D1F239 /* Project object */; +} diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme b/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme new file mode 100644 index 00000000..442294fb --- /dev/null +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/xcshareddata/xcschemes/Fixture.xcscheme @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 7b6afa416fd6a86a1fa97b60b6497756e3a910e1 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 14:39:33 +0100 Subject: [PATCH 38/51] update xcframework fixture --- features/fixtures/ios/build_xcframework.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/features/fixtures/ios/build_xcframework.sh b/features/fixtures/ios/build_xcframework.sh index ddf93346..b0ae8b8b 100755 --- a/features/fixtures/ios/build_xcframework.sh +++ b/features/fixtures/ios/build_xcframework.sh @@ -29,6 +29,9 @@ do fi done; +unzip BugsnagPerformance.xcframework.zip +unzip BugsnagPerformanceSwift.xcframework.zip + cp $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.template.plist $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist sed -i '' -e 's|DISABLE_SWIZZLING_KEY|'$disable_swizzling_key'|' $(dirname "${BASH_SOURCE[0]}")/Fixture/Info.plist From f8d59c476f19c35166c09495cea387b2f8020fc4 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Wed, 16 Oct 2024 15:24:54 +0100 Subject: [PATCH 39/51] test if the one test needs to be excluded --- .buildkite/pipeline.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 47cefe8b..4b190d86 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -263,7 +263,6 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -297,7 +296,6 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -331,7 +329,6 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -365,7 +362,6 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" From 7345ba622ac73ba6467b7bb88e9c3bbfa0c9e0d7 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Thu, 17 Oct 2024 08:51:43 +0100 Subject: [PATCH 40/51] Revert "test if the one test needs to be excluded" This reverts commit f8d59c476f19c35166c09495cea387b2f8020fc4. --- .buildkite/pipeline.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 4b190d86..47cefe8b 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -263,6 +263,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -296,6 +297,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -329,6 +331,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" @@ -362,6 +365,7 @@ steps: - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" + - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" From 8440763e3e4e542f5b5b129597d46f3c3c561838 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 21 Oct 2024 14:56:09 +0100 Subject: [PATCH 41/51] adjust what versions we test xcframework on --- .buildkite/pipeline.yml | 76 +++-------------------------------------- 1 file changed, 4 insertions(+), 72 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 47cefe8b..7fdc4158 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -239,7 +239,7 @@ steps: - group: ":bitbar: XcFramework E2E Tests" steps: - - label: ":bitbar: iOS XcFramework 16 E2E Tests" + - label: ":bitbar: iOS XcFramework 17 E2E Tests" depends_on: - ios_xcframework_fixture timeout_in_minutes: 30 @@ -258,81 +258,13 @@ steps: service-ports: true command: - "--app=@build/bb_xcframework_ipa_url.txt" - - "--device=IOS_16" + - "--device=IOS_17" - "--fail-fast" - "--farm=bb" - "--no-tunnel" - "--aws-public-ip" - "--exclude=features/default/automatic_spans_generic_view_load.feature" - - "features/default" - test-collector#v1.10.2: - files: "reports/TEST-*.xml" - format: "junit" - branch: "^main|next$$" - concurrency: 25 - concurrency_group: bitbar-app - concurrency_method: eager - - - label: ":bitbar: iOS XcFramework 15 E2E Tests" - depends_on: - - ios_xcframework_fixture - timeout_in_minutes: 30 - agents: - queue: opensource - plugins: - artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" - upload: - - "maze_output/failed/**/*" - - "maze_output/metrics.csv" - - "maze_output/maze_output.zip" - docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb - service-ports: true - command: - - "--app=@build/bb_xcframework_ipa_url.txt" - - "--device=IOS_15" - - "--fail-fast" - - "--farm=bb" - - "--no-tunnel" - - "--aws-public-ip" - - "--exclude=features/default/automatic_spans_generic_view_load.feature" - - "features/default" - test-collector#v1.10.2: - files: "reports/TEST-*.xml" - format: "junit" - branch: "^main|next$$" - concurrency: 25 - concurrency_group: bitbar-app - concurrency_method: eager - - - label: ":bitbar: iOS XcFramework 14 E2E Tests" - depends_on: - - ios_xcframework_fixture - timeout_in_minutes: 30 - agents: - queue: opensource - plugins: - artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" - upload: - - "maze_output/failed/**/*" - - "maze_output/metrics.csv" - - "maze_output/maze_output.zip" - docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb - service-ports: true - command: - - "--app=@build/bb_xcframework_ipa_url.txt" - - "--device=IOS_14" - - "--fail-fast" - - "--farm=bb" - - "--no-tunnel" - - "--aws-public-ip" - - "--exclude=features/default/automatic_spans_generic_view_load.feature" - - "features/default" + - "features/default/automatic_spans.feature" test-collector#v1.10.2: files: "reports/TEST-*.xml" format: "junit" @@ -366,7 +298,7 @@ steps: - "--no-tunnel" - "--aws-public-ip" - "--exclude=features/default/automatic_spans_generic_view_load.feature" - - "features/default" + - "features/default/automatic_spans.feature" test-collector#v1.10.2: files: "reports/TEST-*.xml" format: "junit" From 9ff813915f196c6b630bf4de8a4cb4f1f764811d Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 21 Oct 2024 15:00:13 +0100 Subject: [PATCH 42/51] adjust what versions we test xcframework on --- .buildkite/pipeline.yml | 66 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 7fdc4158..c946c20c 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -105,6 +105,39 @@ steps: # - group: ":bitbar: E2E Tests" steps: + - label: ":bitbar: iOS 17 E2E Tests" + depends_on: + - ios_fixture + timeout_in_minutes: 30 + agents: + queue: opensource + plugins: + artifacts#v1.9.3: + download: "features/fixtures/ios/output/bb_ipa_url.txt" + upload: + - "maze_output/failed/**/*" + - "maze_output/metrics.csv" + - "maze_output/maze_output.zip" + docker-compose#v4.8.0: + pull: maze-runner-bb + run: maze-runner-bb + service-ports: true + command: + - "--app=@build/bb_ipa_url.txt" + - "--device=IOS_17" + - "--fail-fast" + - "--farm=bb" + - "--no-tunnel" + - "--aws-public-ip" + - "features/default" + test-collector#v1.10.2: + files: "reports/TEST-*.xml" + format: "junit" + branch: "^main|next$$" + concurrency: 25 + concurrency_group: bitbar-app + concurrency_method: eager + - label: ":bitbar: iOS 16 E2E Tests" depends_on: - ios_fixture @@ -438,36 +471,3 @@ steps: concurrency: 25 concurrency_group: bitbar-app concurrency_method: eager - - # - # BrowserStack - # TODO - To be moved to BitBar once they provide iOS 17. - - label: ":browserstack: iOS 17 E2E Tests" - depends_on: - - ios_fixture - timeout_in_minutes: 30 - agents: - queue: opensource - plugins: - artifacts#v1.9.3: - download: "features/fixtures/ios/output/bs_ipa_url.txt" - upload: - - "maze_output/failed/**/*" - - "maze_output/metrics.csv" - - "maze_output/maze_output.zip" - docker-compose#v4.8.0: - pull: maze-runner-bs - run: maze-runner-bs - command: - - "--app=@build/bs_ipa_url.txt" - - "--device=IOS_17" - - "--fail-fast" - - "--farm=bs" - - "features/default" - test-collector#v1.10.2: - files: "reports/TEST-*.xml" - format: "junit" - branch: "^main|next$$" - concurrency: 5 - concurrency_group: browserstack-app - concurrency_method: eager From 9e9e36b8f0bfdd8e34596b46c3b8e0ec407008cc Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 21 Oct 2024 15:26:44 +0100 Subject: [PATCH 43/51] move ios 17 to bs --- .buildkite/pipeline.yml | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index c946c20c..aa1b453e 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -53,6 +53,7 @@ steps: - ./features/fixtures/ios/build_xcframework.sh - bundle install - bundle exec upload-app --farm=bb --app=./features/fixtures/ios/output/FixtureXcFramework.ipa --app-id-file=./features/fixtures/ios/output/bb_xcframework_ipa_url.txt + - bundle exec upload-app --farm=bs --app=./features/fixtures/ios/output/FixtureXcFramework.ipa --app-id-file=./features/fixtures/ios/output/bs_xcframework_ipa_url.txt plugins: - artifacts#v1.9.3: download: @@ -60,6 +61,7 @@ steps: - "BugsnagPerformanceSwift.xcframework.zip" artifact_paths: - features/fixtures/ios/output/bb_xcframework_ipa_url.txt + - features/fixtures/ios/output/bs_xcframework_ipa_url.txt - label: "Fixture swizzling disabled" key: ios_fixture_swizzling_disabled @@ -105,7 +107,7 @@ steps: # - group: ":bitbar: E2E Tests" steps: - - label: ":bitbar: iOS 17 E2E Tests" + - label: ":browserstack: iOS 17 E2E Tests" depends_on: - ios_fixture timeout_in_minutes: 30 @@ -113,29 +115,27 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_ipa_url.txt" + download: "features/fixtures/ios/output/bs_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb + pull: maze-runner-bs + run: maze-runner-bs service-ports: true command: - - "--app=@build/bb_ipa_url.txt" + - "--app=@build/bs_ipa_url.txt" - "--device=IOS_17" - "--fail-fast" - - "--farm=bb" - - "--no-tunnel" - - "--aws-public-ip" + - "--farm=bs" - "features/default" test-collector#v1.10.2: files: "reports/TEST-*.xml" format: "junit" branch: "^main|next$$" - concurrency: 25 - concurrency_group: bitbar-app + concurrency: 5 + concurrency_group: browserstack-app concurrency_method: eager - label: ":bitbar: iOS 16 E2E Tests" @@ -272,7 +272,7 @@ steps: - group: ":bitbar: XcFramework E2E Tests" steps: - - label: ":bitbar: iOS XcFramework 17 E2E Tests" + - label: ":browserstack: iOS XcFramework 17 E2E Tests" depends_on: - ios_xcframework_fixture timeout_in_minutes: 30 @@ -280,30 +280,28 @@ steps: queue: opensource plugins: artifacts#v1.9.3: - download: "features/fixtures/ios/output/bb_xcframework_ipa_url.txt" + download: "features/fixtures/ios/output/bs_xcframework_ipa_url.txt" upload: - "maze_output/failed/**/*" - "maze_output/metrics.csv" - "maze_output/maze_output.zip" docker-compose#v4.8.0: - pull: maze-runner-bb - run: maze-runner-bb + pull: maze-runner-bs + run: maze-runner-bs service-ports: true command: - - "--app=@build/bb_xcframework_ipa_url.txt" + - "--app=@build/bs_xcframework_ipa_url.txt" - "--device=IOS_17" - "--fail-fast" - - "--farm=bb" - - "--no-tunnel" - - "--aws-public-ip" + - "--farm=bs" - "--exclude=features/default/automatic_spans_generic_view_load.feature" - "features/default/automatic_spans.feature" test-collector#v1.10.2: files: "reports/TEST-*.xml" format: "junit" branch: "^main|next$$" - concurrency: 25 - concurrency_group: bitbar-app + concurrency: 5 + concurrency_group: browserstack-app concurrency_method: eager - label: ":bitbar: iOS XcFramework 13 E2E Tests" From 1f2df1956be0c0e5bac6853352a76039b3d9d5f3 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 28 Oct 2024 09:50:35 +0000 Subject: [PATCH 44/51] add ios 18 full --- .buildkite/pipeline.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index aa1b453e..f4b48282 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -83,9 +83,9 @@ steps: - group: ":xcode_simulator: Unit Tests" steps: - - label: "iOS 17 Unit Tests" + - label: "iOS 18 Unit Tests" commands: - - ./scripts/run-unit-tests.sh PLATFORM=iOS OS=17.4 DEVICE="iPhone 15" + - ./scripts/run-unit-tests.sh PLATFORM=iOS OS=18 DEVICE="iPhone 15" plugins: artifacts#v1.9.3: upload: @@ -107,7 +107,7 @@ steps: # - group: ":bitbar: E2E Tests" steps: - - label: ":browserstack: iOS 17 E2E Tests" + - label: ":browserstack: iOS 18 E2E Tests" depends_on: - ios_fixture timeout_in_minutes: 30 @@ -126,7 +126,7 @@ steps: service-ports: true command: - "--app=@build/bs_ipa_url.txt" - - "--device=IOS_17" + - "--device=IOS_18" - "--fail-fast" - "--farm=bs" - "features/default" @@ -272,7 +272,7 @@ steps: - group: ":bitbar: XcFramework E2E Tests" steps: - - label: ":browserstack: iOS XcFramework 17 E2E Tests" + - label: ":browserstack: iOS XcFramework 18 E2E Tests" depends_on: - ios_xcframework_fixture timeout_in_minutes: 30 @@ -291,7 +291,7 @@ steps: service-ports: true command: - "--app=@build/bs_xcframework_ipa_url.txt" - - "--device=IOS_17" + - "--device=IOS_18" - "--fail-fast" - "--farm=bs" - "--exclude=features/default/automatic_spans_generic_view_load.feature" From 787ef22e974be0ad41bc52c3db26dc31bc347c63 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 28 Oct 2024 11:30:56 +0000 Subject: [PATCH 45/51] add ios 18 full --- .buildkite/pipeline.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index f4b48282..b1144e51 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -83,9 +83,9 @@ steps: - group: ":xcode_simulator: Unit Tests" steps: - - label: "iOS 18 Unit Tests" + - label: "iOS 17 Unit Tests" commands: - - ./scripts/run-unit-tests.sh PLATFORM=iOS OS=18 DEVICE="iPhone 15" + - ./scripts/run-unit-tests.sh PLATFORM=iOS OS=17.4 DEVICE="iPhone 15" plugins: artifacts#v1.9.3: upload: From 2f8076554feaf32db89194866f7a3e49ebf539c3 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Mon, 28 Oct 2024 13:35:32 +0000 Subject: [PATCH 46/51] test multi --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index b1144e51..542e6fca 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -105,7 +105,7 @@ steps: # # BitBar # - - group: ":bitbar: E2E Tests" + - group: "E2E Tests" steps: - label: ":browserstack: iOS 18 E2E Tests" depends_on: From 133ad4690ef23622d663e3ba8e7128e9bd39338a Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 29 Oct 2024 09:21:54 +0000 Subject: [PATCH 47/51] disable pod lib lint --- .buildkite/pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 542e6fca..0e4ecb3e 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -29,6 +29,7 @@ steps: commands: - bundle install - pod lib lint BugsnagPerformance.podspec.json + skip: "Skipped due to an issue with cocoapods linting - https://github.com/CocoaPods/CocoaPods/issues/12664" - label: "Example" commands: From abba7de1ff1a3b4ddcfe5b643b7d017f8f546559 Mon Sep 17 00:00:00 2001 From: Josh Edney Date: Tue, 29 Oct 2024 09:23:11 +0000 Subject: [PATCH 48/51] disable pod lib lint --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 0e4ecb3e..1ff10f20 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -29,7 +29,7 @@ steps: commands: - bundle install - pod lib lint BugsnagPerformance.podspec.json - skip: "Skipped due to an issue with cocoapods linting - https://github.com/CocoaPods/CocoaPods/issues/12664" + skip: "Skipped due to https://github.com/CocoaPods/CocoaPods/issues/12664" - label: "Example" commands: From fee18bfe3aa58be3c60c0d30dad691ffff742e6c Mon Sep 17 00:00:00 2001 From: Karl Stenerud Date: Tue, 29 Oct 2024 12:59:32 +0100 Subject: [PATCH 49/51] Set bugsnag.span.category to 'custom' for custom spans --- CHANGELOG.md | 3 +++ .../BugsnagPerformance/Private/BugsnagPerformanceImpl.h | 4 ++-- .../BugsnagPerformance/Private/BugsnagPerformanceImpl.mm | 6 ++++-- .../BugsnagPerformance/Private/SpanAttributesProvider.h | 1 + .../BugsnagPerformance/Private/SpanAttributesProvider.mm | 7 +++++++ Sources/BugsnagPerformance/Public/BugsnagPerformance.mm | 4 ++-- features/default/manual_spans.feature | 3 +++ 7 files changed, 22 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9161d117..d430d086 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ Changelog ### Bug fixes +* Set bugsnag.span.category to 'custom' for custom spans. + [336](https://github.com/bugsnag/bugsnag-cocoa-performance/pull/336) + * Fix visionOS compilation errors. Note that visionOS is not yet officially supported. [327](https://github.com/bugsnag/bugsnag-cocoa-performance/pull/327) diff --git a/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.h b/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.h index bad83191..d0bb7eac 100644 --- a/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.h +++ b/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.h @@ -45,9 +45,9 @@ class BugsnagPerformanceImpl: public PhasedStartup { void reportNetworkSpan(NSURLSessionTask *task, NSURLSessionTaskMetrics *metrics) noexcept; - BugsnagPerformanceSpan *startSpan(NSString *name) noexcept; + BugsnagPerformanceSpan *startCustomSpan(NSString *name) noexcept; - BugsnagPerformanceSpan *startSpan(NSString *name, BugsnagPerformanceSpanOptions *options) noexcept; + BugsnagPerformanceSpan *startCustomSpan(NSString *name, BugsnagPerformanceSpanOptions *options) noexcept; BugsnagPerformanceSpan *startViewLoadSpan(NSString *name, BugsnagPerformanceViewType viewType) noexcept; diff --git a/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.mm b/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.mm index 457acd5e..ee91cbfe 100644 --- a/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.mm +++ b/Sources/BugsnagPerformance/Private/BugsnagPerformanceImpl.mm @@ -485,15 +485,17 @@ #pragma mark Spans -BugsnagPerformanceSpan *BugsnagPerformanceImpl::startSpan(NSString *name) noexcept { +BugsnagPerformanceSpan *BugsnagPerformanceImpl::startCustomSpan(NSString *name) noexcept { SpanOptions options; auto span = tracer_->startCustomSpan(name, options); + [span internalSetMultipleAttributes:spanAttributesProvider_->customSpanAttributes()]; return span; } -BugsnagPerformanceSpan *BugsnagPerformanceImpl::startSpan(NSString *name, BugsnagPerformanceSpanOptions *optionsIn) noexcept { +BugsnagPerformanceSpan *BugsnagPerformanceImpl::startCustomSpan(NSString *name, BugsnagPerformanceSpanOptions *optionsIn) noexcept { auto options = SpanOptions(optionsIn); auto span = tracer_->startCustomSpan(name, options); + [span internalSetMultipleAttributes:spanAttributesProvider_->customSpanAttributes()]; return span; } diff --git a/Sources/BugsnagPerformance/Private/SpanAttributesProvider.h b/Sources/BugsnagPerformance/Private/SpanAttributesProvider.h index 6fb8b713..3faa78d9 100644 --- a/Sources/BugsnagPerformance/Private/SpanAttributesProvider.h +++ b/Sources/BugsnagPerformance/Private/SpanAttributesProvider.h @@ -22,6 +22,7 @@ class SpanAttributesProvider { NSMutableDictionary *viewLoadSpanAttributes(NSString *className, BugsnagPerformanceViewType viewType) noexcept; NSMutableDictionary *preloadedViewLoadSpanAttributes(NSString *className, BugsnagPerformanceViewType viewType) noexcept; NSMutableDictionary *viewLoadPhaseSpanAttributes(NSString *className, NSString *phase) noexcept; + NSMutableDictionary *customSpanAttributes() noexcept; static NSString *httpUrlAttributeKey(); }; diff --git a/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm b/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm index 5b489cbd..ea543337 100644 --- a/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm +++ b/Sources/BugsnagPerformance/Private/SpanAttributesProvider.mm @@ -192,3 +192,10 @@ static void addNonZero(NSMutableDictionary *dict, NSString *key, NSNumber *value @"bugsnag.phase": phase, }.mutableCopy; } + +NSMutableDictionary * +SpanAttributesProvider::customSpanAttributes() noexcept { + return @{ + @"bugsnag.span.category": @"custom", + }.mutableCopy; +} diff --git a/Sources/BugsnagPerformance/Public/BugsnagPerformance.mm b/Sources/BugsnagPerformance/Public/BugsnagPerformance.mm index 6038e980..58506d1d 100644 --- a/Sources/BugsnagPerformance/Public/BugsnagPerformance.mm +++ b/Sources/BugsnagPerformance/Public/BugsnagPerformance.mm @@ -27,11 +27,11 @@ + (void)startWithConfiguration:(BugsnagPerformanceConfiguration *)configuration } + (BugsnagPerformanceSpan *)startSpanWithName:(NSString *)name { - return BugsnagPerformanceLibrary::getBugsnagPerformanceImpl()->startSpan(name); + return BugsnagPerformanceLibrary::getBugsnagPerformanceImpl()->startCustomSpan(name); } + (BugsnagPerformanceSpan *)startSpanWithName:(NSString *)name options:(BugsnagPerformanceSpanOptions *)options { - return BugsnagPerformanceLibrary::getBugsnagPerformanceImpl()->startSpan(name, options); + return BugsnagPerformanceLibrary::getBugsnagPerformanceImpl()->startCustomSpan(name, options); } + (BugsnagPerformanceSpan *)startViewLoadSpanWithName:(NSString *)name viewType:(BugsnagPerformanceViewType)viewType { diff --git a/features/default/manual_spans.feature b/features/default/manual_spans.feature index e300741d..f542aa09 100644 --- a/features/default/manual_spans.feature +++ b/features/default/manual_spans.feature @@ -15,6 +15,7 @@ Feature: Manual creation of spans * a span field "name" equals "WillRetry" * a span field "name" equals "Success" * every span bool attribute "bugsnag.span.first_class" is true + * every span string attribute "bugsnag.span.category" equals "custom" Scenario: Manually start and end a span Given I run "ManualSpanScenario" @@ -47,6 +48,7 @@ Feature: Manual creation of spans * the trace payload field "resourceSpans.0.resource" string attribute "service.version" equals "10.0" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" + * every span string attribute "bugsnag.span.category" equals "custom" Scenario: Starting and ending a span before starting the SDK Given I run "ManualSpanBeforeStartScenario" @@ -66,6 +68,7 @@ Feature: Manual creation of spans * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" * the trace payload field "resourceSpans.0.resource" string attribute "bugsnag.app.bundle_version" equals "42.42" * the trace payload field "resourceSpans.0.resource" string attribute "service.version" equals "42" + * every span string attribute "bugsnag.span.category" equals "custom" Scenario: Manually report a view load span Given I run "ManualViewLoadScenario" From 87205bc4cb36a6da2ab030cae347a57126b3591e Mon Sep 17 00:00:00 2001 From: robert-smartbear <126675445+robert-smartbear@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:07:06 +0100 Subject: [PATCH 50/51] Fixed a crash after shared NSURLSession invalidate (#334) * Fixed a crash after shared NSURLSession invalidate * Changes requested in code review --------- Co-authored-by: Robert --- BugsnagPerformance.xcodeproj/project.pbxproj | 8 +++ CHANGELOG.md | 3 + .../BSGPerformanceSharedSessionProxy.h | 19 ++++++ .../BSGPerformanceSharedSessionProxy.mm | 61 +++++++++++++++++++ .../NSURLSession+Instrumentation.mm | 10 +-- features/default/automatic_spans.feature | 22 +++++++ .../ios/Fixture.xcodeproj/project.pbxproj | 4 ++ .../project.pbxproj | 4 ++ ...tworkSharedSessionInvalidateScenario.swift | 28 +++++++++ 9 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.h create mode 100644 Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.mm create mode 100644 features/fixtures/ios/Scenarios/AutoInstrumentNetworkSharedSessionInvalidateScenario.swift diff --git a/BugsnagPerformance.xcodeproj/project.pbxproj b/BugsnagPerformance.xcodeproj/project.pbxproj index f9fe655f..e8062bec 100644 --- a/BugsnagPerformance.xcodeproj/project.pbxproj +++ b/BugsnagPerformance.xcodeproj/project.pbxproj @@ -83,6 +83,8 @@ 966DD5012A211D7F002030B2 /* BugsnagPerformance.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72E4BB63359EA30E80116E2A /* BugsnagPerformance.framework */; }; 966DD5022A211D7F002030B2 /* BugsnagPerformance.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 72E4BB63359EA30E80116E2A /* BugsnagPerformance.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 967F6F1829C3783B0054EED8 /* BugsnagPerformanceConfiguration+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 967F6F1729C3782D0054EED8 /* BugsnagPerformanceConfiguration+Private.h */; }; + 968AA5FB2CCA5A9200BA69CF /* BSGPerformanceSharedSessionProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 968AA5FA2CCA5A9200BA69CF /* BSGPerformanceSharedSessionProxy.h */; }; + 968AA5FD2CCA5AB000BA69CF /* BSGPerformanceSharedSessionProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 968AA5FC2CCA5AB000BA69CF /* BSGPerformanceSharedSessionProxy.mm */; }; 96D415F329E6ADC500AEE435 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D415F229E6ADC500AEE435 /* AppDelegate.swift */; }; 96D415F729E6ADC500AEE435 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D415F629E6ADC500AEE435 /* ViewController.swift */; }; 96D415FA29E6ADC500AEE435 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 96D415F829E6ADC500AEE435 /* Main.storyboard */; }; @@ -322,6 +324,8 @@ 966634D92C8A39B1004A934D /* FrozenFrameData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrozenFrameData.h; sourceTree = ""; }; 966634DB2C8A39C1004A934D /* FrozenFrameData.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FrozenFrameData.mm; sourceTree = ""; }; 967F6F1729C3782D0054EED8 /* BugsnagPerformanceConfiguration+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BugsnagPerformanceConfiguration+Private.h"; sourceTree = ""; }; + 968AA5FA2CCA5A9200BA69CF /* BSGPerformanceSharedSessionProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BSGPerformanceSharedSessionProxy.h; sourceTree = ""; }; + 968AA5FC2CCA5AB000BA69CF /* BSGPerformanceSharedSessionProxy.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = BSGPerformanceSharedSessionProxy.mm; sourceTree = ""; }; 96D415F029E6ADC500AEE435 /* BugsnagPerformanceTestsApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BugsnagPerformanceTestsApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 96D415F229E6ADC500AEE435 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 96D415F629E6ADC500AEE435 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -780,6 +784,8 @@ children = ( CB34771C29068C350033759C /* BSGURLSessionPerformanceProxy.h */, CB34771B29068C350033759C /* BSGURLSessionPerformanceProxy.mm */, + 968AA5FA2CCA5A9200BA69CF /* BSGPerformanceSharedSessionProxy.h */, + 968AA5FC2CCA5AB000BA69CF /* BSGPerformanceSharedSessionProxy.mm */, CBA22C982A03EA300066A2C1 /* NetworkCommon.h */, CB34771D29068C350033759C /* NSURLSession+Instrumentation.h */, CB34771A29068C350033759C /* NSURLSession+Instrumentation.mm */, @@ -861,6 +867,7 @@ CBEC51BC296D9EEE009C0CE3 /* PersistentState.h in Headers */, 0122C23829019770002D243C /* BugsnagPerformanceSpan.h in Headers */, 966634DA2C8A39B1004A934D /* FrozenFrameData.h in Headers */, + 968AA5FB2CCA5A9200BA69CF /* BSGPerformanceSharedSessionProxy.h in Headers */, CB0AD76A296573FC002A3FB6 /* BugsnagPerformanceErrors.h in Headers */, 0122C23B29019770002D243C /* BugsnagPerformance.h in Headers */, 0122C24B29019770002D243C /* ViewLoadInstrumentation.h in Headers */, @@ -1212,6 +1219,7 @@ 966634DC2C8A39C1004A934D /* FrozenFrameData.mm in Sources */, 0122C23E29019770002D243C /* BugsnagPerformanceSpan.mm in Sources */, 0987F27A2C32D4AD00777FD8 /* BugsnagPerformanceSpanContext.mm in Sources */, + 968AA5FD2CCA5AB000BA69CF /* BSGPerformanceSharedSessionProxy.mm in Sources */, CBEC51DD2976F1F9009C0CE3 /* RetryQueue.mm in Sources */, 01A414CE2913C0F0003152A4 /* SpanAttributes.mm in Sources */, CB34771E29068C350033759C /* NSURLSession+Instrumentation.mm in Sources */, diff --git a/CHANGELOG.md b/CHANGELOG.md index 9161d117..be838c0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ Changelog ### Bug fixes +* Fixed a crash after shared NSURLSession invalidate + [334](https://github.com/bugsnag/bugsnag-cocoa-performance/pull/334) + * Fix visionOS compilation errors. Note that visionOS is not yet officially supported. [327](https://github.com/bugsnag/bugsnag-cocoa-performance/pull/327) diff --git a/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.h b/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.h new file mode 100644 index 00000000..8c51b14b --- /dev/null +++ b/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.h @@ -0,0 +1,19 @@ +// +// BSGPerformanceSharedSessionProxy.h +// BugsnagPerformance-iOS +// +// Created by Robert B on 24/10/2024. +// Copyright © 2024 Bugsnag. All rights reserved. +// + +#import + +/** + * A proxy for NSURLSession that ignores finishTasksAndInvalidate and invalidateAndCancel calls + */ +@interface BSGPerformanceSharedSessionProxy: NSProxy + +- (id)initWithSession:(NSURLSession *)session; + +@end + diff --git a/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.mm b/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.mm new file mode 100644 index 00000000..3551eae8 --- /dev/null +++ b/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/BSGPerformanceSharedSessionProxy.mm @@ -0,0 +1,61 @@ +// +// BSGPerformanceSharedSessionProxy.mm +// BugsnagPerformance-iOS +// +// Created by Robert B on 24/10/2024. +// Copyright © 2024 Bugsnag. All rights reserved. +// + +#import +#import "BSGPerformanceSharedSessionProxy.h" +#import + +#define FINISH_TASK_AND_INVALIDATE_SELECTOR @selector(finishTasksAndInvalidate) +#define INVALIDATE_AND_CANCEL_SELECTOR @selector(invalidateAndCancel) + +@interface BSGPerformanceSharedSessionProxy () + +@property (nonatomic, strong) NSURLSession *session; + +@end + +@implementation BSGPerformanceSharedSessionProxy + ++ (BOOL)respondsToSelector:(SEL)aSelector { + return [NSURLSession respondsToSelector:aSelector]; +} + ++ (Class)class { + return [NSURLSession class]; +} + ++ (BOOL)selectorShouldBeForwarded:(SEL)aSelector { + return !(sel_isEqual(aSelector, FINISH_TASK_AND_INVALIDATE_SELECTOR) || + sel_isEqual(aSelector, INVALIDATE_AND_CANCEL_SELECTOR)); +} + +- (id)initWithSession:(NSURLSession *)session { + _session = session; + return self; +} + +- (id)forwardingTargetForSelector:(SEL)aSelector { + if ([BSGPerformanceSharedSessionProxy selectorShouldBeForwarded:aSelector]) { + return self.session; + } else { + return self; + } +} + +- (void)forwardInvocation:(NSInvocation *)invocation { + if (![BSGPerformanceSharedSessionProxy selectorShouldBeForwarded:invocation.selector]) { + return; + } + [self.session forwardInvocation:invocation]; +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel { + return [self.session methodSignatureForSelector:sel]; +} + +@end diff --git a/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/NSURLSession+Instrumentation.mm b/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/NSURLSession+Instrumentation.mm index f4691ef1..d3aef389 100644 --- a/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/NSURLSession+Instrumentation.mm +++ b/Sources/BugsnagPerformance/Private/Instrumentation/NetworkInstrumentation/NSURLSession+Instrumentation.mm @@ -8,6 +8,7 @@ #import "NSURLSession+Instrumentation.h" #import "BSGURLSessionPerformanceProxy.h" #import "../../Swizzle.h" +#import "BSGPerformanceSharedSessionProxy.h" #import using namespace bugsnag; @@ -48,7 +49,7 @@ static void replace_NSURLSession_sharedSession(BSGIsEnabledCallback isEnbled) { return originalIMP(self, selector); } - static NSURLSession *session; + static BSGPerformanceSharedSessionProxy *sessionProxy; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // The shared session uses the shared NSURLCache, NSHTTPCookieStorage, @@ -56,11 +57,12 @@ static void replace_NSURLSession_sharedSession(BSGIsEnabledCallback isEnbled) { // protocol list (configured with registerClass: and unregisterClass:), // and is based on a default configuration. // https://developer.apple.com/documentation/foundation/nsurlsession/1409000-sharedsession - session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] - delegate:nil delegateQueue:nil]; + + NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:nil delegateQueue:nil]; + sessionProxy = [[BSGPerformanceSharedSessionProxy alloc] initWithSession:session]; }); - return session; + return (NSURLSession *)sessionProxy; }); } diff --git a/features/default/automatic_spans.feature b/features/default/automatic_spans.feature index 83e5f987..35e759be 100644 --- a/features/default/automatic_spans.feature +++ b/features/default/automatic_spans.feature @@ -607,6 +607,28 @@ Feature: Automatic instrumentation spans * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" + Scenario: Invalidate calls on shared session should be ignored + Given I run "AutoInstrumentNetworkSharedSessionInvalidateScenario" + And I wait for exactly 1 span + Then the trace "Content-Type" header equals "application/json" + * the trace "Bugsnag-Sent-At" header matches the regex "^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\dZ$" + * every span field "parentSpanId" does not exist + * a span field "name" equals "[HTTP/GET]" + * a span string attribute "http.flavor" exists + * a span string attribute "http.url" matches the regex "http://.*:9[0-9]{3}/reflect\?status=200" + * a span string attribute "http.method" equals "GET" + * a span integer attribute "http.status_code" is greater than 0 + * a span integer attribute "http.response_content_length" is greater than 0 + * a span string attribute "net.host.connection.type" equals "wifi" + * every span field "spanId" matches the regex "^[A-Fa-f0-9]{16}$" + * every span field "traceId" matches the regex "^[A-Fa-f0-9]{32}$" + * every span field "kind" equals 1 + * every span field "startTimeUnixNano" matches the regex "^[0-9]+$" + * every span field "endTimeUnixNano" matches the regex "^[0-9]+$" + * the trace payload field "resourceSpans.0.resource" string attribute "service.name" matches the regex "com.bugsnag.fixtures.cocoaperformance(xcframework)?" + * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.name" equals "bugsnag.performance.cocoa" + * the trace payload field "resourceSpans.0.resource" string attribute "telemetry.sdk.version" matches the regex "[0-9]+\.[0-9]+\.[0-9]+" + Scenario: Capture automatic network span before configuration (disabled) Given I run "AutoInstrumentNetworkPreStartDisabledScenario" And I should receive no traces diff --git a/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj b/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj index d431c0ae..b2814591 100644 --- a/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj +++ b/features/fixtures/ios/Fixture.xcodeproj/project.pbxproj @@ -57,6 +57,7 @@ 09F025152BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */; }; 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */; }; 96284DCE2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */; }; + 964735CB2CCF137A00759ED9 /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964735CA2CCF137A00759ED9 /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift */; }; 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */; }; 9657A89B2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */; }; 966634DE2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */; }; @@ -145,6 +146,7 @@ 09F025142BAC50EC007D9F73 /* ViewDidLoadDoesntTriggerScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDidLoadDoesntTriggerScenario.swift; sourceTree = ""; }; 960EECE82B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentGenericViewLoadScenario.swift; sourceTree = ""; }; 96284DCD2B626B6F00025070 /* AutoInstrumentPreLoadedViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentPreLoadedViewLoadScenario.swift; sourceTree = ""; }; + 964735CA2CCF137A00759ED9 /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkSharedSessionInvalidateScenario.swift; sourceTree = ""; }; 9657A8982A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentTabViewLoadScenario.swift; sourceTree = ""; }; 9657A89A2A3D06EB001CEF5D /* AutoInstrumentNavigationViewLoadScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNavigationViewLoadScenario.swift; sourceTree = ""; }; 966634DD2C9DE2E0004A934D /* FrameMetricsFronzenFramesScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameMetricsFronzenFramesScenario.swift; sourceTree = ""; }; @@ -270,6 +272,7 @@ 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */, 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */, 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */, + 964735CA2CCF137A00759ED9 /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift */, 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */, CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */, 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */, @@ -469,6 +472,7 @@ 967F6F1A29C4AD300054EED8 /* ReleaseStageNotEnabledScenario.swift in Sources */, 9657A8992A3CF75B001CEF5D /* AutoInstrumentTabViewLoadScenario.swift in Sources */, CBEC89452A4ED0590088A3CE /* MaxPayloadSizeScenario.swift in Sources */, + 964735CB2CCF137A00759ED9 /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift in Sources */, CB572EAD29BB829800FD7A2A /* BackgroundForegroundScenario.swift in Sources */, 966634E02C9DE384004A934D /* FrameMetricsSlowFramesScenario.swift in Sources */, CB2B8A9F2A0E80B80054FBBE /* AutoInstrumentNetworkBadAddressScenario.swift in Sources */, diff --git a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj index 63ffb506..63027420 100644 --- a/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj +++ b/features/fixtures/ios/FixtureXcFramework.xcodeproj/project.pbxproj @@ -71,6 +71,7 @@ 96D528CC2C72B14300FEA2E2 /* AppDataOverrideScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */; }; 96D528CE2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */; }; 96D528D02C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */; }; + 96E0B34B2CD0E21C008AEB9C /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96E0B34A2CD0E21C008AEB9C /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift */; }; 96F5268C2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */; }; CB0496942913CA300097E526 /* BatchingWithTimeoutScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */; }; CB0AD76E2965BBDA002A3FB6 /* InitialPScenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */; }; @@ -176,6 +177,7 @@ 96D528CB2C72B14300FEA2E2 /* AppDataOverrideScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDataOverrideScenario.swift; sourceTree = ""; }; 96D528CD2C75DC7000FEA2E2 /* FixedSamplingProbabilityOneScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityOneScenario.swift; sourceTree = ""; }; 96D528CF2C77F38400FEA2E2 /* FixedSamplingProbabilityZeroScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FixedSamplingProbabilityZeroScenario.swift; sourceTree = ""; }; + 96E0B34A2CD0E21C008AEB9C /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoInstrumentNetworkSharedSessionInvalidateScenario.swift; sourceTree = ""; }; 96F5268B2C259E4E0095D600 /* ManualNetworkSpanCallbackSetToNilScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualNetworkSpanCallbackSetToNilScenario.swift; sourceTree = ""; }; CB0496932913CA300097E526 /* BatchingWithTimeoutScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchingWithTimeoutScenario.swift; sourceTree = ""; }; CB0AD76D2965BBDA002A3FB6 /* InitialPScenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPScenario.swift; sourceTree = ""; }; @@ -291,6 +293,7 @@ 09F025082BA08817007D9F73 /* AutoInstrumentNetworkNullURLScenario.swift */, 091B95732CA18F66007DC8A9 /* AutoInstrumentNetworkPreStartDisabledScenario.swift */, 091B95712CA179AC007DC8A9 /* AutoInstrumentNetworkPreStartScenario.swift */, + 96E0B34A2CD0E21C008AEB9C /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift */, 09D59E1C2BE105F700199E1B /* AutoInstrumentNetworkTracePropagationScenario.swift */, CB3477172901481F0033759C /* AutoInstrumentNetworkWithParentScenario.swift */, 097FFC0A2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift */, @@ -470,6 +473,7 @@ 099331FC2C11F6CF009EC92F /* AutoInstrumentAVAssetScenario.swift in Sources */, 097FFC0B2C33D931000E03E8 /* AutoInstrumentNullNetworkCallbackScenario.swift in Sources */, 01FE4DAB28E1AEBD00D1F239 /* SceneDelegate.swift in Sources */, + 96E0B34B2CD0E21C008AEB9C /* AutoInstrumentNetworkSharedSessionInvalidateScenario.swift in Sources */, 960EECE92B2316E1009FAA11 /* AutoInstrumentGenericViewLoadScenario.swift in Sources */, 0983A1792B14B20C00DDF4FF /* AutoInstrumentSwiftUIScenario.swift in Sources */, CBF62109291A4F47004BEE0B /* RetryScenario.swift in Sources */, diff --git a/features/fixtures/ios/Scenarios/AutoInstrumentNetworkSharedSessionInvalidateScenario.swift b/features/fixtures/ios/Scenarios/AutoInstrumentNetworkSharedSessionInvalidateScenario.swift new file mode 100644 index 00000000..32a4c830 --- /dev/null +++ b/features/fixtures/ios/Scenarios/AutoInstrumentNetworkSharedSessionInvalidateScenario.swift @@ -0,0 +1,28 @@ +// +// AutoInstrumentNetworkSharedSessionInvalidateScenario.swift +// Fixture +// +// Created by Robert B on 26/10/2024. +// + +import Foundation + +@objcMembers +class AutoInstrumentNetworkSharedSessionInvalidateScenario: Scenario { + + override func configure() { + super.configure() + config.autoInstrumentNetworkRequests = true + } + + override func run() { + URLSession.shared.finishTasksAndInvalidate() + URLSession.shared.invalidateAndCancel() + query(string: "?status=200") + } + + func query(string: String) { + let url = URL(string: string, relativeTo: fixtureConfig.reflectURL)! + URLSession.shared.dataTask(with: url).resume() + } +} From 66ab32b5cce6169257e0f2061eb2eaab441f6a14 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 31 Oct 2024 20:08:14 +0100 Subject: [PATCH 51/51] Release v1.10.2 --- .jazzy.yaml | 4 ++-- BugsnagPerformance.podspec.json | 4 ++-- BugsnagPerformanceSwift.podspec.json | 6 +++--- CHANGELOG.md | 2 +- Sources/BugsnagPerformance/Private/Version.h | 2 +- VERSION | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.jazzy.yaml b/.jazzy.yaml index 4a458519..ddca34fd 100644 --- a/.jazzy.yaml +++ b/.jazzy.yaml @@ -2,11 +2,11 @@ author_url: "https://www.bugsnag.com" author: "Bugsnag Inc" clean: false # avoid deleting docs/.git framework_root: "BugsnagPerformance" -github_file_prefix: "https://github.com/bugsnag/bugsnag-cocoa-performance/tree/v1.10.1/Bugsnag" +github_file_prefix: "https://github.com/bugsnag/bugsnag-cocoa-performance/tree/v1.10.2/Bugsnag" github_url: "https://github.com/bugsnag/bugsnag-cocoa-performance" hide_documentation_coverage: true module: "BugsnagPerformance" -module_version: "1.10.1" +module_version: "1.10.2" objc: true output: "docs" readme: "README.md" diff --git a/BugsnagPerformance.podspec.json b/BugsnagPerformance.podspec.json index 8e592112..aef2dc72 100644 --- a/BugsnagPerformance.podspec.json +++ b/BugsnagPerformance.podspec.json @@ -1,6 +1,6 @@ { "name": "BugsnagPerformance", - "version": "1.10.1", + "version": "1.10.2", "summary": "The Bugsnag performance monitoring framework for iOS.", "homepage": "https://github.com/bugsnag/bugsnag-cocoa-performance", "license": { @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/bugsnag/bugsnag-cocoa-performance.git", - "tag": "v1.10.1" + "tag": "v1.10.2" }, "platforms": { "ios": "13.0" diff --git a/BugsnagPerformanceSwift.podspec.json b/BugsnagPerformanceSwift.podspec.json index 7a65ae7d..06fb023d 100644 --- a/BugsnagPerformanceSwift.podspec.json +++ b/BugsnagPerformanceSwift.podspec.json @@ -1,6 +1,6 @@ { "name": "BugsnagPerformanceSwift", - "version": "1.10.1", + "version": "1.10.2", "summary": "The Bugsnag performance monitoring framework for Swift-only functionality in iOS.", "homepage": "https://github.com/bugsnag/bugsnag-cocoa-performance", "license": { @@ -13,7 +13,7 @@ "swift_version": "4.2", "source": { "git": "https://github.com/bugsnag/bugsnag-cocoa-performance.git", - "tag": "v1.10.1" + "tag": "v1.10.2" }, "platforms": { "ios": "13.0" @@ -24,6 +24,6 @@ "SwiftUI" ], "dependencies": { - "BugsnagPerformance": "1.10.1" + "BugsnagPerformance": "1.10.2" } } diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b2bbf6e..2762f6e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ Changelog ========= -## TBD +## 1.10.2 (2024-10-31) * Fixed a crash after shared NSURLSession invalidate [334](https://github.com/bugsnag/bugsnag-cocoa-performance/pull/334) diff --git a/Sources/BugsnagPerformance/Private/Version.h b/Sources/BugsnagPerformance/Private/Version.h index da89d50b..54aa57c9 100644 --- a/Sources/BugsnagPerformance/Private/Version.h +++ b/Sources/BugsnagPerformance/Private/Version.h @@ -9,4 +9,4 @@ #pragma once #define TELEMETRY_SDK_NAME "bugsnag.performance.cocoa" -#define TELEMETRY_SDK_VERSION "1.10.1" +#define TELEMETRY_SDK_VERSION "1.10.2" diff --git a/VERSION b/VERSION index 4dae2985..5ad2491c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.1 +1.10.2