# Swift Testing automated leak checking?

**URL:** <https://forums.swift.org/t/swift-testing-automated-leak-checking/84720>\
**Category:** Swift Testing\
**Created:** [February 13, 2026, 2:01am UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720 "2026-02-13T02:01:35Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jon\_Shier](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/jon_shier/32/921_2.png) [@Jon\_Shier](https://forums.swift.org/u/Jon_Shier)\
**Post date:** [February 13, 2026, 2:01am UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/1 "2026-02-13T02:01:35Z")

</div>

With XCTest I can add an `atexit` handler to run `leaks` on the `xctest` process to check for leaks.

```swift
// Only build when built through SPM, as tests run through Xcode don't like this.
// Add LEAKS flag once we figure out a way to automate this.
// Can run by invoking swift test -c debug -Xswiftc -DLEAKS in the Alamofire directory.
// Sample code from the Swift forums: https://forums.swift.org/t/test-for-memory-leaks-in-ci/36526/19
#if SWIFT_PACKAGE && LEAKS && os(macOS)
final class LeaksTests: XCTestCase {
    @MainActor
    func testForLeaks() {
        // Sets up an atexit handler that invokes the leaks tool.
        atexit {
            @discardableResult
            func leaksTo(_ file: String) -> Process {
                let out = FileHandle(forWritingAtPath: file)!
                defer {
                    try! out.close()
                }
                let process = Process()
                process.launchPath = "/usr/bin/leaks"
                process.arguments = ["\(getpid())"]
                process.standardOutput = out
                process.standardError = out
                process.launch()
                process.waitUntilExit()
                return process
            }
            let process = leaksTo("/dev/null")
            guard process.terminationReason == .exit && [0, 1].contains(process.terminationStatus) else {
                print("Process terminated: \(process.terminationReason): \(process.terminationStatus)")
                exit(255)
            }
            if process.terminationStatus == 1 {
                print("================")
                print("Leaks Detected!!!")
                leaksTo("/dev/tty")
            }
            exit(process.terminationStatus)
        }
    }
}
#endif

```

This works fine and I've used it to find leaks in my code and my tests. However, attempting the same thing for Swift Testing fails due to a restriction on the test helper.

```swift
@Suite
struct SwiftTestingLeaksTest {
    @Test
    func forLeaks() {
        // Sets up an atexit handler that invokes the leaks tool.
        atexit {
            @discardableResult
            func leaksTo(_ file: String) -> Process {
                let out = FileHandle(forWritingAtPath: file)!
                defer {
                    try! out.close()
                }
                let process = Process()
                process.launchPath = "/usr/bin/leaks"
                process.arguments = ["\(getpid())"]
                process.standardOutput = out
                process.standardError = out
                process.launch()
                process.waitUntilExit()
                return process
            }
            let process = leaksTo("/dev/null")
            guard process.terminationReason == .exit && [0, 1].contains(process.terminationStatus) else {
                print("Process terminated: \(process.terminationReason): \(process.terminationStatus)")
                exit(255)
            }
            if process.terminationStatus == 1 {
                print("================")
                print("Leaks Detected!!!")
                leaksTo("/dev/tty")
            }
            exit(process.terminationStatus)
        }
    }
}

```

> Process 34426 is not debuggable. Due to security restrictions, leaks can only show or save contents of readonly memory of restricted processes.
> 
> Process: swiftpm-testing-helper [34426]

Is there any alternative for Swift Testing?

---

<div class="post-metadata">

**Author:** ![Jon\_Shier](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/jon_shier/32/921_2.png) [@Jon\_Shier](https://forums.swift.org/u/Jon_Shier)\
**Post date:** [February 13, 2026, 2:03am UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/2 "2026-02-13T02:03:10Z")

</div>

Hmm, running the test command with `sudo` does show a leak, but still prints the failure message.

---

<div class="post-metadata">

**Author:** ![grynspan](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/grynspan/32/15315_2.png) [@grynspan](https://forums.swift.org/u/grynspan)\
**Post date:** [February 13, 2026, 2:25am UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/3 "2026-02-13T02:25:02Z")

</div>

This is a known issue with the code signature on `swiftpm-testing-helper`. Thanks for the ping!

**Edit:** Would you mind telling me what version of Xcode you have installed?

---

<div class="post-metadata">

**Author:** ![smontgomery](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/smontgomery/32/965_2.png) [@smontgomery](https://forums.swift.org/u/smontgomery)\
**Post date:** [February 13, 2026, 4:22am UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/4 "2026-02-13T04:22:01Z")

</div>

> [@Jon\_Shier](#):
>
> Process 34426 is not debuggable. Due to security restrictions, leaks can only show or save contents of readonly memory of restricted processes.
> 
> Process: swiftpm-testing-helper [34426]

This is _supposed_ to be fixed in Xcode versions 16.2 and later. From that version's [release notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-16_2-release-notes#Swift-Package-Manager):

> ### Resolved Issues
> 
> - Fixed an issue where lldb couldn’t attach to the Swift Testing host binary. (136630386)

Echo'ing @grynspan, could you share what Xcode version you are using? Or are you using a [Swift.org](http://Swift.org) toolchain by chance? (That should work too, but good to know either way.)

---

<div class="post-metadata">

**Author:** ![Jon\_Shier](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/jon_shier/32/921_2.png) [@Jon\_Shier](https://forums.swift.org/u/Jon_Shier)\
**Post date:** [February 13, 2026, 4:41am UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/5 "2026-02-13T04:41:42Z")

</div>

That was with the Xcode 26.3 RC, but it was the same on the other Xcode 26 versions I've tried in the past.

---

<div class="post-metadata">

**Author:** ![grynspan](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/grynspan/32/15315_2.png) [@grynspan](https://forums.swift.org/u/grynspan)\
**Post date:** [February 13, 2026, 2:18pm UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/6 "2026-02-13T14:18:20Z")

</div>

Would you please share the output of these commands run on your Mac?

```sh
xcode-select -p
swift --version

```

---

<div class="post-metadata">

**Author:** ![Jon\_Shier](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/jon_shier/32/921_2.png) [@Jon\_Shier](https://forums.swift.org/u/Jon_Shier)\
**Post date:** [February 13, 2026, 2:35pm UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/7 "2026-02-13T14:35:20Z")

</div>

> /Applications/Xcode\_26.3.app/Contents/Developer  
> swift-driver version: 1.127.15 Apple Swift version 6.2.4 (swiftlang-6.2.4.1.4 clang-1700.6.4.2)  
> Target: arm64-apple-macosx26.0

---

<div class="post-metadata">

**Author:** ![smontgomery](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/smontgomery/32/965_2.png) [@smontgomery](https://forums.swift.org/u/smontgomery)\
**Post date:** [February 13, 2026, 6:36pm UTC](https://forums.swift.org/t/swift-testing-automated-leak-checking/84720/8 "2026-02-13T18:36:58Z")

</div>

Thank you @Jon_Shier, we investigated further and believe this problem with `swiftpm-testing-helper` lacking entitlements necessary to allow debugging has reappeared in recent Xcode versions. We are investigating further now; appreciate you bringing it to our attention. (170331271)
