1

パッケージの初期化、コンパイル、テストなどのために呼び出すコマンドラインアプリをSwiftで開発していswiftます.SwiftパッケージマネージャーとXcodeを使用しています。私のツールでは、から呼び出しswiftますProcess。コマンドラインからツールを実行している場合、これは正常に機能します。ただし、Xcode からツールを実行している場合、奇妙なことが標準エラーに出力されます。特に、私は得る

Failed to open macho file at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift for reading: Too many levels of symbolic links

これは何が原因ですか?それを回避する方法はありますか、または Xcode からこのユーティリティを実行/テストしないようにすることはできますか?

再現手順は次のとおりです。

mkdir XcodeRedirectionTest
cd XcodeRedirectionTest
swift package init
open Package.swift

次に、Tests/XcodeRedirectionTestTests/XcodeRedirectionTestTests.swiftに貼り付けます

import XCTest

final class XcodeRedirectionTestTests: XCTestCase {
    func testExample() {
        let process = Process()
        process.launchPath = "/usr/bin/swift"
        process.arguments = ["--version"]

        let standardOutput = Pipe()
        let standardError = Pipe()

        process.standardOutput = standardOutput
        process.standardError = standardError

        process.launch()
        process.waitUntilExit()

        guard let output = String(data: standardOutput.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) else { XCTFail(); return }
        guard let error = String(data: standardError.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) else { XCTFail(); return }

        XCTAssertEqual(process.terminationReason, .exit)
        XCTAssertEqual(process.terminationStatus, 0)
        XCTAssertEqual(error, "")
        XCTAssert(output.starts(with: "Apple Swift version 5.4"))
    }
}

Xcode でのテストは次のエラーで失敗します

file://.../XcodeRedirectionTest/Tests/XcodeRedirectionTestTests/XcodeRedirectionTestTests.swift: test failure: XcodeRedirectionTestTests.testExample() failed: XCTAssertEqual failed: ("2021-05-18 19:43:18.084463-0400 swift[2836:4100702] Failed to open macho file at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift for reading: Too many levels of symbolic links
") is not equal to ("")

つまり(スクロールする必要がありません)、標準エラーは最終的に

Failed to open macho file at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift for reading: Too many levels of symbolic links

ただし、swift testコマンド ラインからの実行は成功します。標準誤差なし!

問題があれば、私は macOS Big Sur 11.2.3 で Xcode 12.5 を実行しています。

4

1 に答える 1