Create and run unit tests, performance tests, and UI tests for your Xcode project using XCTest.

Posts under XCTest tag

200 Posts

Post

Replies

Boosts

Views

Activity

Xcode 26.4: xcodebuild test crashes on iOS 15.2 Simulators before XCTest bootstrap due to ResultDataPublisher missing Foundation.URLRequest.httpMethod symbol
I’m seeing a crash when running XCTest on iOS 15.2 Simulators with Xcode 26.4. The test bundle never starts. xctest crashes before establishing the XCTest connection. This appears to be a regression from Xcode 26.2. The same test flow worked with Xcode 26.2, but crashes with Xcode 26.4. This does not appear to be caused by my app or package code. I can reproduce it with a minimal Swift Package that only imports Foundation and has one XCTest case using URLRequest.httpMethod. Environment: Xcode with failure: 26.4 Xcode that worked: 26.2 macOS: 26.2 Destinations tested: iPhone SE (2nd generation), iOS 15.2 Simulator iPad mini (6th generation), iOS 15.2 Simulator Test command: xcodebuild test Swift Package deployment target: iOS 15.2 Swift tools version: 6.1 Minimal reproduction package: Package.swift // swift-tools-version:6.1 import PackageDescription let package = Package( name: "FoundationOnlyRepro", platforms: [.iOS("15.2")], products: [ .library( name: "FoundationOnlyRepro", targets: ["FoundationOnlyRepro"] ) ], targets: [ .target(name: "FoundationOnlyRepro"), .testTarget( name: "FoundationOnlyReproTests", dependencies: ["FoundationOnlyRepro"] ) ], swiftLanguageModes: [.v6] ) Sources/FoundationOnlyRepro/FoundationOnlyRepro.swift import Foundation public struct FoundationOnlyRepro { public init() {} public func makeRequest() -> URLRequest { var request = URLRequest(url: URL(string: "https://example.invalid")!) request.httpMethod = "GET" return request } } Tests/FoundationOnlyReproTests/FoundationOnlyReproTests.swift import XCTest import Foundation @testable import FoundationOnlyRepro final class FoundationOnlyReproTests: XCTestCase { func testURLRequestHTTPMethod() { let request = FoundationOnlyRepro().makeRequest() XCTAssertEqual(request.httpMethod, "GET") } } Command used: xcodebuild test \ -scheme FoundationOnlyRepro \ -destination 'platform=iOS Simulator,name=iPhone SE (2nd generation),OS=15.2' \ -derivedDataPath /tmp/rdp-dd \ -quiet The same kind of crash also occurs when using an iPad mini (6th generation) iOS 15.2 Simulator destination. Result: Testing failed: xctest (...) encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted. (Underlying Error: Test crashed with signal abrt before establishing connection.)) ** TEST FAILED ** The diagnostic stderr shows: dyld[28688]: Symbol not found: _$s10Foundation10URLRequestV10httpMethodSSSgvs Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/ResultDataPublisher.framework/ ResultDataPublisher Expected in: /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 15.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/Foundation.framework/Foundation Demangling the missing symbol: xcrun swift-demangle '_$s10Foundation10URLRequestV10httpMethodSSSgvs' Output: Foundation.URLRequest.httpMethod.setter : Swift.String? I also checked the iOS 15.2 simulator runtime. The symbol appears to exist in: /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 15.2.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift/libswiftFoundation.dylib but ResultDataPublisher.framework appears to be resolving it from: .../System/Library/Frameworks/Foundation.framework/Foundation This suggests the crash is in Xcode’s XCTest/result publishing infrastructure, not in the app/test bundle. Questions: Is Xcode 26.4 + iOS 15.2 Simulator + xcodebuild test expected to be supported? Is there a supported workaround to disable or avoid ResultDataPublisher.framework for command-line XCTest runs?
1
0
600
Apr ’26
XCTest Bundle cannot access local network.
We’re having an iPad issue accessing the local network with iPadOS 26.3. We have an automation system that tests our app on an iPad using accessibility tags. the XCTest test code sends messages from the iPad via TCP/IP to setup external test equipment. The messages abruptly stopped transmitting across the iPad blood-brain barrier with iPadOS 26.3 (26.2.1 and earlier works fine). The technique that worked involved installing a helper app with the same bundleID as our app, allowing the helper app to access the network, and when our app runs it has network access through the helper. It’s clever and kludgey. Forums that we referenced in the past: https://developer.apple.com/forums/thread/663858 TN3179: Understanding local network privacy | Apple Developer Documentation I suspect that something was changed in 26.3 that closed our window. I need two things: ID what is different in 26.3 and fix the automation system. If there’s a new way for XCUITest code to access the local network I’m happy to try it out.
9
0
999
Apr ’26
XCUITesting Photo Library on macOS
Using XCUITesting to access images using photos picker. The code is roughly like this: photoPickerButton.click() try await Task.sleep(for: .seconds(2)) let images = app.descendants(matching: .image) .matching(identifier: "PXGGridLayout-Info") // select the first 5 images for ix in 0..<5 { let image = images.element(boundBy: ix) if image.exists { image.click() } } // why do I have to click this twice? Output says the second // click does "Falling back to element center point". app.buttons["Add"].firstMatch.click() app.buttons["Add"].firstMatch.click() Other than the minor annoyance of having to click the Add button twice that works fine. The issue is the second time in the same test I run almost identical code, but only try to select the first image as a test for handling duplicate selections. Doesn't work. The first image returned from the query exists, but is not hittable. This is a testing issue as running the steps manually work fine. The element I want to click is this: Attributes: Image, 0x73511d540, {{1794.0, 745.2}, {98.0, 73.5}}, identifier: 'PXGGridLayout-Info', label: 'February 02, 1:00 PM' Any ideas?
0
0
863
Mar ’26
UI Testing for iPadOS 26 Menu Bar items
I need to validate whether specific menu items are correctly enabled/disabled. The XCUIAutomation elements for my menu items do not appear in the tree shown by displaying the XCUIApplication object in the debugger when building and testing the iPadOS version of my application. When running the application in an iPad simulator, I can make the menu bar appear by swiping down. The testing works as expected for the MacOS build and test. I did try to use the recording feature, but was not successful in creating a series of commands that worked for a test run.
0
0
729
Mar ’26
Xcode 26.3 incompatible with FireBase and WeTest?
Popular automated testing systems like FireBase [1] and WeTest [2] expect the uploaded test to include the Debug-iphoneos directory generated by Xcode. However, in all of our builds on Xcode 26.3, this folder is created but remains empty. There are some other folders with the same name in subdirectories, but these only contain intermediate build files. Now we're looking for configuration or settings in Xcode to restore the original behavior, where the top-level Debug-iphoneos directory gets populated with a complete image of the test target, include the binary and resource files. Any suggestions would be much appreciated! [1] https://firebase.google.com/docs/test-lab/ios/run-xctest [2] https://www.wetest.net/documents/detail/automation/d8yaA7yz
0
0
557
Mar ’26
XCode 26 - xcodebuild command hangs on XCFail
On XCode 26.x, calling XCFail with continueAfterFailure set to false causes xcodebuild command to hang indefinitely if the XCUIApplication object is stored outside the test method. Create a new template iOS App project with UI tests Add XCFail(...) to a UI test test-case Set the XCUIApplication in self.app (avoiding this fixes the hang) Run tests with xcodebuild test The terminal hangs forever Reproduction example import XCTest final class TestAppUITests: XCTestCase { var app: XCUIApplication? = nil override func setUpWithError() throws { continueAfterFailure = false } override func tearDownWithError() throws { app?.terminate() } @MainActor func testExample() throws { let app = XCUIApplication() self.app = app // <- HERE this causes the problem app.launch() XCTFail() } } Reproduction environment macOS Sequoia 15.7.3 Tested XCode 26.3 and XCode 26.2 have the hang Tested XCode 16.4 does work as expected XCode 16.4 The issue does not happen on XCode 16.4, and is likely introduced in XCode 26. Related threads: https://developer.apple.com/forums/thread/809989 https://developer.apple.com/forums/thread/793307 Work-around Do not store XCUIApplication in the XCTestCase instance, maintain it scoped to the test methods.
3
0
680
Mar ’26
Xcode Cloud UI test runs often fail due to "The test runner failed to initialize for UI testing. (Underlying Error: Timed out waiting for AX loaded notification)"
I've yet to encounter these errors when running UI tests locally, but I'd estimate that 80-90% of my test runs on Xcode Cloud fail due to it. I'm just testing with iPhone simulators, I've set it to retry on failure, but no luck. Is there a setting or something I can tweak in my test code to improve the situation? I am on the latest xcode/iOS dev betas - but it was doing this before I switched to them from.
0
1
742
Mar ’26
Not precise scroll in XCTest
I'm working on UI automation tests using XCUITest for an iOS application (iPhone). My goal is to programmatically scroll a view by a very precise number of pixels (e.g., exactly 500 points down). I understand the scroll(byDeltaX:deltaY:) method is not supported on iPhone, so I'm using the coordinate-based drag method as an alternative. Specifically, I am using XCUICoordinate.press(forDuration:thenDragTo:withVelocity:thenHoldForDuration:) to simulate a drag gesture. I calculate a start and end coordinate with a specific vertical offset in points, expecting the view to scroll by that exact amount. However, I'm observing that the resulting scroll offset is not perfectly accurate. There's a consistent error of several pixels, making the scroll amount unpredictable for precise test assertions. Is there a known limitation to the accuracy of coordinate-based dragging for simulating programmatic scrolling? Are there any alternative methods or best practices within XCUITest to achieve a more reliable and pixel-accurate scroll on iPhone, or is this level of precision simply not achievable with the current framework?
1
0
558
Mar ’26
XCUIElementTypes used vary between MacOS and iPadOS
I have a UI Test that is trying to drive a stepper. When run as iPad app, the tree has: Button, 0x10ce7f860, {{492.0, 98.5}, {47.0, 32.0}}, identifier: 'GraphDataViewNumBinsStepper-Decrement', label: 'Number of bins: 4, Decrement' Button, 0x10ce802a0, {{539.0, 98.5}, {47.0, 32.0}}, identifier: 'GraphDataViewNumBinsStepper-Increment', label: 'Number of bins: 4, Increment' When run a Mac app, the tree has: StaticText, 0x7fcf5380d670, {{1575.2, 530.0}, {109.0, 16.0}}, identifier: 'GraphDataViewNumBinsStepperText', value: Number of bins: 4 Stepper, 0x7fcf5380d7b0, {{1691.5, 527.0}, {15.0, 22.0}}, identifier: 'GraphDataViewNumBinsStepper', value: 0 IncrementArrow, 0x7fcf5380e420, {{1692.5, 528.0}, {13.0, 10.0}}, Disabled DecrementArrow, 0x7fcf5380e560, {{1692.5, 538.0}, {13.0, 10.0}}, Disabled Is this an expected situation or might I be building for an inappropriate version of MacOS or iPadOS?
0
0
579
Feb ’26
Sign In Failed on Apple
When testing the same warning comes up (sign in failed network error) for the apple and demo sign in I created. The google one works fine. I am confused because when I test in Xcode on multiple devices it works perfect. The tester has got the same error repeatedly? Most recently as a fix have updated the production backend. Does anyone have any insight why the xcode testing works for me but not the tester (I understand they are on a live device- I have even connected my phone and tested on that).
0
0
294
Feb ’26
SwiftUI .toolbar(placement: .keyboard) item not exposed to accessibility on iOS 26.1 (affects VoiceOver + XCUITest)
Description On iOS 26.1, a ToolbarItem placed in .keyboard is no longer exposed to the accessibility hierarchy. As a result: VoiceOver cannot focus or activate the toolbar button XCUITest cannot discover the element, making the UI impossible to test TextEditor() .toolbar { ToolbarItem(placement: .keyboard) { Button("Done") { /* action */ } } } This worked correctly on previous iOS versions. The button appears visually but is missing from both VoiceOver navigation and XCUI accessibility queries. Steps to Reproduce Create a new SwiftUI project. Use a simple text field with a keyboard toolbar button. Run on an iOS 26.1 device or simulator. Focus the text field to show the keyboard. Turn on VoiceOver and attempt to navigate to the toolbar button. Run an XCUITest attempting to locate the button
2
1
551
Feb ’26
Autogenerated UI Test Runner Blocked By Local Network Permission Prompt
I've recently updated one of our CI mac mini's to Sequoia in preparation for the transition to Tahoe later this year. Most things seemed to work just fine, however I see this dialog whenever the UI Tests try to run. This application BoostBrowerUITest-Runner is auto-generated by Xcode to launch your application and then run your UI Tests. We do not have any control over it, which is why this is most surprising. I've checked the codesigning identity with codesign -d -vvvv as well as looked at it's Info.plist and indeed the usage descriptions for everything are present (again, this is autogenerated, so I'm not surprised, but just wanted to confirm the string from the dialog was coming from this app) &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt; &lt;plist version="1.0"&gt; &lt;dict&gt; &lt;key&gt;BuildMachineOSBuild&lt;/key&gt; &lt;string&gt;22A380021&lt;/string&gt; &lt;key&gt;CFBundleAllowMixedLocalizations&lt;/key&gt; &lt;true/&gt; &lt;key&gt;CFBundleDevelopmentRegion&lt;/key&gt; &lt;string&gt;en&lt;/string&gt; &lt;key&gt;CFBundleExecutable&lt;/key&gt; &lt;string&gt;BoostBrowserUITests-Runner&lt;/string&gt; &lt;key&gt;CFBundleIdentifier&lt;/key&gt; &lt;string&gt;company.thebrowser.Browser2UITests.xctrunner&lt;/string&gt; &lt;key&gt;CFBundleInfoDictionaryVersion&lt;/key&gt; &lt;string&gt;6.0&lt;/string&gt; &lt;key&gt;CFBundleName&lt;/key&gt; &lt;string&gt;BoostBrowserUITests-Runner&lt;/string&gt; &lt;key&gt;CFBundlePackageType&lt;/key&gt; &lt;string&gt;APPL&lt;/string&gt; &lt;key&gt;CFBundleShortVersionString&lt;/key&gt; &lt;string&gt;1.0&lt;/string&gt; &lt;key&gt;CFBundleSignature&lt;/key&gt; &lt;string&gt;????&lt;/string&gt; &lt;key&gt;CFBundleSupportedPlatforms&lt;/key&gt; &lt;array&gt; &lt;string&gt;MacOSX&lt;/string&gt; &lt;/array&gt; &lt;key&gt;CFBundleVersion&lt;/key&gt; &lt;string&gt;1&lt;/string&gt; &lt;key&gt;DTCompiler&lt;/key&gt; &lt;string&gt;com.apple.compilers.llvm.clang.1_0&lt;/string&gt; &lt;key&gt;DTPlatformBuild&lt;/key&gt; &lt;string&gt;24A324&lt;/string&gt; &lt;key&gt;DTPlatformName&lt;/key&gt; &lt;string&gt;macosx&lt;/string&gt; &lt;key&gt;DTPlatformVersion&lt;/key&gt; &lt;string&gt;15.0&lt;/string&gt; &lt;key&gt;DTSDKBuild&lt;/key&gt; &lt;string&gt;24A324&lt;/string&gt; &lt;key&gt;DTSDKName&lt;/key&gt; &lt;string&gt;macosx15.0.internal&lt;/string&gt; &lt;key&gt;DTXcode&lt;/key&gt; &lt;string&gt;1620&lt;/string&gt; &lt;key&gt;DTXcodeBuild&lt;/key&gt; &lt;string&gt;16C5031c&lt;/string&gt; &lt;key&gt;LSBackgroundOnly&lt;/key&gt; &lt;true/&gt; &lt;key&gt;LSMinimumSystemVersion&lt;/key&gt; &lt;string&gt;13.0&lt;/string&gt; &lt;key&gt;NSAppTransportSecurity&lt;/key&gt; &lt;dict&gt; &lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt; &lt;true/&gt; &lt;/dict&gt; &lt;key&gt;NSAppleEventsUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSBluetoothAlwaysUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSCalendarsUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSCameraUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSContactsUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSDesktopFolderUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSDocumentsFolderUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSDownloadsFolderUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSFileProviderDomainUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSFileProviderPresenceUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSLocalNetworkUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSLocationUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSMicrophoneUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSMotionUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSNetworkVolumesUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSPhotoLibraryUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSRemindersUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSRemovableVolumesUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSSpeechRecognitionUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSSystemAdministrationUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSSystemExtensionUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;OSBundleUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;/dict&gt; &lt;/plist&gt; Additionally, spctl --assess --type execute BoostBrowserUITests-Runner.app return an exit code of 0 so I assume that means it can launch just fine, and applications are allowed to be run from "anywhere" in System Settings. I've found the XCUIProtectedResource.localNetwork value, but it seems to only be accessible on iOS for some reason (FB17829325). I'm trying to figure out why this is happening on this machine so I can either fix our code or fix the machine. I have an Apple script that will allow it, but it's fiddly and I'd prefer to fix this the correct way either with the machine or with fixing our testing code.
10
1
2.4k
Feb ’26
XCTFail immediately aborts the test in Xcode 26 — no retry on failure
Hi, I’m seeing an unexpected change in how XCTFail behaves in UI tests after updating Xcode. I use the following helper method: `func waitForExistance(file: StaticString, line: UInt) -> Self { if !(element.exists || element.waitForExistence(timeout: Configuration.current.predicateTimeout)) { XCTFail("couldn't find element: \(element) after \(Configuration.current.predicateTimeout) seconds", file: file, line: line) return self } else { return self } }` In Xcode 16.4, this worked as expected: – when an element wasn’t found, XCTFail was triggered, but the test continued running, allowing my retry logic to execute. After updating to Xcode 26.1 / 26.2 - the test now immediately aborts after XCTFail, without executing the next retry. The logs show: `t = 113.22s Tear Down t = 113.22s Terminate com.viessmann.care:81789 *** Assertion failure in -[UITests.Tests _caughtUnhandledDeveloperExceptionPermittingControlFlowInterruptions:caughtInterruptionException:whileExecutingBlock:], XCTestCase+IssueHandling.m:273 Test Case '-[UITests.Tests test_case]' failed (114.323 seconds). Flushing outgoing messages to the IDE with timeout 600.00s Received confirmation that IDE processed remaining outgoing messages` It looks like XCTFail in Xcode 26 is now treated as an unhandled developer exception, which stops the test execution immediately, even when it’s called inside a helper method. This was not the case in earlier versions. My questions: Is this a regression in XCTest? Or an intentional change in how XCTFail behaves in newer Xcode versions? Should failures now be reported differently (e.g., using record(.init(type: .assertionFailure, …))) if I want to continue the test instead of aborting it? I would like to restore the previous behavior where the failure is logged without terminating the entire test, so my retry mechanism can still run. Has anyone else run into this after upgrading? Thanks in advance! If you’d like, I can also add recommended workarounds that actually work with Xcode 16.4 (e.g., replacing XCTFail with a non-terminating issue record).
4
3
1.1k
Feb ’26
Xcode 26: `IDERunDestination: Supported platforms for the buildables in the current scheme is empty` repeatedly logged when running tests from `.xctestrun` file
We are seeing repeated occurrences of the following log line in test runs triggered via .xctestrun files on iOS 26: IDERunDestination: Supported platforms for the buildables in the current scheme is empty. This line is printed n number of times after a test fails, significantly increasing test execution duration (2–3 minutes extra in some cases). The issue does not occur when tests are built and run together from Xcode directly — it’s specific to .xctestrun-based executions using xcodebuild test-without-building. Steps to Reproduce: Use Xcode 26 to build a sample XCTest target (we used a simple UI test project). Locate the generated .xctestrun file under DerivedData/.../Build/Products/.... Run tests using: xcodebuild -xctestrun /path/to/sample.xctestrun \ -destination "id=<device_id>" \ test-without-building Observe the logs during test failure. Observed Behavior: The log line IDERunDestination: Supported platforms for the buildables in the current scheme is empty appears multiple times. The test cleanup and teardown phase takes significantly longer (2–3 minutes). Expected Behavior: The log should appear once or not at all. Test cleanup time should remain consistent. Additional Information: Affects only iOS 26 devices and .xctestrun-based runs. Not reproducible on iOS < 26. Xcode 26 and 26.x beta versions tried. Reproducible both locally and on CI systems using real devices. Same .xctestrun file, when used on older OS versions, does not cause delay.
1
5
953
Jan ’26
xcodebuild does not retry UI tests with xcode 26.2
I have ios UI tests that are build with command xcodebuild -workspace ... -scheme ... -configuration ... -derivedDataPath ... -destination ... -testPlan ... build-for-testing Then I run them with xcodebuild -destination ... -resultBundlePath ... -parallel-testing-worker-count ... -xctestrun ... test-without-building I also have following settings in testplan "maximumTestRepetitions" : 3, "testRepetitionMode" : "retryOnFailure", With xcode 16.4 tests were retried on failure up to 3 times, but migrating to xcode 26.2 seems to change this behavior and tests are no longer retried. Is it expected behaviour and I should manually add params like -test-iterations 3 -retry-tests-on-failure into xcodebuild test-without-building command? Here is xcresult - https://drive.google.com/file/d/1xHgiZnIK_lptDSUf-fCyEnT9zYubZlCf/view?usp=sharing And testrun file -https://drive.google.com/file/d/1aBi2sTjy8zFYtgYn1KA60T8gwD_OnBCF/view?usp=sharing
1
0
797
Jan ’26
Xcode 16 issues with mac virtualisation
I have created a virtualised Mac machine where I am running the latest Xcode version 16.4 with macOS Sequoia as the base image. While running XCTest tests, I am observing a clear difference in behaviour between virtualised and non-virtualised setups. Below is the command I am using to run the tests: /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -xctestrun /Users/ltuser/290103613/xcui.xctestrun -destination "platform=iOS Simulator,id=79A5F8CC-4A2E-4C91-895D-AE97E25CB824,arch=arm64,OS=18.0" test-without-building "-only-testing:ClassName/MethodName/testName" -derivedDataPath /Users/ltuser/290103613/Archive -verbose IDELogLevel=debug IDETestLogLevel=debug ONLY_ACTIVE_ARCH=YES Observed Issue On virtualised hosts: Every XCTest is executed twice This happens for both passed and failed tests The behaviour is consistent across all virtualised machines On non-virtualised (bare-metal) Macs: Tests execute only once, as expected Debugging Steps Taken Multiple destination suspicion Initially, I noticed the following warning: --- xcodebuild: WARNING: Using the first of multiple matching destinations: { platform:iOS Simulator, id:0FFB9082-94AB-4D0A-A731-CC4452BDD4E7, OS:17.0, name:iPhone 15 } { platform:iOS Simulator, id:0FFB9082-94AB-4D0A-A731-CC4452BDD4E7, OS:17.0, name:iPhone 15 } This raised suspicion that tests might be running twice due to multiple matching destinations. Destination narrowed down I then explicitly restricted the destination to a single simulator UDID, after which: The warning disappeared However, the issue still persists Tests continue to run twice on virtualised hosts Version Comparison Xcode 16.4 + macOS Sequoia (virtualised) → Tests run twice Xcode 15.x (same setup otherwise) → Tests run once Questions Has anyone else faced this issue with Xcode 16.x on virtualised macOS? Is this a known issue with Xcode 16 + Virtualisation? Is there any recommended workaround or configuration change to avoid duplicate test execution? I am currently blocked on this issue and would appreciate confirmation on whether this is an Xcode or virtualisation-related problem. Thank you.
2
1
493
Jan ’26
"Application has not loaded accessibility" timeout followed by silent auto-recovery corrupts framework state on iOS 18
On iOS 18, when XCUITest encounters an "Application has not loaded accessibility" error after the 60 second timeout, it performs an undocumented auto-recovery ("Setting up automation session") instead of halting the test as documented. This leaves the XCUITest framework in a corrupted state, causing subsequent tests in the same session to fail with unexpected behavior. Expected Behavior (per Apple documentation): Any failure in the launch sequence will be reported as a test failure and the test will be halted at that point. Actual Behavior: XCUITest waits 60 seconds for accessibility to load Logs "Application has not loaded accessibility" error Instead of halting, performs "Setting up automation session" (auto-recovery) Test continues with corrupted framework state Subsequent tests in the same session fail with phantom element queries Steps Run XCUITest suite on a real iOS 18 device Have an app with moderately heavy initialization (e.g., synchronous network operations during bootstrap) Observe intermittent "accessibility not loaded" errors When error occurs, subsequent tests fail with unexpected behavior Test Logs Evidence First test (accessibility failure + recovery): t = 11.11s Wait for accessibility to load t = 71.14s Capturing diagnostic spindump t = 76.24s Assertion Failure: Application 'com.example.app' has not loaded accessibility t = 76.26s Setting up automation session ← Undocumented recovery t = 77.29s Tear Down Second test (corrupted state): t = 35.01s Tap "signin-button" t = 35.55s Waiting for "bannerButtonStackFirstItem" ← Query NOT in test code! t = 40.58s Assertion Failure: Failed to find element The second test executes element queries that do not exist in its source code, indicating leaked/corrupted state from the previous test's failed recovery. Note: The tearDown() method terminates the app but cannot reset the internal state of the XCUITest framework itself, so corruption persists across tests. We are observing this behavior consistently on iOS 18 real devices. We would like to know: Is this a known issue with XCUITest on iOS 18? Is anyone experiencing similar "accessibility not loaded" failures followed by auto-recovery? Is the "Setting up automation session" recovery behavior intentional or a bug? Is there a recommended workaround to prevent framework state corruption between tests?
0
1
747
Jan ’26
XCUIDevice.shared.appearance = .dark no longer works when running UI tests via xcodebuild on newer iOS versions
I am seeing a regression with XCUIDevice.shared.appearance = .dark in UI tests that only affects xcodebuild, not Xcode’s UI test runner. Setup • UI tests written using XCTest • Dark mode forced in setUp() using: XCUIDevice.shared.appearance = .dark • Tests target an iOS simulator • Same test target, same scheme Expected behavior The app launches in Dark Mode for UI tests, as it did previously. Actual behavior • When running UI tests from Xcode (Product > Test), Dark Mode is applied correctly. • When running the same UI tests via xcodebuild test, Dark Mode is ignored and the app launches in Light Mode. • No test failures, no warnings, no logs indicating the appearance override was skipped. Regression details • This used to work on older iOS versions when running via xcodebuild. • The regression appears after updating iOS simulators (exact version boundary still unclear). • No relevant changes were made to the test code, scheme, or CI configuration. • xcodebuild otherwise launches and runs UI tests normally. Notes • The issue is specific to XCUIDevice.shared.appearance. • Other UI test functionality behaves as expected. • This makes CI results inconsistent with local Xcode runs and breaks visual assumptions in snapshot and layout-based tests. Question Is this a known regression or an intentional behavior change in recent iOS / Xcode versions? If intentional, what is the supported way to reliably force Dark Mode in UI tests when running via xcodebuild? This currently makes xcodebuild-based CI UI testing unreliable compared to Xcode’s test runner.
1
3
566
Jan ’26
UI Tests troubles with Xcode 26.1 and Xcode 26.2
Since I moved to Xcode 26.1 and Xcode 26.2 then, my UI tests all fail only for iOS 26+, for both simulator and real device. Everything worked perfectly with Xcode 26.0, and the code base of the application under test and the test cases are the same. With Xcode 26.0, the tests pass for iOS 26+ and iOS < 26, for both simulator and real device. In addition, even the Accessibility Inspector tool fails to display the view hierarchy for iOS 26+ with Xcode 26.2. With Xcode 26.0, whatever are the devices and the OS versions, the tool was able to display the view hierarchy. Otherwise the tool is empty even if the device and app are selected. This failing tests issue occurs both on my local environment and on GitHub Actions runners, excluding the hypothesis I have troubles with my own side. The error message for failing tests explains the element cannot be found anymore. Given for example the test case: @MainActor func testMakeScreenshotsForDocumentation_Button() { let app = launchApp() goToComponentsSheet(app) waitForButtonToAppear(withWording: "app_components_button_label", app) tapButton(withWording: "app_components_button_label", app) tapButton(withWording: "Strong", app) takeScreenshot(named: "component_button_", ACDC.buttonX, ACDC.buttonY, ACDC.buttonWidth, ACDC.buttonHeight, app) } the goToComponentSheet(app) line shows the error: ActionsDocumentationScreenshots.testMakeScreenshotsForDocumentation_Button() In details the function: /// Opens the page of the components, i.e. tap on the 2nd of the tab bar @MainActor func goToComponentsSheet(_ app: XCUIApplication) { app.tabBars.buttons.element(boundBy: 1).tap() } with the following error on the app.tabBars line: .../AppTestCase.swift:157 testMakeScreenshotsForDocumentation_Button(): Failed to tap Button (Element at index 1): No matches found for Descendants matching type TabBar from input {(Application, pid: 1883)} I have the feeling with Xcode 26.2 (and Xcode 26.1) the view hierarchy is not accessible anymore for both XCUITest framework and Accessibility Inspector tool. Note I have on my side macOS Tahoe 26.1 (25B78) and my GitHub Actions runner are on macOS 26.0.1 (25A362). When I used Xcode 26.0 I was on macOS Tahoe 26.1 (25B78) . Any ideas? 🙂
2
0
809
Jan ’26
Xcode 26.4: xcodebuild test crashes on iOS 15.2 Simulators before XCTest bootstrap due to ResultDataPublisher missing Foundation.URLRequest.httpMethod symbol
I’m seeing a crash when running XCTest on iOS 15.2 Simulators with Xcode 26.4. The test bundle never starts. xctest crashes before establishing the XCTest connection. This appears to be a regression from Xcode 26.2. The same test flow worked with Xcode 26.2, but crashes with Xcode 26.4. This does not appear to be caused by my app or package code. I can reproduce it with a minimal Swift Package that only imports Foundation and has one XCTest case using URLRequest.httpMethod. Environment: Xcode with failure: 26.4 Xcode that worked: 26.2 macOS: 26.2 Destinations tested: iPhone SE (2nd generation), iOS 15.2 Simulator iPad mini (6th generation), iOS 15.2 Simulator Test command: xcodebuild test Swift Package deployment target: iOS 15.2 Swift tools version: 6.1 Minimal reproduction package: Package.swift // swift-tools-version:6.1 import PackageDescription let package = Package( name: "FoundationOnlyRepro", platforms: [.iOS("15.2")], products: [ .library( name: "FoundationOnlyRepro", targets: ["FoundationOnlyRepro"] ) ], targets: [ .target(name: "FoundationOnlyRepro"), .testTarget( name: "FoundationOnlyReproTests", dependencies: ["FoundationOnlyRepro"] ) ], swiftLanguageModes: [.v6] ) Sources/FoundationOnlyRepro/FoundationOnlyRepro.swift import Foundation public struct FoundationOnlyRepro { public init() {} public func makeRequest() -> URLRequest { var request = URLRequest(url: URL(string: "https://example.invalid")!) request.httpMethod = "GET" return request } } Tests/FoundationOnlyReproTests/FoundationOnlyReproTests.swift import XCTest import Foundation @testable import FoundationOnlyRepro final class FoundationOnlyReproTests: XCTestCase { func testURLRequestHTTPMethod() { let request = FoundationOnlyRepro().makeRequest() XCTAssertEqual(request.httpMethod, "GET") } } Command used: xcodebuild test \ -scheme FoundationOnlyRepro \ -destination 'platform=iOS Simulator,name=iPhone SE (2nd generation),OS=15.2' \ -derivedDataPath /tmp/rdp-dd \ -quiet The same kind of crash also occurs when using an iPad mini (6th generation) iOS 15.2 Simulator destination. Result: Testing failed: xctest (...) encountered an error (Early unexpected exit, operation never finished bootstrapping - no restart will be attempted. (Underlying Error: Test crashed with signal abrt before establishing connection.)) ** TEST FAILED ** The diagnostic stderr shows: dyld[28688]: Symbol not found: _$s10Foundation10URLRequestV10httpMethodSSSgvs Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/ResultDataPublisher.framework/ ResultDataPublisher Expected in: /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 15.2.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/Foundation.framework/Foundation Demangling the missing symbol: xcrun swift-demangle '_$s10Foundation10URLRequestV10httpMethodSSSgvs' Output: Foundation.URLRequest.httpMethod.setter : Swift.String? I also checked the iOS 15.2 simulator runtime. The symbol appears to exist in: /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 15.2.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift/libswiftFoundation.dylib but ResultDataPublisher.framework appears to be resolving it from: .../System/Library/Frameworks/Foundation.framework/Foundation This suggests the crash is in Xcode’s XCTest/result publishing infrastructure, not in the app/test bundle. Questions: Is Xcode 26.4 + iOS 15.2 Simulator + xcodebuild test expected to be supported? Is there a supported workaround to disable or avoid ResultDataPublisher.framework for command-line XCTest runs?
Replies
1
Boosts
0
Views
600
Activity
Apr ’26
XCTest Bundle cannot access local network.
We’re having an iPad issue accessing the local network with iPadOS 26.3. We have an automation system that tests our app on an iPad using accessibility tags. the XCTest test code sends messages from the iPad via TCP/IP to setup external test equipment. The messages abruptly stopped transmitting across the iPad blood-brain barrier with iPadOS 26.3 (26.2.1 and earlier works fine). The technique that worked involved installing a helper app with the same bundleID as our app, allowing the helper app to access the network, and when our app runs it has network access through the helper. It’s clever and kludgey. Forums that we referenced in the past: https://developer.apple.com/forums/thread/663858 TN3179: Understanding local network privacy | Apple Developer Documentation I suspect that something was changed in 26.3 that closed our window. I need two things: ID what is different in 26.3 and fix the automation system. If there’s a new way for XCUITest code to access the local network I’m happy to try it out.
Replies
9
Boosts
0
Views
999
Activity
Apr ’26
XCUITesting Photo Library on macOS
Using XCUITesting to access images using photos picker. The code is roughly like this: photoPickerButton.click() try await Task.sleep(for: .seconds(2)) let images = app.descendants(matching: .image) .matching(identifier: "PXGGridLayout-Info") // select the first 5 images for ix in 0..<5 { let image = images.element(boundBy: ix) if image.exists { image.click() } } // why do I have to click this twice? Output says the second // click does "Falling back to element center point". app.buttons["Add"].firstMatch.click() app.buttons["Add"].firstMatch.click() Other than the minor annoyance of having to click the Add button twice that works fine. The issue is the second time in the same test I run almost identical code, but only try to select the first image as a test for handling duplicate selections. Doesn't work. The first image returned from the query exists, but is not hittable. This is a testing issue as running the steps manually work fine. The element I want to click is this: Attributes: Image, 0x73511d540, {{1794.0, 745.2}, {98.0, 73.5}}, identifier: 'PXGGridLayout-Info', label: 'February 02, 1:00 PM' Any ideas?
Replies
0
Boosts
0
Views
863
Activity
Mar ’26
UI Testing for iPadOS 26 Menu Bar items
I need to validate whether specific menu items are correctly enabled/disabled. The XCUIAutomation elements for my menu items do not appear in the tree shown by displaying the XCUIApplication object in the debugger when building and testing the iPadOS version of my application. When running the application in an iPad simulator, I can make the menu bar appear by swiping down. The testing works as expected for the MacOS build and test. I did try to use the recording feature, but was not successful in creating a series of commands that worked for a test run.
Replies
0
Boosts
0
Views
729
Activity
Mar ’26
Xcode 26.3 incompatible with FireBase and WeTest?
Popular automated testing systems like FireBase [1] and WeTest [2] expect the uploaded test to include the Debug-iphoneos directory generated by Xcode. However, in all of our builds on Xcode 26.3, this folder is created but remains empty. There are some other folders with the same name in subdirectories, but these only contain intermediate build files. Now we're looking for configuration or settings in Xcode to restore the original behavior, where the top-level Debug-iphoneos directory gets populated with a complete image of the test target, include the binary and resource files. Any suggestions would be much appreciated! [1] https://firebase.google.com/docs/test-lab/ios/run-xctest [2] https://www.wetest.net/documents/detail/automation/d8yaA7yz
Replies
0
Boosts
0
Views
557
Activity
Mar ’26
XCode 26 - xcodebuild command hangs on XCFail
On XCode 26.x, calling XCFail with continueAfterFailure set to false causes xcodebuild command to hang indefinitely if the XCUIApplication object is stored outside the test method. Create a new template iOS App project with UI tests Add XCFail(...) to a UI test test-case Set the XCUIApplication in self.app (avoiding this fixes the hang) Run tests with xcodebuild test The terminal hangs forever Reproduction example import XCTest final class TestAppUITests: XCTestCase { var app: XCUIApplication? = nil override func setUpWithError() throws { continueAfterFailure = false } override func tearDownWithError() throws { app?.terminate() } @MainActor func testExample() throws { let app = XCUIApplication() self.app = app // <- HERE this causes the problem app.launch() XCTFail() } } Reproduction environment macOS Sequoia 15.7.3 Tested XCode 26.3 and XCode 26.2 have the hang Tested XCode 16.4 does work as expected XCode 16.4 The issue does not happen on XCode 16.4, and is likely introduced in XCode 26. Related threads: https://developer.apple.com/forums/thread/809989 https://developer.apple.com/forums/thread/793307 Work-around Do not store XCUIApplication in the XCTestCase instance, maintain it scoped to the test methods.
Replies
3
Boosts
0
Views
680
Activity
Mar ’26
Xcode Cloud UI test runs often fail due to "The test runner failed to initialize for UI testing. (Underlying Error: Timed out waiting for AX loaded notification)"
I've yet to encounter these errors when running UI tests locally, but I'd estimate that 80-90% of my test runs on Xcode Cloud fail due to it. I'm just testing with iPhone simulators, I've set it to retry on failure, but no luck. Is there a setting or something I can tweak in my test code to improve the situation? I am on the latest xcode/iOS dev betas - but it was doing this before I switched to them from.
Replies
0
Boosts
1
Views
742
Activity
Mar ’26
Not precise scroll in XCTest
I'm working on UI automation tests using XCUITest for an iOS application (iPhone). My goal is to programmatically scroll a view by a very precise number of pixels (e.g., exactly 500 points down). I understand the scroll(byDeltaX:deltaY:) method is not supported on iPhone, so I'm using the coordinate-based drag method as an alternative. Specifically, I am using XCUICoordinate.press(forDuration:thenDragTo:withVelocity:thenHoldForDuration:) to simulate a drag gesture. I calculate a start and end coordinate with a specific vertical offset in points, expecting the view to scroll by that exact amount. However, I'm observing that the resulting scroll offset is not perfectly accurate. There's a consistent error of several pixels, making the scroll amount unpredictable for precise test assertions. Is there a known limitation to the accuracy of coordinate-based dragging for simulating programmatic scrolling? Are there any alternative methods or best practices within XCUITest to achieve a more reliable and pixel-accurate scroll on iPhone, or is this level of precision simply not achievable with the current framework?
Replies
1
Boosts
0
Views
558
Activity
Mar ’26
XCUIElementTypes used vary between MacOS and iPadOS
I have a UI Test that is trying to drive a stepper. When run as iPad app, the tree has: Button, 0x10ce7f860, {{492.0, 98.5}, {47.0, 32.0}}, identifier: 'GraphDataViewNumBinsStepper-Decrement', label: 'Number of bins: 4, Decrement' Button, 0x10ce802a0, {{539.0, 98.5}, {47.0, 32.0}}, identifier: 'GraphDataViewNumBinsStepper-Increment', label: 'Number of bins: 4, Increment' When run a Mac app, the tree has: StaticText, 0x7fcf5380d670, {{1575.2, 530.0}, {109.0, 16.0}}, identifier: 'GraphDataViewNumBinsStepperText', value: Number of bins: 4 Stepper, 0x7fcf5380d7b0, {{1691.5, 527.0}, {15.0, 22.0}}, identifier: 'GraphDataViewNumBinsStepper', value: 0 IncrementArrow, 0x7fcf5380e420, {{1692.5, 528.0}, {13.0, 10.0}}, Disabled DecrementArrow, 0x7fcf5380e560, {{1692.5, 538.0}, {13.0, 10.0}}, Disabled Is this an expected situation or might I be building for an inappropriate version of MacOS or iPadOS?
Replies
0
Boosts
0
Views
579
Activity
Feb ’26
Sign In Failed on Apple
When testing the same warning comes up (sign in failed network error) for the apple and demo sign in I created. The google one works fine. I am confused because when I test in Xcode on multiple devices it works perfect. The tester has got the same error repeatedly? Most recently as a fix have updated the production backend. Does anyone have any insight why the xcode testing works for me but not the tester (I understand they are on a live device- I have even connected my phone and tested on that).
Replies
0
Boosts
0
Views
294
Activity
Feb ’26
SwiftUI .toolbar(placement: .keyboard) item not exposed to accessibility on iOS 26.1 (affects VoiceOver + XCUITest)
Description On iOS 26.1, a ToolbarItem placed in .keyboard is no longer exposed to the accessibility hierarchy. As a result: VoiceOver cannot focus or activate the toolbar button XCUITest cannot discover the element, making the UI impossible to test TextEditor() .toolbar { ToolbarItem(placement: .keyboard) { Button("Done") { /* action */ } } } This worked correctly on previous iOS versions. The button appears visually but is missing from both VoiceOver navigation and XCUI accessibility queries. Steps to Reproduce Create a new SwiftUI project. Use a simple text field with a keyboard toolbar button. Run on an iOS 26.1 device or simulator. Focus the text field to show the keyboard. Turn on VoiceOver and attempt to navigate to the toolbar button. Run an XCUITest attempting to locate the button
Replies
2
Boosts
1
Views
551
Activity
Feb ’26
Autogenerated UI Test Runner Blocked By Local Network Permission Prompt
I've recently updated one of our CI mac mini's to Sequoia in preparation for the transition to Tahoe later this year. Most things seemed to work just fine, however I see this dialog whenever the UI Tests try to run. This application BoostBrowerUITest-Runner is auto-generated by Xcode to launch your application and then run your UI Tests. We do not have any control over it, which is why this is most surprising. I've checked the codesigning identity with codesign -d -vvvv as well as looked at it's Info.plist and indeed the usage descriptions for everything are present (again, this is autogenerated, so I'm not surprised, but just wanted to confirm the string from the dialog was coming from this app) &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt; &lt;plist version="1.0"&gt; &lt;dict&gt; &lt;key&gt;BuildMachineOSBuild&lt;/key&gt; &lt;string&gt;22A380021&lt;/string&gt; &lt;key&gt;CFBundleAllowMixedLocalizations&lt;/key&gt; &lt;true/&gt; &lt;key&gt;CFBundleDevelopmentRegion&lt;/key&gt; &lt;string&gt;en&lt;/string&gt; &lt;key&gt;CFBundleExecutable&lt;/key&gt; &lt;string&gt;BoostBrowserUITests-Runner&lt;/string&gt; &lt;key&gt;CFBundleIdentifier&lt;/key&gt; &lt;string&gt;company.thebrowser.Browser2UITests.xctrunner&lt;/string&gt; &lt;key&gt;CFBundleInfoDictionaryVersion&lt;/key&gt; &lt;string&gt;6.0&lt;/string&gt; &lt;key&gt;CFBundleName&lt;/key&gt; &lt;string&gt;BoostBrowserUITests-Runner&lt;/string&gt; &lt;key&gt;CFBundlePackageType&lt;/key&gt; &lt;string&gt;APPL&lt;/string&gt; &lt;key&gt;CFBundleShortVersionString&lt;/key&gt; &lt;string&gt;1.0&lt;/string&gt; &lt;key&gt;CFBundleSignature&lt;/key&gt; &lt;string&gt;????&lt;/string&gt; &lt;key&gt;CFBundleSupportedPlatforms&lt;/key&gt; &lt;array&gt; &lt;string&gt;MacOSX&lt;/string&gt; &lt;/array&gt; &lt;key&gt;CFBundleVersion&lt;/key&gt; &lt;string&gt;1&lt;/string&gt; &lt;key&gt;DTCompiler&lt;/key&gt; &lt;string&gt;com.apple.compilers.llvm.clang.1_0&lt;/string&gt; &lt;key&gt;DTPlatformBuild&lt;/key&gt; &lt;string&gt;24A324&lt;/string&gt; &lt;key&gt;DTPlatformName&lt;/key&gt; &lt;string&gt;macosx&lt;/string&gt; &lt;key&gt;DTPlatformVersion&lt;/key&gt; &lt;string&gt;15.0&lt;/string&gt; &lt;key&gt;DTSDKBuild&lt;/key&gt; &lt;string&gt;24A324&lt;/string&gt; &lt;key&gt;DTSDKName&lt;/key&gt; &lt;string&gt;macosx15.0.internal&lt;/string&gt; &lt;key&gt;DTXcode&lt;/key&gt; &lt;string&gt;1620&lt;/string&gt; &lt;key&gt;DTXcodeBuild&lt;/key&gt; &lt;string&gt;16C5031c&lt;/string&gt; &lt;key&gt;LSBackgroundOnly&lt;/key&gt; &lt;true/&gt; &lt;key&gt;LSMinimumSystemVersion&lt;/key&gt; &lt;string&gt;13.0&lt;/string&gt; &lt;key&gt;NSAppTransportSecurity&lt;/key&gt; &lt;dict&gt; &lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt; &lt;true/&gt; &lt;/dict&gt; &lt;key&gt;NSAppleEventsUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSBluetoothAlwaysUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSCalendarsUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSCameraUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSContactsUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSDesktopFolderUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSDocumentsFolderUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSDownloadsFolderUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSFileProviderDomainUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSFileProviderPresenceUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSLocalNetworkUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSLocationUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSMicrophoneUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSMotionUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSNetworkVolumesUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSPhotoLibraryUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSRemindersUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSRemovableVolumesUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSSpeechRecognitionUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSSystemAdministrationUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;NSSystemExtensionUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;key&gt;OSBundleUsageDescription&lt;/key&gt; &lt;string&gt;Access is necessary for automated testing.&lt;/string&gt; &lt;/dict&gt; &lt;/plist&gt; Additionally, spctl --assess --type execute BoostBrowserUITests-Runner.app return an exit code of 0 so I assume that means it can launch just fine, and applications are allowed to be run from "anywhere" in System Settings. I've found the XCUIProtectedResource.localNetwork value, but it seems to only be accessible on iOS for some reason (FB17829325). I'm trying to figure out why this is happening on this machine so I can either fix our code or fix the machine. I have an Apple script that will allow it, but it's fiddly and I'd prefer to fix this the correct way either with the machine or with fixing our testing code.
Replies
10
Boosts
1
Views
2.4k
Activity
Feb ’26
XCTFail immediately aborts the test in Xcode 26 — no retry on failure
Hi, I’m seeing an unexpected change in how XCTFail behaves in UI tests after updating Xcode. I use the following helper method: `func waitForExistance(file: StaticString, line: UInt) -> Self { if !(element.exists || element.waitForExistence(timeout: Configuration.current.predicateTimeout)) { XCTFail("couldn't find element: \(element) after \(Configuration.current.predicateTimeout) seconds", file: file, line: line) return self } else { return self } }` In Xcode 16.4, this worked as expected: – when an element wasn’t found, XCTFail was triggered, but the test continued running, allowing my retry logic to execute. After updating to Xcode 26.1 / 26.2 - the test now immediately aborts after XCTFail, without executing the next retry. The logs show: `t = 113.22s Tear Down t = 113.22s Terminate com.viessmann.care:81789 *** Assertion failure in -[UITests.Tests _caughtUnhandledDeveloperExceptionPermittingControlFlowInterruptions:caughtInterruptionException:whileExecutingBlock:], XCTestCase+IssueHandling.m:273 Test Case '-[UITests.Tests test_case]' failed (114.323 seconds). Flushing outgoing messages to the IDE with timeout 600.00s Received confirmation that IDE processed remaining outgoing messages` It looks like XCTFail in Xcode 26 is now treated as an unhandled developer exception, which stops the test execution immediately, even when it’s called inside a helper method. This was not the case in earlier versions. My questions: Is this a regression in XCTest? Or an intentional change in how XCTFail behaves in newer Xcode versions? Should failures now be reported differently (e.g., using record(.init(type: .assertionFailure, …))) if I want to continue the test instead of aborting it? I would like to restore the previous behavior where the failure is logged without terminating the entire test, so my retry mechanism can still run. Has anyone else run into this after upgrading? Thanks in advance! If you’d like, I can also add recommended workarounds that actually work with Xcode 16.4 (e.g., replacing XCTFail with a non-terminating issue record).
Replies
4
Boosts
3
Views
1.1k
Activity
Feb ’26
Xcode 26: `IDERunDestination: Supported platforms for the buildables in the current scheme is empty` repeatedly logged when running tests from `.xctestrun` file
We are seeing repeated occurrences of the following log line in test runs triggered via .xctestrun files on iOS 26: IDERunDestination: Supported platforms for the buildables in the current scheme is empty. This line is printed n number of times after a test fails, significantly increasing test execution duration (2–3 minutes extra in some cases). The issue does not occur when tests are built and run together from Xcode directly — it’s specific to .xctestrun-based executions using xcodebuild test-without-building. Steps to Reproduce: Use Xcode 26 to build a sample XCTest target (we used a simple UI test project). Locate the generated .xctestrun file under DerivedData/.../Build/Products/.... Run tests using: xcodebuild -xctestrun /path/to/sample.xctestrun \ -destination "id=<device_id>" \ test-without-building Observe the logs during test failure. Observed Behavior: The log line IDERunDestination: Supported platforms for the buildables in the current scheme is empty appears multiple times. The test cleanup and teardown phase takes significantly longer (2–3 minutes). Expected Behavior: The log should appear once or not at all. Test cleanup time should remain consistent. Additional Information: Affects only iOS 26 devices and .xctestrun-based runs. Not reproducible on iOS < 26. Xcode 26 and 26.x beta versions tried. Reproducible both locally and on CI systems using real devices. Same .xctestrun file, when used on older OS versions, does not cause delay.
Replies
1
Boosts
5
Views
953
Activity
Jan ’26
xcodebuild does not retry UI tests with xcode 26.2
I have ios UI tests that are build with command xcodebuild -workspace ... -scheme ... -configuration ... -derivedDataPath ... -destination ... -testPlan ... build-for-testing Then I run them with xcodebuild -destination ... -resultBundlePath ... -parallel-testing-worker-count ... -xctestrun ... test-without-building I also have following settings in testplan "maximumTestRepetitions" : 3, "testRepetitionMode" : "retryOnFailure", With xcode 16.4 tests were retried on failure up to 3 times, but migrating to xcode 26.2 seems to change this behavior and tests are no longer retried. Is it expected behaviour and I should manually add params like -test-iterations 3 -retry-tests-on-failure into xcodebuild test-without-building command? Here is xcresult - https://drive.google.com/file/d/1xHgiZnIK_lptDSUf-fCyEnT9zYubZlCf/view?usp=sharing And testrun file -https://drive.google.com/file/d/1aBi2sTjy8zFYtgYn1KA60T8gwD_OnBCF/view?usp=sharing
Replies
1
Boosts
0
Views
797
Activity
Jan ’26
Xcode 16 issues with mac virtualisation
I have created a virtualised Mac machine where I am running the latest Xcode version 16.4 with macOS Sequoia as the base image. While running XCTest tests, I am observing a clear difference in behaviour between virtualised and non-virtualised setups. Below is the command I am using to run the tests: /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -xctestrun /Users/ltuser/290103613/xcui.xctestrun -destination "platform=iOS Simulator,id=79A5F8CC-4A2E-4C91-895D-AE97E25CB824,arch=arm64,OS=18.0" test-without-building "-only-testing:ClassName/MethodName/testName" -derivedDataPath /Users/ltuser/290103613/Archive -verbose IDELogLevel=debug IDETestLogLevel=debug ONLY_ACTIVE_ARCH=YES Observed Issue On virtualised hosts: Every XCTest is executed twice This happens for both passed and failed tests The behaviour is consistent across all virtualised machines On non-virtualised (bare-metal) Macs: Tests execute only once, as expected Debugging Steps Taken Multiple destination suspicion Initially, I noticed the following warning: --- xcodebuild: WARNING: Using the first of multiple matching destinations: { platform:iOS Simulator, id:0FFB9082-94AB-4D0A-A731-CC4452BDD4E7, OS:17.0, name:iPhone 15 } { platform:iOS Simulator, id:0FFB9082-94AB-4D0A-A731-CC4452BDD4E7, OS:17.0, name:iPhone 15 } This raised suspicion that tests might be running twice due to multiple matching destinations. Destination narrowed down I then explicitly restricted the destination to a single simulator UDID, after which: The warning disappeared However, the issue still persists Tests continue to run twice on virtualised hosts Version Comparison Xcode 16.4 + macOS Sequoia (virtualised) → Tests run twice Xcode 15.x (same setup otherwise) → Tests run once Questions Has anyone else faced this issue with Xcode 16.x on virtualised macOS? Is this a known issue with Xcode 16 + Virtualisation? Is there any recommended workaround or configuration change to avoid duplicate test execution? I am currently blocked on this issue and would appreciate confirmation on whether this is an Xcode or virtualisation-related problem. Thank you.
Replies
2
Boosts
1
Views
493
Activity
Jan ’26
"Application has not loaded accessibility" timeout followed by silent auto-recovery corrupts framework state on iOS 18
On iOS 18, when XCUITest encounters an "Application has not loaded accessibility" error after the 60 second timeout, it performs an undocumented auto-recovery ("Setting up automation session") instead of halting the test as documented. This leaves the XCUITest framework in a corrupted state, causing subsequent tests in the same session to fail with unexpected behavior. Expected Behavior (per Apple documentation): Any failure in the launch sequence will be reported as a test failure and the test will be halted at that point. Actual Behavior: XCUITest waits 60 seconds for accessibility to load Logs "Application has not loaded accessibility" error Instead of halting, performs "Setting up automation session" (auto-recovery) Test continues with corrupted framework state Subsequent tests in the same session fail with phantom element queries Steps Run XCUITest suite on a real iOS 18 device Have an app with moderately heavy initialization (e.g., synchronous network operations during bootstrap) Observe intermittent "accessibility not loaded" errors When error occurs, subsequent tests fail with unexpected behavior Test Logs Evidence First test (accessibility failure + recovery): t = 11.11s Wait for accessibility to load t = 71.14s Capturing diagnostic spindump t = 76.24s Assertion Failure: Application 'com.example.app' has not loaded accessibility t = 76.26s Setting up automation session ← Undocumented recovery t = 77.29s Tear Down Second test (corrupted state): t = 35.01s Tap "signin-button" t = 35.55s Waiting for "bannerButtonStackFirstItem" ← Query NOT in test code! t = 40.58s Assertion Failure: Failed to find element The second test executes element queries that do not exist in its source code, indicating leaked/corrupted state from the previous test's failed recovery. Note: The tearDown() method terminates the app but cannot reset the internal state of the XCUITest framework itself, so corruption persists across tests. We are observing this behavior consistently on iOS 18 real devices. We would like to know: Is this a known issue with XCUITest on iOS 18? Is anyone experiencing similar "accessibility not loaded" failures followed by auto-recovery? Is the "Setting up automation session" recovery behavior intentional or a bug? Is there a recommended workaround to prevent framework state corruption between tests?
Replies
0
Boosts
1
Views
747
Activity
Jan ’26
XCUIDevice.shared.appearance = .dark no longer works when running UI tests via xcodebuild on newer iOS versions
I am seeing a regression with XCUIDevice.shared.appearance = .dark in UI tests that only affects xcodebuild, not Xcode’s UI test runner. Setup • UI tests written using XCTest • Dark mode forced in setUp() using: XCUIDevice.shared.appearance = .dark • Tests target an iOS simulator • Same test target, same scheme Expected behavior The app launches in Dark Mode for UI tests, as it did previously. Actual behavior • When running UI tests from Xcode (Product > Test), Dark Mode is applied correctly. • When running the same UI tests via xcodebuild test, Dark Mode is ignored and the app launches in Light Mode. • No test failures, no warnings, no logs indicating the appearance override was skipped. Regression details • This used to work on older iOS versions when running via xcodebuild. • The regression appears after updating iOS simulators (exact version boundary still unclear). • No relevant changes were made to the test code, scheme, or CI configuration. • xcodebuild otherwise launches and runs UI tests normally. Notes • The issue is specific to XCUIDevice.shared.appearance. • Other UI test functionality behaves as expected. • This makes CI results inconsistent with local Xcode runs and breaks visual assumptions in snapshot and layout-based tests. Question Is this a known regression or an intentional behavior change in recent iOS / Xcode versions? If intentional, what is the supported way to reliably force Dark Mode in UI tests when running via xcodebuild? This currently makes xcodebuild-based CI UI testing unreliable compared to Xcode’s test runner.
Replies
1
Boosts
3
Views
566
Activity
Jan ’26
UI Tests troubles with Xcode 26.1 and Xcode 26.2
Since I moved to Xcode 26.1 and Xcode 26.2 then, my UI tests all fail only for iOS 26+, for both simulator and real device. Everything worked perfectly with Xcode 26.0, and the code base of the application under test and the test cases are the same. With Xcode 26.0, the tests pass for iOS 26+ and iOS < 26, for both simulator and real device. In addition, even the Accessibility Inspector tool fails to display the view hierarchy for iOS 26+ with Xcode 26.2. With Xcode 26.0, whatever are the devices and the OS versions, the tool was able to display the view hierarchy. Otherwise the tool is empty even if the device and app are selected. This failing tests issue occurs both on my local environment and on GitHub Actions runners, excluding the hypothesis I have troubles with my own side. The error message for failing tests explains the element cannot be found anymore. Given for example the test case: @MainActor func testMakeScreenshotsForDocumentation_Button() { let app = launchApp() goToComponentsSheet(app) waitForButtonToAppear(withWording: "app_components_button_label", app) tapButton(withWording: "app_components_button_label", app) tapButton(withWording: "Strong", app) takeScreenshot(named: "component_button_", ACDC.buttonX, ACDC.buttonY, ACDC.buttonWidth, ACDC.buttonHeight, app) } the goToComponentSheet(app) line shows the error: ActionsDocumentationScreenshots.testMakeScreenshotsForDocumentation_Button() In details the function: /// Opens the page of the components, i.e. tap on the 2nd of the tab bar @MainActor func goToComponentsSheet(_ app: XCUIApplication) { app.tabBars.buttons.element(boundBy: 1).tap() } with the following error on the app.tabBars line: .../AppTestCase.swift:157 testMakeScreenshotsForDocumentation_Button(): Failed to tap Button (Element at index 1): No matches found for Descendants matching type TabBar from input {(Application, pid: 1883)} I have the feeling with Xcode 26.2 (and Xcode 26.1) the view hierarchy is not accessible anymore for both XCUITest framework and Accessibility Inspector tool. Note I have on my side macOS Tahoe 26.1 (25B78) and my GitHub Actions runner are on macOS 26.0.1 (25A362). When I used Xcode 26.0 I was on macOS Tahoe 26.1 (25B78) . Any ideas? 🙂
Replies
2
Boosts
0
Views
809
Activity
Jan ’26