Swift Testing

RSS for tag

Swift Testing is a framework with expressive and intuitive APIs that make testing your Swift code a breeze.

Posts under Swift Testing tag

50 Posts

Post

Replies

Boosts

Views

Activity

ARKit object tracking performance
I'm trying to track identified objects in realtime with bounding rects, with no 3D integration, but still has poor update performance. I'm trying to understand how to optimize frame updates. (I'm a new programmer) Using: Foundation, AVFoundation, ARKit, CoreVideo, Vision, CoreImage, CoreVideo with YOLOE-11s object detection currently throttled to 2fps. (target iOS, testing on 16pro) YOLOE-11S CoreML model detects objects with class labels + bounding boxes Labels are matched against ObjectCatalog.json for relevance Matched objects are promoted from blue (detected) to green (identified) Log warnings: ARSession <0x110afdb80>: The delegate of ARSession is retaining 13 ARFrames. The camera will stop delivering camera images if the delegate keeps holding on to too many ARFrames. This could be a threading or memory management issue in the delegate and should be fixed. Skipping integration due to poor slam at time: 619447.208339 vio_initialized(1) map_size(0) tracking_state_is_nominal(0) is_3dof(0) reinitialize_attempts(6) slam_mode(RegularSLAM)
2
0
165
2w
RealityKit custom component: `has()` returns `true` but typed subscript returns `nil` in SwiftPM test runner
swift test (SwiftPM CLI) fails to decode RealityKit custom components from USD files, even though entity.components.has(MyComponent.self) returns true. Typed access via entity.components[MyComponent.self] returns nil. This forces projects that use RealityKit custom components to use xcodebuild test exclusively. Minimal repro: github.com/mesqueeb/swiftpm-realitykit-custom-component-repro Repro steps git clone https://github.com/mesqueeb/swiftpm-realitykit-custom-component-repro cd swiftpm-realitykit-custom-component-repro swift test --filter componentsPresentButNotDecodableInSwiftTest Observed ✅ entity.components.has(ReproComponent.self) returns true ❌ entity.components[ReproComponent.self] returns nil Expected If has(...) returns true for a registered custom component, typed lookup should decode and return non-nil. Notes Running the same test via xcodebuild test works correctly The component is properly registered and the USDA file correctly references it This affects any project that relies on custom RealityKit components in tests — there is no swift test workaround Feedback ID: FB22099519 Environment: macOS 15.5, Xcode 16.4, Swift 6.1
1
0
712
May ’26
Problem getting Expectation objects (AI slop)
This is from an Xcode generated file. var values: [String] = [] let exp = Expectation() let c = pub.filter { $0 != nil }.map { $0! }.sink( The second line gives an error: "'Expectation' cannot be constructed because it has no accessible initializers". My best guess that Expectation objects come from some other Apple Swift Testing function, but I don't know where.
2
0
356
Jan ’26
Crashing build when testing my app
The Test target not build for not such file or directory: 'CoreGraphics'. Not sure why I get this error, but I configured the target without forgetting the variables BUNDLE_LOADER with $(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp value and TEST_HOST with $(BUNDLE_LOADER) value. App target (not the test target), the Symbols Hidden by Default build setting its equal to NO, unlike the Test target that is set to YES. Any variable more for this? I'm not sure if I should take anything into account when using Xcode 26.1.1 and Swift Testing framework.
1
0
479
Dec ’25
Failed to generate code coverage report on iPhone
Failed to generate code coverage report when doing Swift Testing on iPhone device, but it's ok in UI testing or running on "My Mac(Designed for iPad)". I have enable code coverage in test plan. My app can't run on simulator due to frameworks limitations. Platform: Mac mini M2 w/ macOS15.7, iPhoneXR 18.6.2 Xcode version: 26.1 & 16.0 error msg: Failed to download profiles from paths ["/private/var/mobile/Containers/Data/Application/76A1F9BC-98C8-4349-998B-0FC030DEE3EC/tmp/3A424286-872D-40AD-B4CA-65B232B57EB4"] on device 'iPhoneXR' for application with bundle ID 'xxx.xxxx.xxxx' to directory /Users//Library/Developer/Xcode/DerivedData/-bosqsqmqiqwweldrfrtgsfpnhroht/Build/ProfileData/00008020-00042C2A3E38002E: Failed to retrieve the file node for tmp/3A424286-872D-40AD-B4CA-65B232B57EB4. (Underlying Error: Failed to retrieve the file node for tmp/3A424286-872D-40AD-B4CA-65B232B57EB4)
0
0
228
Nov ’25
UI Testing and 'Allow Paste'
I am developing an app that allows the user to ask it to process the clipboard contents and do something with it. In developing a XC UI Test, I find the app stops while it waits for the user to give permission. That breaks the automation. I tried: let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") let allowButton = springboard.buttons["Allow Paste"] But that does not work. Is there a way to tell the framework to automatically give the test permission to access the Paste clipboard (or to allow me to write tests to grant this)?
0
0
295
Nov ’25
XCTestPlan environment variable not retrieved in xcode 26
I have an environment variable set in an xctestplan for a set of unit tests that I access like so: let testType = ProcessInfo.processInfo.environment[TARGET_TEST_TYPE_KEY] This is always is always returning nil when I run my unit tests in Xcode 26, but seems to work as expected in Xcode 16.4. Were there any changes in Xcode 26 that changes how this works? Thanks in advance.
2
1
419
Oct ’25
Ensure that macOS-only SwiftPM project main & test source builds via swift, xcodebuild & Xcode
I want to ensure that the main & test source of my macOS-only SwiftPM project (on GitHub at mas) builds via swift, xcodebuild & Xcode. For builds of clean clones of the main branch (i.e. no locally edited files, no existing .build or .swiftpm folders, etc.): The swift command line below builds main & test fine: swift build --build-tests The xcodebuild command line below doesn't seem to run the SwiftPM MASBuildToolPlugin (which generates a Swift file necessary for the build), which is setup for the project in Package.swift, so neither main nor test build: xcodebuild -scheme MAS -destination "platform=macOS,arch=$(arch),variant=macos" How can I get xcodebuild to run my MASBuildToolPlugin, or to run an equivalent? In Xcode, building main works fine, so Xcode must run the SwiftPM MASBuildToolPlugin. Building test, however, fails with the following error: No such module 'MAS' If I capitalize the name of the executable in the following line in Package.swift from: products: [.executable(name: "mas", targets: ["MAS"])], to: products: [.executable(name: "MAS", targets: ["MAS"])], Then Xcode can compile the tests. That, however, sets the generated executable file's name to MAS, but I want it to be mas. How can I use MAS for the package/module/target/etc. names in the source, but generate an executable file named mas? I obviously can rename the executable after it has been generated by running mv MAS mas, but would the upper-case name be incorrectly used anywhere inside the executable? I assume not. Also, I'd prefer to setup my project properly, instead of using a file renaming hack.
0
1
308
Oct ’25
Why does a Swift test think my simple struct is main actor-isolated?
My experience with Swift 6 strict concurrency so far doesn't match my understanding of implicit MainActor isolation semantics. This is a cross-post from StackOverflow. I will link answers between both forums. TL;DR Build succeeds when testing a struct declared in the test module, but fails when the struct is moved to the main module: Main actor-isolated property … cannot be accessed from outside the actor. Steps to reproduce Open up Xcode 26 beta 2 on macOS 26 (probably also ok on current stables). Create a new Swift app with Swift testing, no storage. Call it WhatTheSwift. Set the Swift Language Version on all three targets to Swift 6. Update the default test file to be this: import Testing @testable import WhatTheSwift struct WhatTheSwiftTests { @Test func example() async throws { let thing = Thing(foo: "bar") #expect(thing.foo == "bar") } } struct Thing { let foo: String } That should build fine, and the tests should pass. Now, move the Thing declaration into its own Thing.swift file in the WhatTheSwift module, and try running the test again. You should see this: Observations Marking the test @MainActor allows the test to pass, suggesting the compiler actually wants to isolate Thing.foo to the main actor. My question Why? And why only when Thing is in a different module?
2
0
390
Jun ’25
Xcode Test Pane for TDD and Unit Tests?
At the last place I worked it took roughly 5 minutes to do an application build. Which in turn made doing any sort of TDD or ever just regular Unit Tests extremely painful to do as the cycle time was simply too long. But that got me thinking. In recent versions of Xcode, Apple added Previews for SwiftUI Views that basically showed code changes to the View in real time. And Previews were made possible by extremely targeted compilation of the view in question. So... what if instead of a Preview pane in the Xcode IDE there was a Test pane the could be displayed such that Tests for a piece of code could be created and run almost immediately? Perhaps by adding a #Testing section to your code #Testing(MyService.self) // Define the entity to be tested. If you could drop the turnaround time AND provide a test playground for service level code that could speed development of such code greatly... and encourage interactive test development at the same time. What do you think?
0
0
244
Apr ’25
Unexpected performance penalty attributed to first Swift Testing test
I have a Swift package with a test suite that contains some tests implemented with Swift Testing. Locally, they run quickly, but when I run them on Semaphore CI (https://semaphore.io), the first Swift Testing test to execute incurs a performance penalty. I'm running the tests with xcodebuild on iOS Simulator: xcodebuild test \ -scheme "Scheme" \ -workspace Workspace.xcworkspace \ -destination "platform=iOS Simulator,name=iPhone 16,OS=18.2" The scheme is configured to use a test plan that has parallelization disabled. Here's an excerpt from the output showing what I'm seeing: Test Suite 'All tests' started at 2025-04-03 07:47:37.328. ◇ Test run started. ↳ Testing Library Version: 102 (arm64-apple-ios13.0-simulator) ◇ Iteration 1 started. ◇ Suite <redacted> started. ◇ Test foo() started. ✔ Test foo() passed after 23.063 seconds. When foo() is not the first test it runs in under 100 ms. The reason that I have parallelization disabled is that I was initially seeing all of the tests in this suite incur a performance hit. But now it's clear that there must be some startup cost. Things I'm wondering: What is this startup penalty? Why don't I encounter it locally? Why is it attributed to the first test? (this seems like a bug) My wild guesses around 1 so far have been… maybe some simulator clone is booting. I've tried to rule that out by disabling parallelization, but maybe there's still something there. maybe swift testing is getting loaded lazily and there's some kind of dynamic linking cost Thoughts on 2… maybe there's some one-time penalty when using swift testing that I've already incurred locally but that has not yet been incurred in the CI image Guidance welcome! x-posted: FB17102970 (Unexpected performance penalty attributed to first Swift Testing test) https://forums.swift.org/t/first-swifttesting-test-always-slow/79066
1
0
227
Apr ’25
RxSwift Driver got fatal error in Swift Testing because it is not called form main thread.
Hi, I'm trying the new Swift Testing instead of XCTest for my new project. I am using RxSwift+UIKit. And when I am trying to test my ViewModel that has a Driver in it, it crashes due to the driver is not being called form main thread. Thread 5: Fatal error: `drive*` family of methods can be only called from `MainThread`. Here is the test code: struct PlayerViewModelTest { @Test func testInit_shouldPopulateTable_withEmpty() async throws { // Arrange let disposeBag = DisposeBag() var expectedSongTableCellViewData: [SongTableCellViewData]? // Act let sut = PlayerViewModel(provideAllSongs: { return .just(mockSongList) }, provideSongByArtist: { _ in return .just(mockSongList) }, disposeBag: disposeBag) sut.populateTable .drive(onNext: { expectedSongTableCellViewData = $0 }) .disposed(by: disposeBag) // Assert #expect(expectedSongTableCellViewData != nil, "Should emit something so it should not be nil") #expect(expectedSongTableCellViewData!.isEmpty, "Should emit empty array") } } This never happen in XCTest. So I assume Swift Testing is not being run in the main thread? How do I fix this? Thanks
1
0
202
Mar ’25
UI Testing Issues
Hi everyone, I've been working on an iOS app for about a year and a half. That application comes with unit and UI automated testings. Recently I started the development of the tvOS application so I added a new target and used the same bundle id as I want to eventually share purchases. What I need I'm working on an application that uses VLC (Need to play media more exotic than MP4) through these two pods pod 'MobileVLCKit', '3.6.0' (Only for iOS) pod 'TVVLCKit', '3.6.0' (Only for tvOS) What works Compilation works fine for both targets Unit tests work fine for both targets UI tests work fine ONLY for the original iOS target What doesn't work and how it fails When I launch the UI tests for the tvOS target, the compilation succeeds, but I get an error when calling app.launch() from my XCTestCase. Failed to get launch progress for <XCUIApplicationImpl: 0x600000c61e90 abergia.com.iptv at ...AppPath...>: App installation failed: Unable to Install “...AppName...”. This app is not made for this device. This app was not built to support this device family; app is compatible with ( 1, 2 ) but this device supports ( 3 ). (Underlying Error: Unable to Install “...AppName...”. This app is not made for this device. This app was not built to support this device family; app is compatible with ( 1, 2 ) but this device supports ( 3 ). What I tried Single target - Both Pods It looks like I can 'cheat' a little the system and make the Xcode target compatible with both iOS and tvO, but when declaring both pods inside the same CocoaPod target, the installation fails as one of the library is not compatible. Use a newer version of VLC (4.0.0) Works BUT that version is way too unstable, I will eventually use it again once they fix all the issues. Different Bundle ID Changing the bundle id of the tvOS application resolves the issue BUT I really want to use the same bundle id to share the purchases. Not UI testing the tvOS version It's an option I'm starting to contemplate out of frustration but I'm sure that we have people here who can help me!
1
0
353
Mar ’25
ARKit object tracking performance
I'm trying to track identified objects in realtime with bounding rects, with no 3D integration, but still has poor update performance. I'm trying to understand how to optimize frame updates. (I'm a new programmer) Using: Foundation, AVFoundation, ARKit, CoreVideo, Vision, CoreImage, CoreVideo with YOLOE-11s object detection currently throttled to 2fps. (target iOS, testing on 16pro) YOLOE-11S CoreML model detects objects with class labels + bounding boxes Labels are matched against ObjectCatalog.json for relevance Matched objects are promoted from blue (detected) to green (identified) Log warnings: ARSession <0x110afdb80>: The delegate of ARSession is retaining 13 ARFrames. The camera will stop delivering camera images if the delegate keeps holding on to too many ARFrames. This could be a threading or memory management issue in the delegate and should be fixed. Skipping integration due to poor slam at time: 619447.208339 vio_initialized(1) map_size(0) tracking_state_is_nominal(0) is_3dof(0) reinitialize_attempts(6) slam_mode(RegularSLAM)
Replies
2
Boosts
0
Views
165
Activity
2w
How to optimize SwiftData performance in large lists?
I’m building a SwiftUI application using SwiftData for local storage. When loading large lists with images, scrolling performance becomes slower. What are the best practices to optimize SwiftData fetch performance in SwiftUI apps?
Replies
1
Boosts
0
Views
380
Activity
May ’26
RealityKit custom component: `has()` returns `true` but typed subscript returns `nil` in SwiftPM test runner
swift test (SwiftPM CLI) fails to decode RealityKit custom components from USD files, even though entity.components.has(MyComponent.self) returns true. Typed access via entity.components[MyComponent.self] returns nil. This forces projects that use RealityKit custom components to use xcodebuild test exclusively. Minimal repro: github.com/mesqueeb/swiftpm-realitykit-custom-component-repro Repro steps git clone https://github.com/mesqueeb/swiftpm-realitykit-custom-component-repro cd swiftpm-realitykit-custom-component-repro swift test --filter componentsPresentButNotDecodableInSwiftTest Observed ✅ entity.components.has(ReproComponent.self) returns true ❌ entity.components[ReproComponent.self] returns nil Expected If has(...) returns true for a registered custom component, typed lookup should decode and return non-nil. Notes Running the same test via xcodebuild test works correctly The component is properly registered and the USDA file correctly references it This affects any project that relies on custom RealityKit components in tests — there is no swift test workaround Feedback ID: FB22099519 Environment: macOS 15.5, Xcode 16.4, Swift 6.1
Replies
1
Boosts
0
Views
712
Activity
May ’26
Problem getting Expectation objects (AI slop)
This is from an Xcode generated file. var values: [String] = [] let exp = Expectation() let c = pub.filter { $0 != nil }.map { $0! }.sink( The second line gives an error: "'Expectation' cannot be constructed because it has no accessible initializers". My best guess that Expectation objects come from some other Apple Swift Testing function, but I don't know where.
Replies
2
Boosts
0
Views
356
Activity
Jan ’26
Crashing build when testing my app
The Test target not build for not such file or directory: 'CoreGraphics'. Not sure why I get this error, but I configured the target without forgetting the variables BUNDLE_LOADER with $(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp value and TEST_HOST with $(BUNDLE_LOADER) value. App target (not the test target), the Symbols Hidden by Default build setting its equal to NO, unlike the Test target that is set to YES. Any variable more for this? I'm not sure if I should take anything into account when using Xcode 26.1.1 and Swift Testing framework.
Replies
1
Boosts
0
Views
479
Activity
Dec ’25
Failed to generate code coverage report on iPhone
Failed to generate code coverage report when doing Swift Testing on iPhone device, but it's ok in UI testing or running on "My Mac(Designed for iPad)". I have enable code coverage in test plan. My app can't run on simulator due to frameworks limitations. Platform: Mac mini M2 w/ macOS15.7, iPhoneXR 18.6.2 Xcode version: 26.1 & 16.0 error msg: Failed to download profiles from paths ["/private/var/mobile/Containers/Data/Application/76A1F9BC-98C8-4349-998B-0FC030DEE3EC/tmp/3A424286-872D-40AD-B4CA-65B232B57EB4"] on device 'iPhoneXR' for application with bundle ID 'xxx.xxxx.xxxx' to directory /Users//Library/Developer/Xcode/DerivedData/-bosqsqmqiqwweldrfrtgsfpnhroht/Build/ProfileData/00008020-00042C2A3E38002E: Failed to retrieve the file node for tmp/3A424286-872D-40AD-B4CA-65B232B57EB4. (Underlying Error: Failed to retrieve the file node for tmp/3A424286-872D-40AD-B4CA-65B232B57EB4)
Replies
0
Boosts
0
Views
228
Activity
Nov ’25
UI Testing and 'Allow Paste'
I am developing an app that allows the user to ask it to process the clipboard contents and do something with it. In developing a XC UI Test, I find the app stops while it waits for the user to give permission. That breaks the automation. I tried: let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") let allowButton = springboard.buttons["Allow Paste"] But that does not work. Is there a way to tell the framework to automatically give the test permission to access the Paste clipboard (or to allow me to write tests to grant this)?
Replies
0
Boosts
0
Views
295
Activity
Nov ’25
Swift Testing arm64-apple-ios13.0-simulator
I'm working on moving XCTests to Swift Testing and trying to understand why it shows Testing Library Version: 102 (arm64-apple-ios13.0-simulator) when running. Why iOS 13?
Replies
3
Boosts
0
Views
383
Activity
Oct ’25
XCTestPlan environment variable not retrieved in xcode 26
I have an environment variable set in an xctestplan for a set of unit tests that I access like so: let testType = ProcessInfo.processInfo.environment[TARGET_TEST_TYPE_KEY] This is always is always returning nil when I run my unit tests in Xcode 26, but seems to work as expected in Xcode 16.4. Were there any changes in Xcode 26 that changes how this works? Thanks in advance.
Replies
2
Boosts
1
Views
419
Activity
Oct ’25
Ensure that macOS-only SwiftPM project main & test source builds via swift, xcodebuild & Xcode
I want to ensure that the main & test source of my macOS-only SwiftPM project (on GitHub at mas) builds via swift, xcodebuild & Xcode. For builds of clean clones of the main branch (i.e. no locally edited files, no existing .build or .swiftpm folders, etc.): The swift command line below builds main & test fine: swift build --build-tests The xcodebuild command line below doesn't seem to run the SwiftPM MASBuildToolPlugin (which generates a Swift file necessary for the build), which is setup for the project in Package.swift, so neither main nor test build: xcodebuild -scheme MAS -destination "platform=macOS,arch=$(arch),variant=macos" How can I get xcodebuild to run my MASBuildToolPlugin, or to run an equivalent? In Xcode, building main works fine, so Xcode must run the SwiftPM MASBuildToolPlugin. Building test, however, fails with the following error: No such module 'MAS' If I capitalize the name of the executable in the following line in Package.swift from: products: [.executable(name: "mas", targets: ["MAS"])], to: products: [.executable(name: "MAS", targets: ["MAS"])], Then Xcode can compile the tests. That, however, sets the generated executable file's name to MAS, but I want it to be mas. How can I use MAS for the package/module/target/etc. names in the source, but generate an executable file named mas? I obviously can rename the executable after it has been generated by running mv MAS mas, but would the upper-case name be incorrectly used anywhere inside the executable? I assume not. Also, I'd prefer to setup my project properly, instead of using a file renaming hack.
Replies
0
Boosts
1
Views
308
Activity
Oct ’25
证书导出无法选择p12格式
mac .cer证书不能导出.p12证书 不知道那个步骤出错
Replies
3
Boosts
0
Views
2.4k
Activity
Jul ’25
Why does a Swift test think my simple struct is main actor-isolated?
My experience with Swift 6 strict concurrency so far doesn't match my understanding of implicit MainActor isolation semantics. This is a cross-post from StackOverflow. I will link answers between both forums. TL;DR Build succeeds when testing a struct declared in the test module, but fails when the struct is moved to the main module: Main actor-isolated property … cannot be accessed from outside the actor. Steps to reproduce Open up Xcode 26 beta 2 on macOS 26 (probably also ok on current stables). Create a new Swift app with Swift testing, no storage. Call it WhatTheSwift. Set the Swift Language Version on all three targets to Swift 6. Update the default test file to be this: import Testing @testable import WhatTheSwift struct WhatTheSwiftTests { @Test func example() async throws { let thing = Thing(foo: "bar") #expect(thing.foo == "bar") } } struct Thing { let foo: String } That should build fine, and the tests should pass. Now, move the Thing declaration into its own Thing.swift file in the WhatTheSwift module, and try running the test again. You should see this: Observations Marking the test @MainActor allows the test to pass, suggesting the compiler actually wants to isolate Thing.foo to the main actor. My question Why? And why only when Thing is in a different module?
Replies
2
Boosts
0
Views
390
Activity
Jun ’25
Swift Testing deinit not supporting async
Why doesn’t deinit support async? At the end of a test, I want to wipe data from HealthKit, and it’s delete function is asynchronous.
Replies
2
Boosts
1
Views
2k
Activity
Jun ’25
How to test equality with a tolerance in Swift Testing
So I can see from the documentation that XCTAssertEqual(x, y) becomes #expect(x == y), but what about XCTAssertEqual(x, y, accuracy: 0.2)? Does something already exist or do we need to write a more involved statement to see if x is less than y plus z and more than y minus z?
Replies
1
Boosts
1
Views
615
Activity
May ’25
Crash on saving an autocreated testplan in Xcode 16.3?
Is anybody able to save the autocreated testplan successfully with Xcode 16.3? I get a crash no matter what (different filenames, locations, machines, ...). Now created a template project: same thing. Xcode Version 16.3 (16E140) on macOS 15.5 (24F74) Known issue, or am I holding it wrong?
Replies
1
Boosts
0
Views
330
Activity
May ’25
Xcode Test Pane for TDD and Unit Tests?
At the last place I worked it took roughly 5 minutes to do an application build. Which in turn made doing any sort of TDD or ever just regular Unit Tests extremely painful to do as the cycle time was simply too long. But that got me thinking. In recent versions of Xcode, Apple added Previews for SwiftUI Views that basically showed code changes to the View in real time. And Previews were made possible by extremely targeted compilation of the view in question. So... what if instead of a Preview pane in the Xcode IDE there was a Test pane the could be displayed such that Tests for a piece of code could be created and run almost immediately? Perhaps by adding a #Testing section to your code #Testing(MyService.self) // Define the entity to be tested. If you could drop the turnaround time AND provide a test playground for service level code that could speed development of such code greatly... and encourage interactive test development at the same time. What do you think?
Replies
0
Boosts
0
Views
244
Activity
Apr ’25
Code Coverage not showing properly?
I have an old Xcode project that I am adding tests to, and at a high level I see the code coverage percent (the 2.2% number). However, in the detail view, code coverage only shows on the testing bundle, not in the main app bundle. Anyone have any tips on how to fix this?
Replies
3
Boosts
0
Views
202
Activity
Apr ’25
Unexpected performance penalty attributed to first Swift Testing test
I have a Swift package with a test suite that contains some tests implemented with Swift Testing. Locally, they run quickly, but when I run them on Semaphore CI (https://semaphore.io), the first Swift Testing test to execute incurs a performance penalty. I'm running the tests with xcodebuild on iOS Simulator: xcodebuild test \ -scheme "Scheme" \ -workspace Workspace.xcworkspace \ -destination "platform=iOS Simulator,name=iPhone 16,OS=18.2" The scheme is configured to use a test plan that has parallelization disabled. Here's an excerpt from the output showing what I'm seeing: Test Suite 'All tests' started at 2025-04-03 07:47:37.328. ◇ Test run started. ↳ Testing Library Version: 102 (arm64-apple-ios13.0-simulator) ◇ Iteration 1 started. ◇ Suite <redacted> started. ◇ Test foo() started. ✔ Test foo() passed after 23.063 seconds. When foo() is not the first test it runs in under 100 ms. The reason that I have parallelization disabled is that I was initially seeing all of the tests in this suite incur a performance hit. But now it's clear that there must be some startup cost. Things I'm wondering: What is this startup penalty? Why don't I encounter it locally? Why is it attributed to the first test? (this seems like a bug) My wild guesses around 1 so far have been… maybe some simulator clone is booting. I've tried to rule that out by disabling parallelization, but maybe there's still something there. maybe swift testing is getting loaded lazily and there's some kind of dynamic linking cost Thoughts on 2… maybe there's some one-time penalty when using swift testing that I've already incurred locally but that has not yet been incurred in the CI image Guidance welcome! x-posted: FB17102970 (Unexpected performance penalty attributed to first Swift Testing test) https://forums.swift.org/t/first-swifttesting-test-always-slow/79066
Replies
1
Boosts
0
Views
227
Activity
Apr ’25
RxSwift Driver got fatal error in Swift Testing because it is not called form main thread.
Hi, I'm trying the new Swift Testing instead of XCTest for my new project. I am using RxSwift+UIKit. And when I am trying to test my ViewModel that has a Driver in it, it crashes due to the driver is not being called form main thread. Thread 5: Fatal error: `drive*` family of methods can be only called from `MainThread`. Here is the test code: struct PlayerViewModelTest { @Test func testInit_shouldPopulateTable_withEmpty() async throws { // Arrange let disposeBag = DisposeBag() var expectedSongTableCellViewData: [SongTableCellViewData]? // Act let sut = PlayerViewModel(provideAllSongs: { return .just(mockSongList) }, provideSongByArtist: { _ in return .just(mockSongList) }, disposeBag: disposeBag) sut.populateTable .drive(onNext: { expectedSongTableCellViewData = $0 }) .disposed(by: disposeBag) // Assert #expect(expectedSongTableCellViewData != nil, "Should emit something so it should not be nil") #expect(expectedSongTableCellViewData!.isEmpty, "Should emit empty array") } } This never happen in XCTest. So I assume Swift Testing is not being run in the main thread? How do I fix this? Thanks
Replies
1
Boosts
0
Views
202
Activity
Mar ’25
UI Testing Issues
Hi everyone, I've been working on an iOS app for about a year and a half. That application comes with unit and UI automated testings. Recently I started the development of the tvOS application so I added a new target and used the same bundle id as I want to eventually share purchases. What I need I'm working on an application that uses VLC (Need to play media more exotic than MP4) through these two pods pod 'MobileVLCKit', '3.6.0' (Only for iOS) pod 'TVVLCKit', '3.6.0' (Only for tvOS) What works Compilation works fine for both targets Unit tests work fine for both targets UI tests work fine ONLY for the original iOS target What doesn't work and how it fails When I launch the UI tests for the tvOS target, the compilation succeeds, but I get an error when calling app.launch() from my XCTestCase. Failed to get launch progress for <XCUIApplicationImpl: 0x600000c61e90 abergia.com.iptv at ...AppPath...>: App installation failed: Unable to Install “...AppName...”. This app is not made for this device. This app was not built to support this device family; app is compatible with ( 1, 2 ) but this device supports ( 3 ). (Underlying Error: Unable to Install “...AppName...”. This app is not made for this device. This app was not built to support this device family; app is compatible with ( 1, 2 ) but this device supports ( 3 ). What I tried Single target - Both Pods It looks like I can 'cheat' a little the system and make the Xcode target compatible with both iOS and tvO, but when declaring both pods inside the same CocoaPod target, the installation fails as one of the library is not compatible. Use a newer version of VLC (4.0.0) Works BUT that version is way too unstable, I will eventually use it again once they fix all the issues. Different Bundle ID Changing the bundle id of the tvOS application resolves the issue BUT I really want to use the same bundle id to share the purchases. Not UI testing the tvOS version It's an option I'm starting to contemplate out of frustration but I'm sure that we have people here who can help me!
Replies
1
Boosts
0
Views
353
Activity
Mar ’25