diff --git a/.buildkite/pipeline.full.yml b/.buildkite/pipeline.full.yml index 5a8fed752..cc1752872 100644 --- a/.buildkite/pipeline.full.yml +++ b/.buildkite/pipeline.full.yml @@ -193,7 +193,7 @@ steps: - label: ':browserstack: iOS 15 app hang tests' depends_on: - cocoa_fixture - timeout_in_minutes: 10 + timeout_in_minutes: 30 agents: queue: opensource plugins: @@ -222,7 +222,7 @@ steps: - label: ':browserstack: iOS 14 app hang tests' depends_on: - cocoa_fixture - timeout_in_minutes: 10 + timeout_in_minutes: 30 agents: queue: opensource plugins: @@ -251,7 +251,7 @@ steps: - label: ':browserstack: iOS 13 app hang tests' depends_on: - cocoa_fixture - timeout_in_minutes: 10 + timeout_in_minutes: 30 agents: queue: opensource plugins: @@ -352,6 +352,7 @@ steps: agents: queue: macos-12-arm commands: + - bundle install - cd examples/objective-c-ios - echo "--- Pod install" - pod install @@ -367,6 +368,7 @@ steps: agents: queue: macos-12-arm commands: + - bundle install - cd examples/objective-c-osx - echo "--- Pod install" - pod install @@ -380,6 +382,7 @@ steps: agents: queue: macos-12-arm commands: + - bundle install - cd examples/swift-ios - echo "--- Pod install" - pod install @@ -393,6 +396,7 @@ steps: agents: queue: macos-12-arm commands: + - bundle install - cd examples/swift-package-manager - echo "--- Resolve Swift Package Dependencies" - sed -i '' -e 's/kind = branch/kind = revision/' -e "s/branch = master/revision = ${BUILDKITE_COMMIT}/" swift-package-manager.xcodeproj/project.pbxproj @@ -407,6 +411,7 @@ steps: agents: queue: macos-12-arm commands: + - bundle install - cd examples/swiftui - echo "--- Resolve Swift Package Dependencies" - sed -i '' -e 's/kind = branch/kind = revision/' -e "s/branch = master/revision = ${BUILDKITE_COMMIT}/" swiftui.xcodeproj/project.pbxproj diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 11cb5c3f2..4fb9a0df3 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -29,6 +29,8 @@ steps: timeout_in_minutes: 10 agents: queue: macos-13-arm + env: + DEVELOPER_DIR: /Applications/Xcode14.3.app commands: - make build_swift - make build_ios_static @@ -99,6 +101,8 @@ steps: queue: macos-13-arm commands: - ./scripts/run-unit-tests.sh PLATFORM=iOS OS=17.0.1 DEVICE="iPhone 15" + env: + XCODE_VERSION: 15.0.1 artifact_paths: - logs/* @@ -307,7 +311,7 @@ steps: - label: ':browserstack: iOS 16 app hang tests' depends_on: - cocoa_fixture - timeout_in_minutes: 10 + timeout_in_minutes: 30 agents: queue: opensource plugins: @@ -331,6 +335,8 @@ steps: automatic: - exit_status: -1 # Agent was lost limit: 2 + - exit_status: 104 # App hang related error + limit: 2 - label: ':bitbar: iOS 15 barebone tests' depends_on: diff --git a/.github/workflows/downstream_updates.yml b/.github/workflows/downstream_updates.yml index 8908c5a08..782372e2a 100644 --- a/.github/workflows/downstream_updates.yml +++ b/.github/workflows/downstream_updates.yml @@ -15,7 +15,6 @@ jobs: runs-on: ubuntu-latest env: RELEASE_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.target_version || github.event.release.tag_name }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} strategy: matrix: downstream_repo: ['bugsnag/bugsnag-unity', 'bugsnag/bugsnag-flutter'] @@ -28,5 +27,5 @@ jobs: - run: > curl -X POST https://api.github.com/repos/${{ matrix.downstream_repo }}/dispatches -H 'Content-Type: application/json' - -H "Authorization: Bearer $GITHUB_TOKEN" - -d '{"event_type":"update-dependency","client_payload": {"target_submodule":"bugsnag-cocoa", "target_version": "$RELEASE_VERSION"}}' + -H "Authorization: Bearer ${{ secrets.DEP_UPDATER_BEARER_TOKEN }}" + -d '{"event_type":"update-dependency","client_payload": {"target_submodule":"bugsnag-cocoa", "target_version": "${{ env.RELEASE_VERSION }}"}}' diff --git a/.gitignore b/.gitignore index da7e5f018..993f88eca 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ Package.resolved /infer-out /oclint.json bb.ready +/maze_output diff --git a/.jazzy.yaml b/.jazzy.yaml index bc06fedab..8eb2be6d3 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: "Bugsnag" -github_file_prefix: "https://github.com/bugsnag/bugsnag-cocoa/tree/v6.28.0/Bugsnag" +github_file_prefix: "https://github.com/bugsnag/bugsnag-cocoa/tree/v6.28.1/Bugsnag" github_url: "https://github.com/bugsnag/bugsnag-cocoa" hide_documentation_coverage: true module: "Bugsnag" -module_version: "6.28.0" +module_version: "6.28.1" objc: true output: "docs" readme: "README.md" diff --git a/Bugsnag.podspec.json b/Bugsnag.podspec.json index a9bfe9f9f..17392ef0f 100644 --- a/Bugsnag.podspec.json +++ b/Bugsnag.podspec.json @@ -1,6 +1,6 @@ { "name": "Bugsnag", - "version": "6.28.0", + "version": "6.28.1", "summary": "The Bugsnag crash reporting framework for Apple platforms.", "homepage": "https://bugsnag.com", "license": "MIT", @@ -9,7 +9,7 @@ }, "source": { "git": "https://github.com/bugsnag/bugsnag-cocoa.git", - "tag": "v6.28.0" + "tag": "v6.28.1" }, "ios": { "frameworks": [ @@ -53,9 +53,9 @@ "source_files": [ "Bugsnag/{**/,}*.{m,h,mm,c}" ], - "resources": [ - "Bugsnag/resources/PrivacyInfo.xcprivacy" - ], + "resource_bundles": { + "Bugsnag": ["Bugsnag/resources/PrivacyInfo.xcprivacy"] + }, "requires_arc": true, "prefix_header_file": false, "public_header_files": [ diff --git a/Bugsnag.xcodeproj/project.pbxproj b/Bugsnag.xcodeproj/project.pbxproj index f61d56183..29cbe8021 100644 --- a/Bugsnag.xcodeproj/project.pbxproj +++ b/Bugsnag.xcodeproj/project.pbxproj @@ -4031,7 +4031,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BSG_OBJC_DIRECT_MEMBERS=''", @@ -4055,7 +4055,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = Tests/BugsnagTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -4280,7 +4280,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "Tests/TestHost-iOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -4297,7 +4297,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "Tests/TestHost-iOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -4339,7 +4339,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -4401,7 +4401,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -4457,7 +4457,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BSG_OBJC_DIRECT_MEMBERS=''", @@ -4508,7 +4508,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; diff --git a/Bugsnag/BugsnagSessionTracker.m b/Bugsnag/BugsnagSessionTracker.m index 25579a70e..ffcd00c01 100644 --- a/Bugsnag/BugsnagSessionTracker.m +++ b/Bugsnag/BugsnagSessionTracker.m @@ -166,7 +166,9 @@ - (void)startNewSession { config:self.config codeBundleId:self.codeBundleId]; BugsnagDevice *device = [BugsnagDevice deviceWithKSCrashReport:@{@"system": systemInfo}]; - [device appendRuntimeInfo:self.extraRuntimeInfo]; + @synchronized (self.extraRuntimeInfo) { + [device appendRuntimeInfo:self.extraRuntimeInfo]; + } BugsnagSession *newSession = [[BugsnagSession alloc] initWithId:[[NSUUID UUID] UUIDString] startedAt:[NSDate date] @@ -194,7 +196,9 @@ - (void)startNewSession { - (void)addRuntimeVersionInfo:(NSString *)info withKey:(NSString *)key { if (info != nil && key != nil) { - self.extraRuntimeInfo[key] = info; + @synchronized (self.extraRuntimeInfo) { + self.extraRuntimeInfo[key] = info; + } } } diff --git a/Bugsnag/Payload/BugsnagNotifier.m b/Bugsnag/Payload/BugsnagNotifier.m index e06375aa7..1ba1edb0e 100644 --- a/Bugsnag/Payload/BugsnagNotifier.m +++ b/Bugsnag/Payload/BugsnagNotifier.m @@ -23,7 +23,7 @@ - (instancetype)init { #else _name = @"Bugsnag Objective-C"; #endif - _version = @"6.28.0"; + _version = @"6.28.1"; _url = @"https://github.com/bugsnag/bugsnag-cocoa"; _dependencies = @[]; } diff --git a/BugsnagNetworkRequestPlugin.podspec.json b/BugsnagNetworkRequestPlugin.podspec.json index 5cf9bfc7f..53d3b74b6 100644 --- a/BugsnagNetworkRequestPlugin.podspec.json +++ b/BugsnagNetworkRequestPlugin.podspec.json @@ -1,16 +1,16 @@ { "name": "BugsnagNetworkRequestPlugin", - "version": "6.28.0", + "version": "6.28.1", "summary": "Network request monitoring support for Bugsnag.", "homepage": "https://bugsnag.com", "license": "MIT", "authors": { "Bugsnag": "notifiers@bugsnag.com" }, - "readme": "https://raw.githubusercontent.com/bugsnag/bugsnag-cocoa/v6.28.0/BugsnagNetworkRequestPlugin/README.md", + "readme": "https://raw.githubusercontent.com/bugsnag/bugsnag-cocoa/v6.28.1/BugsnagNetworkRequestPlugin/README.md", "source": { "git": "https://github.com/bugsnag/bugsnag-cocoa.git", - "tag": "v6.28.0" + "tag": "v6.28.1" }, "dependencies": { "Bugsnag": "~> 6.13" diff --git a/BugsnagNetworkRequestPlugin/BugsnagNetworkRequestPlugin.xcodeproj/project.pbxproj b/BugsnagNetworkRequestPlugin/BugsnagNetworkRequestPlugin.xcodeproj/project.pbxproj index fff8a89fe..c4458f26a 100644 --- a/BugsnagNetworkRequestPlugin/BugsnagNetworkRequestPlugin.xcodeproj/project.pbxproj +++ b/BugsnagNetworkRequestPlugin/BugsnagNetworkRequestPlugin.xcodeproj/project.pbxproj @@ -886,7 +886,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "../Tests/TestHost-iOS/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -904,7 +904,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "../Tests/TestHost-iOS/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -921,7 +921,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; HEADER_SEARCH_PATHS = ../Bugsnag/include; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -934,7 +934,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; HEADER_SEARCH_PATHS = ../Bugsnag/include; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -951,7 +951,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -983,7 +983,7 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1013,7 +1013,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; @@ -1033,7 +1033,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; @@ -1246,7 +1246,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1270,7 +1270,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1293,7 +1293,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; INFOPLIST_FILE = BugsnagNetworkRequestPluginTests/Info.plist; @@ -1314,7 +1314,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; INFOPLIST_FILE = BugsnagNetworkRequestPluginTests/Info.plist; @@ -1337,7 +1337,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1361,7 +1361,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1384,7 +1384,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; INFOPLIST_FILE = BugsnagNetworkRequestPluginTests/Info.plist; @@ -1404,7 +1404,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; INFOPLIST_FILE = BugsnagNetworkRequestPluginTests/Info.plist; @@ -1424,7 +1424,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1448,7 +1448,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1471,7 +1471,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; INFOPLIST_FILE = BugsnagNetworkRequestPluginTests/Info.plist; @@ -1491,7 +1491,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GCC_WARN_PEDANTIC = NO; GCC_WARN_UNUSED_PARAMETER = NO; INFOPLIST_FILE = BugsnagNetworkRequestPluginTests/Info.plist; diff --git a/CHANGELOG.md b/CHANGELOG.md index ccfaa69e9..f4edb9565 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ Changelog ========= +## 6.28.1 (2024-02-28) + +### Bug fixes + +* Fix race condition crash when calling BugsnagSessionTracker.addRuntimeVersionInfo from another thread. + [1632](https://github.com/bugsnag/bugsnag-cocoa/pull/1632) + +* Fixed the issue causing PrivacyInfo collisions when using Cocoapods + [1630](https://github.com/bugsnag/bugsnag-cocoa/pull/1630) + ## 6.28.0 (2023-12-13) ### Enhancements diff --git a/Framework/Info.plist b/Framework/Info.plist index ec4764d29..7809220f0 100644 --- a/Framework/Info.plist +++ b/Framework/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 6.28.0 + 6.28.1 CFBundleVersion 1 diff --git a/Gemfile b/Gemfile index 427043d09..1ac230de5 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,8 @@ gem 'cocoapods' # A reference to Maze Runner is only needed for running tests locally and if committed it must be # portable for CI, e.g. a specific release. However, leaving it commented out would mean quicker CI. gem 'bugsnag-maze-runner', '~> 8.0' +gem 'cocoapods' +gem 'xcpretty' # Use a specific branch #gem 'bugsnag-maze-runner', git: 'https://github.com/bugsnag/maze-runner', branch: 'master' diff --git a/Makefile b/Makefile index cace29028..9616fa7ad 100644 --- a/Makefile +++ b/Makefile @@ -134,7 +134,7 @@ test-fixtures: ## Build the end-to-end test fixture e2e_ios_local: @./features/scripts/export_ios_app.sh - bundle exec maze-runner --app=features/fixtures/ios/output/iOSTestApp.ipa --farm=local --os=ios --apple-team-id=372ZUL2ZB7 --udid="$(shell idevice_id -l)" $(FEATURES) + bundle exec maze-runner --app=features/fixtures/ios/output/iOSTestApp.ipa --farm=local --os=ios --apple-team-id=7W9PZ27Y5F --udid="$(shell idevice_id -l)" $(FEATURES) e2e_macos: ./features/scripts/export_mac_app.sh diff --git a/Tests/BugsnagTests/BugsnagSessionTrackerTest.m b/Tests/BugsnagTests/BugsnagSessionTrackerTest.m index 13bf85853..08a378f3e 100644 --- a/Tests/BugsnagTests/BugsnagSessionTrackerTest.m +++ b/Tests/BugsnagTests/BugsnagSessionTrackerTest.m @@ -170,4 +170,31 @@ - (void)testStartInForeground { XCTAssertNotNil(self.sessionTracker.runningSession, @"There should be a running session after starting tracker in foreground"); } +- (void)testMultithreadedAddRuntimeVersionInfo { + NSCondition *endCondition = [NSCondition new]; + __block int runningThreads = 0; + BugsnagConfiguration *config = nil; + BugsnagSessionTracker *sessionTracker = [[BugsnagSessionTracker alloc] initWithConfig:config client:nil]; + + for (int i = 0; i < 100; i++) { + NSString *info = [NSString stringWithFormat:@"Info %d", i]; + NSString *key = [NSString stringWithFormat:@"Key %d", i]; + NSThread *thread = [[NSThread alloc] initWithBlock:^{ + runningThreads++; + for(int j = 0; j < 10000; j++) { + [sessionTracker addRuntimeVersionInfo:info withKey:key]; + } + if (--runningThreads <= 0) { + [endCondition signal]; + } + }]; + [thread start]; + } + + [NSThread sleepForTimeInterval:0.1]; + while (runningThreads > 0) { + [endCondition wait]; + } +} + @end diff --git a/Tests/BugsnagTests/Info.plist b/Tests/BugsnagTests/Info.plist index d05947470..762469f87 100644 --- a/Tests/BugsnagTests/Info.plist +++ b/Tests/BugsnagTests/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 6.28.0 + 6.28.1 CFBundleVersion 1 diff --git a/Tests/TestHost-iOS/Info.plist b/Tests/TestHost-iOS/Info.plist index 273512018..bc6b3f582 100644 --- a/Tests/TestHost-iOS/Info.plist +++ b/Tests/TestHost-iOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 6.28.0 + 6.28.1 CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/VERSION b/VERSION index 2ece8e17b..8993da977 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.28.0 +6.28.1 diff --git a/examples/objective-c-ios/objective-c-ios.xcodeproj/project.pbxproj b/examples/objective-c-ios/objective-c-ios.xcodeproj/project.pbxproj index a913c7d0f..36ce544ab 100644 --- a/examples/objective-c-ios/objective-c-ios.xcodeproj/project.pbxproj +++ b/examples/objective-c-ios/objective-c-ios.xcodeproj/project.pbxproj @@ -184,7 +184,7 @@ ORGANIZATIONNAME = "Simon Maynard"; TargetAttributes = { F40B874516AA233500676BB2 = { - DevelopmentTeam = 372ZUL2ZB7; + DevelopmentTeam = 7W9PZ27Y5F; LastSwiftMigration = 0900; }; }; @@ -408,7 +408,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_BITCODE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_SYMBOLS_PRIVATE_EXTERN = YES; @@ -434,7 +434,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEPLOYMENT_POSTPROCESSING = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_BITCODE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; INFOPLIST_FILE = "objective-c-ios/Info.plist"; diff --git a/examples/swift-ios/swift-ios.xcodeproj/project.pbxproj b/examples/swift-ios/swift-ios.xcodeproj/project.pbxproj index 13e6d8216..dfce8fc1a 100644 --- a/examples/swift-ios/swift-ios.xcodeproj/project.pbxproj +++ b/examples/swift-ios/swift-ios.xcodeproj/project.pbxproj @@ -156,7 +156,7 @@ TargetAttributes = { D175F4B71ACDBD81009AFFB7 = { CreatedOnToolsVersion = 6.2; - DevelopmentTeam = 372ZUL2ZB7; + DevelopmentTeam = 7W9PZ27Y5F; LastSwiftMigration = 1250; }; }; @@ -401,12 +401,12 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "swift-ios/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.1; - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.swiftui-ios"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SUPPORTS_MACCATALYST = YES; @@ -423,12 +423,12 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "swift-ios/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.1; - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.swiftui-ios"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SUPPORTS_MACCATALYST = YES; diff --git a/examples/swift-package-manager/swift-package-manager.xcodeproj/project.pbxproj b/examples/swift-package-manager/swift-package-manager.xcodeproj/project.pbxproj index 2b1bd286a..96ecc2da7 100644 --- a/examples/swift-package-manager/swift-package-manager.xcodeproj/project.pbxproj +++ b/examples/swift-package-manager/swift-package-manager.xcodeproj/project.pbxproj @@ -315,7 +315,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "swift-package-manager/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -336,7 +336,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; INFOPLIST_FILE = "swift-package-manager/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/examples/swift-watchos/swift-watchos.xcodeproj/project.pbxproj b/examples/swift-watchos/swift-watchos.xcodeproj/project.pbxproj index 1547123eb..7a5d12410 100644 --- a/examples/swift-watchos/swift-watchos.xcodeproj/project.pbxproj +++ b/examples/swift-watchos/swift-watchos.xcodeproj/project.pbxproj @@ -503,7 +503,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "swift-watchos WatchKit Extension/Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = "swift-watchos WatchKit Extension"; @@ -537,7 +537,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "swift-watchos WatchKit Extension/Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = "swift-watchos WatchKit Extension"; @@ -570,7 +570,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GENERATE_INFOPLIST_FILE = YES; IBSC_MODULE = swift_watchos_WatchKit_Extension; INFOPLIST_KEY_CFBundleDisplayName = "swift-watchos WatchKit App"; @@ -594,7 +594,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; GENERATE_INFOPLIST_FILE = YES; IBSC_MODULE = swift_watchos_WatchKit_Extension; INFOPLIST_KEY_CFBundleDisplayName = "swift-watchos WatchKit App"; @@ -615,7 +615,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.swift-watchos"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -628,7 +628,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.swift-watchos"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/examples/swiftui/swiftui.xcodeproj/project.pbxproj b/examples/swiftui/swiftui.xcodeproj/project.pbxproj index d071da248..54d414c15 100644 --- a/examples/swiftui/swiftui.xcodeproj/project.pbxproj +++ b/examples/swiftui/swiftui.xcodeproj/project.pbxproj @@ -326,14 +326,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = tvOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.examples.swiftui; PRODUCT_MODULE_NAME = swiftuiapp; PRODUCT_NAME = swiftui; SDKROOT = appletvos; @@ -350,14 +350,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = tvOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.examples.swiftui; PRODUCT_MODULE_NAME = swiftuiapp; PRODUCT_NAME = swiftui; SDKROOT = appletvos; @@ -487,7 +487,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = iOS/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; @@ -495,7 +495,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.examples.swiftui; PRODUCT_MODULE_NAME = swiftuiapp; PRODUCT_NAME = swiftui; SDKROOT = iphoneos; @@ -513,7 +513,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = iOS/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; @@ -521,7 +521,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.examples.swiftui; PRODUCT_MODULE_NAME = swiftuiapp; PRODUCT_NAME = swiftui; SDKROOT = iphoneos; @@ -541,7 +541,7 @@ CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = macOS/Info.plist; @@ -550,7 +550,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.examples.swiftui; PRODUCT_MODULE_NAME = swiftuiapp; PRODUCT_NAME = swiftui; SDKROOT = macosx; @@ -569,7 +569,7 @@ CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 372ZUL2ZB7; + DEVELOPMENT_TEAM = 7W9PZ27Y5F; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = macOS/Info.plist; @@ -578,7 +578,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.bugsnag.examples.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = com.bugsnag.examples.swiftui; PRODUCT_MODULE_NAME = swiftuiapp; PRODUCT_NAME = swiftui; SDKROOT = macosx; diff --git a/features/app_hangs.feature b/features/app_hangs.feature index 9b16ea501..d39dbf474 100644 --- a/features/app_hangs.feature +++ b/features/app_hangs.feature @@ -1,3 +1,4 @@ +@app_hang_test Feature: App hangs Background: diff --git a/features/support/env.rb b/features/support/env.rb index 72b2c6012..386858a05 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -106,6 +106,17 @@ def skip_between(os, version_lo, version_hi) skip_this_scenario('Skipping: Run is not configured for stress tests') if ENV['STRESS_TEST'].nil? end +# Handles app-hang test failures, enabling restarts if required +After('@app_hang_test') do |scenario| + if scenario.failed? + + # If an assertion has failed, conditionally skip the retry + unless scenario.result.exception.is_a?(Test::Unit::AssertionFailedError) + Maze::Hooks::ErrorCodeHook.exit_code = Maze::Api::ExitCode::APPIUM_APP_HANG_FAILURE + end + end +end + Maze.hooks.before do |_scenario| # Reset to defaults in case previous scenario changed them Maze.config.captured_invalid_requests = Set[:errors, :sessions, :builds, :uploads, :sourcemaps]