The Swift Package Index logo.Swift Package Index

Build Information

Failed to build TunnelMonitorKit, reference master (c15886), with Swift 6.4 for tvOS using Xcode 27.0 on 20 Sep 2026 16:05:14 UTC.

Build Command

env DEVELOPER_DIR=/Applications/Xcode-27.0.0-Release.Candidate.app xcrun xcodebuild -IDEClonedSourcePackagesDirPathOverride=$PWD/.dependencies -skipMacroValidation -skipPackagePluginValidation -derivedDataPath $PWD/.derivedData build -scheme TunnelMonitorKit -destination generic/platform=tvOS

Build Log

    :
 72 |     }
 73 |
 74 |     override public var status: NEVPNStatus {
    |                         |       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                         `- note: add '@available' attribute to enclosing property
 75 |         return currentStatus
 76 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift:15:23: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
10 |
11 | /// Contains information about why communication with tunnel failed
12 | public enum TMCommunicationError: Error {
   |             `- note: add '@available' attribute to enclosing enum
13 |
14 |     /// The extension is not in a state in which it can be communicated with
15 |     case invalidState(NEVPNStatus)
   |                       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
16 |
17 |     /// The manager connection instance could not be cast to a NETunnelProviderSession or is nil
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:63:45: error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                |                            `- error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:81:57: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
79 |     }
80 |
81 |     private static func parseRoutes(string: String) -> [NEIPv4Route] {
   |                         |                               `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   |                         `- note: add '@available' attribute to enclosing static method
82 |         return string.split(separator: ",")
83 |             .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift:19:11: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
17 | private let routeRegex = try! NSRegularExpression(pattern: "^(?<address>\(ipPattern)):(?<subnet>\(ipPattern))$")
18 |
19 | extension NEIPv4Route {
   | |         `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
20 |
21 |     /// Required to prevent invalid IP routes from being constructed, e.g. 0.0.0.0:0
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:1: warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:11: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |         `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:11: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |         `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:28:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
29 |     public static var allCases: [NEVPNStatus] {
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:29:34: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | `- note: add '@available' attribute to enclosing extension
29 |     public static var allCases: [NEVPNStatus] {
   |                       |          `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   |                       `- note: add '@available' attribute to enclosing static property
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
31 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:28:11: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | |         `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
29 |     public static var allCases: [NEVPNStatus] {
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
Failed frontend command:
SwiftCompile normal arm64 (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode

/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -emit-module -experimental-skip-non-inlinable-function-bodies-without-types /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMOSLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageContainer.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageRouter.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TunnelMonitor.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/TunnelConfigurationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelMonitorKit.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NSTextCheckingResult+Util.swift -target arm64-apple-tvos15.0 -disable-cross-import-overlay-search -load-resolved-plugin /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib/swift/host/plugins/libFoundationMacros.dylib\#/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/bin/swift-plugin-server\#FoundationMacros -load-resolved-plugin /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib/swift/host/plugins/libObservationMacros.dylib\#/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/bin/swift-plugin-server\#ObservationMacros -load-resolved-plugin /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib/swift/host/plugins/libSwiftMacros.dylib\#/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/bin/swift-plugin-server\#SwiftMacros -disable-implicit-swift-modules -Xcc -fno-implicit-modules -Xcc -fno-implicit-module-maps -explicit-swift-module-map-file /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-dependencies-1.json -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk -I /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos -Isystem /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib -F /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos -F /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/Library/Frameworks -F /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk/Developer/Library/Frameworks -module-cache-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules -no-color-diagnostics -Xcc -fno-color-diagnostics -enable-testing -g -debug-info-format\=dwarf -dwarf-version\=4 -profile-generate -profile-coverage-mapping -swift-version 5 -Onone -D SWIFT_PACKAGE -D DEBUG -D SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE -D Xcode -serialize-debugging-options -enable-experimental-feature DebugDescriptionMacro -empty-abi-descriptor -validate-clang-modules-once -clang-build-session-file /Users/admin/builder/spi-builder-workspace/.derivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode -enable-anonymous-context-mangled-names -file-compilation-dir /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode -Xcc -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -Xcc -ivfsstatcache -Xcc /Users/admin/builder/spi-builder-workspace/.derivedData/SDKStatCaches.noindex/appletvos27.0-24J360-e829b21a6f8c9b70876ba0858053c044b32bfd8d43560033f8d89884cdb90028.sdkstatcache -Xcc -fmodules-prune-interval\=86400 -Xcc -fmodules-prune-after\=345600 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos/include -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources-normal/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources -Xcc -DSWIFT_PACKAGE -Xcc -DDEBUG\=1 -no-auto-bridging-header-chaining -module-name TunnelMonitorKit -const-gather-protocols-file /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit_const_extract_protocols.json -disable-clang-spi -clang-target arm64-apple-tvos27.0 -target-sdk-version 27.0 -target-sdk-name appletvos27.0 -in-process-plugin-server-path /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/libSwiftInProcPluginServer.dylib -emit-module-doc-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.swiftdoc -emit-module-source-info-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.swiftsourceinfo -emit-objc-header-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-Swift.h -serialize-diagnostics-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-primary-emit-module.dia -emit-dependencies-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-primary-emit-module.d -parse-as-library -o /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.swiftmodule -emit-abi-descriptor-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.abi.json
SwiftCompile normal arm64 Compiling\ TunnelMonitorKit.swift,\ NEIPv4Route+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelMonitorKit.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelMonitorKit.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TunnelMonitorKit.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NEIPv4Route+Util.swift
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift:19:11: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
17 | private let routeRegex = try! NSRegularExpression(pattern: "^(?<address>\(ipPattern)):(?<subnet>\(ipPattern))$")
18 |
19 | extension NEIPv4Route {
   | |         `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
20 |
21 |     /// Required to prevent invalid IP routes from being constructed, e.g. 0.0.0.0:0
SwiftCompile normal arm64 Compiling\ PacketTunnelConfiguration.swift,\ TunnelConfigurationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/TunnelConfigurationError.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:63:45: error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                |                            `- error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:81:57: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
79 |     }
80 |
81 |     private static func parseRoutes(string: String) -> [NEIPv4Route] {
   |                         |                               `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   |                         `- note: add '@available' attribute to enclosing static method
82 |         return string.split(separator: ",")
83 |             .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:64:31: error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
   |                               |- error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
   |                               `- note: add 'if #available' version check
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:64:31: error: 'init(tunnelRemoteAddress:)' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
   |                               |- error: 'init(tunnelRemoteAddress:)' is only available in tvOS 17.0 or newer
   |                               `- note: add 'if #available' version check
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:66:28: error: 'NEIPv4Settings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
   |                            |- error: 'NEIPv4Settings' is only available in tvOS 17.0 or newer
   |                            `- note: add 'if #available' version check
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:66:28: error: 'init(addresses:subnetMasks:)' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
   |                            |- error: 'init(addresses:subnetMasks:)' is only available in tvOS 17.0 or newer
   |                            `- note: add 'if #available' version check
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:67:22: error: 'includedRoutes' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
   |                      |- error: 'includedRoutes' is only available in tvOS 17.0 or newer
   |                      `- note: add 'if #available' version check
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
69 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:68:22: error: 'excludedRoutes' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
   |                      |- error: 'excludedRoutes' is only available in tvOS 17.0 or newer
   |                      `- note: add 'if #available' version check
69 |
70 |         networkSettings.ipv4Settings = ipv4Settings
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:70:25: error: 'ipv4Settings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
69 |
70 |         networkSettings.ipv4Settings = ipv4Settings
   |                         |- error: 'ipv4Settings' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
71 |
72 |         if let overheadBytes = tunnelOverheadBytes {
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:73:29: error: 'tunnelOverheadBytes' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
71 |
72 |         if let overheadBytes = tunnelOverheadBytes {
73 |             networkSettings.tunnelOverheadBytes = NSNumber(value: overheadBytes)
   |                             |- error: 'tunnelOverheadBytes' is only available in tvOS 17.0 or newer
   |                             `- note: add 'if #available' version check
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:75:25: error: 'mtu' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
73 |             networkSettings.tunnelOverheadBytes = NSNumber(value: overheadBytes)
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
   |                         |- error: 'mtu' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
77 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:76:25: error: 'dnsSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
   |                         |- error: 'dnsSettings' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
77 |
78 |         return networkSettings
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:76:39: error: 'NEDNSSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
   |                                       |- error: 'NEDNSSettings' is only available in tvOS 17.0 or newer
   |                                       `- note: add 'if #available' version check
77 |
78 |         return networkSettings
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile PacketTunnelConfiguration.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/TunnelConfigurationError.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TunnelConfigurationError.swift
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:76:39: error: 'init(servers:)' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
   |                                       |- error: 'init(servers:)' is only available in tvOS 17.0 or newer
   |                                       `- note: add 'if #available' version check
77 |
78 |         return networkSettings
SwiftCompile normal arm64 Compiling\ MessageContainer.swift,\ MessageRouter.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageContainer.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageRouter.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageContainer.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile MessageContainer.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageRouter.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile MessageRouter.swift
SwiftCompile normal arm64 Compiling\ NSTextCheckingResult+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NSTextCheckingResult+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NSTextCheckingResult+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NSTextCheckingResult+Util.swift
SwiftCompile normal arm64 Compiling\ NEProviderStopReason+StringConvertible.swift,\ NEVPNStatus+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:1: warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:11: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |         `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:11: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |         `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:28:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
29 |     public static var allCases: [NEVPNStatus] {
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:29:34: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | `- note: add '@available' attribute to enclosing extension
29 |     public static var allCases: [NEVPNStatus] {
   |                       |          `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   |                       `- note: add '@available' attribute to enclosing static property
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
31 |     }
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NEProviderStopReason+StringConvertible.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NEVPNStatus+Util.swift
SwiftCompile normal arm64 Compiling\ TMNativeTunnelProviderManager.swift,\ TMPacketTunnelProvider.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:16:34: error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
16 |     private let providerManager: NETunnelProviderManager
   |                                  `- error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
17 |
18 |     private var pollingInterval = 1.0
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:20:39: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
18 |     private var pollingInterval = 1.0
19 |
20 |     override public var tunnelStatus: NEVPNStatus { session?.status ?? .invalid }
   |                         |             `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   |                         `- note: add '@available' attribute to enclosing property
21 |     override public var tunnelMonitor: TunnelMonitor { monitor }
22 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:24:20: error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
22 |
23 |     /// Initialise VPNManager, which also saves/updates a tunnel configuration to the phone's VPN settings
24 |     init(provider: NETunnelProviderManager) {
   |     |              `- error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
   |     `- note: add '@available' attribute to enclosing initializer
25 |         providerManager = provider
26 |         super.init()
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:31:37: error: 'NEVPNStatusDidChange' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
22 |
23 |     /// Initialise VPNManager, which also saves/updates a tunnel configuration to the phone's VPN settings
24 |     init(provider: NETunnelProviderManager) {
   |     `- note: add '@available' attribute to enclosing initializer
25 |         providerManager = provider
26 |         super.init()
   :
29 |             self,
30 |             selector: #selector(handleVPNStatusChange),
31 |             name: Notification.Name.NEVPNStatusDidChange,
   |                                     |- error: 'NEVPNStatusDidChange' is only available in tvOS 17.0 or newer
   |                                     `- note: add 'if #available' version check
32 |             object: nil
33 |         )
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:37:65: error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
34 |     }
35 |
36 |     override var session: TMTunnelProviderSession? {
   |                  `- note: add '@available' attribute to enclosing property
37 |         if let providerSession = providerManager.connection as? NETunnelProviderSession {
   |                                                                 |- error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
   |                                                                 `- note: add 'if #available' version check
38 |             return TMTunnelProviderSessionNative(nativeSession: providerSession)
39 |         }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:37:50: error: 'connection' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
34 |     }
35 |
36 |     override var session: TMTunnelProviderSession? {
   |                  `- note: add '@available' attribute to enclosing property
37 |         if let providerSession = providerManager.connection as? NETunnelProviderSession {
   |                                                  |- error: 'connection' is only available in tvOS 17.0 or newer
   |                                                  `- note: add 'if #available' version check
38 |             return TMTunnelProviderSessionNative(nativeSession: providerSession)
39 |         }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:49:33: error: 'connection' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
41 |     }
42 |
43 |     override public func startTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
44 |         guard let session = session, session.status != .connected else {
45 |             log(.error, "Failed to start: tunnel is already connected!")
   :
47 |         }
48 |         do {
49 |             try providerManager.connection.startVPNTunnel()
   |                                 |- error: 'connection' is only available in tvOS 17.0 or newer
   |                                 `- note: add 'if #available' version check
50 |         } catch {
51 |             print("\(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:49:44: error: 'startVPNTunnel()' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
41 |     }
42 |
43 |     override public func startTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
44 |         guard let session = session, session.status != .connected else {
45 |             log(.error, "Failed to start: tunnel is already connected!")
   :
47 |         }
48 |         do {
49 |             try providerManager.connection.startVPNTunnel()
   |                                            |- error: 'startVPNTunnel()' is only available in tvOS 17.0 or newer
   |                                            `- note: add 'if #available' version check
50 |         } catch {
51 |             print("\(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:58:25: error: 'connection' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
55 |
56 |     /// Stop the service, closing the existing VPN Tunnel.
57 |     override public func stopTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
58 |         providerManager.connection.stopVPNTunnel()
   |                         |- error: 'connection' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
59 |         tunnelMonitor.stopMonitoring()
60 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:58:36: error: 'stopVPNTunnel()' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
55 |
56 |     /// Stop the service, closing the existing VPN Tunnel.
57 |     override public func stopTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
58 |         providerManager.connection.stopVPNTunnel()
   |                                    |- error: 'stopVPNTunnel()' is only available in tvOS 17.0 or newer
   |                                    `- note: add 'if #available' version check
59 |         tunnelMonitor.stopMonitoring()
60 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift:51:46: error: 'NETunnelNetworkSettings' is only available in tvOS 17.0 or newer
27 | /// the `TMPacketTunnelProvider` protocol, with the info.plist file pointing to it via the `NSExtensionPrincipalClass`
28 | /// entry.
29 | public protocol TMPacketTunnelProvider {
   |                 `- note: add '@available' attribute to enclosing protocol
30 |
31 |     init()
   :
47 |     ///   - settingsApplicationBlock: The block which applies the tunnel's protocol configuration object.
48 |     ///   - completionHandler: The completion handler which signals configuration completion to the provider manager.
49 |     func configureTunnel(
   |          `- note: add '@available' attribute to enclosing instance method
50 |         userConfigurationData: Data?,
51 |         settingsApplicationBlock: @escaping (NETunnelNetworkSettings?, ((Error?) -> Void)?) -> Void,
   |                                              `- error: 'NETunnelNetworkSettings' is only available in tvOS 17.0 or newer
52 |         completionHandler: @escaping (TMTunnelConfigurationError?) -> Void
53 |     )
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMNativeTunnelProviderManager.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMPacketTunnelProvider.swift
SwiftCompile normal arm64 Compiling\ TMPacketTunnelProviderNative.swift,\ TMTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:93:50: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 91 |     }
 92 |
 93 |     override public func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
    |                          |                       `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
    |                          `- note: add '@available' attribute to enclosing instance method
 94 |         log(.info, "Stopping tunnel provider with reason: \(reason)")
 95 |         provider.stopTunnel(with: reason, completionHandler: completionHandler)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:21:82: error: 'NEPacketTunnelProvider' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            |                                                                     `- error: 'NEPacketTunnelProvider' is only available in tvOS 17.0 or newer
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:31:48: error: 'NETunnelProviderProtocol' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 28 |     }
 29 |
 30 |     private var configuration: [String: Any]? {
    |                 `- note: add '@available' attribute to enclosing property
 31 |         return (self.protocolConfiguration as? NETunnelProviderProtocol)?.providerConfiguration
    |                                                |- error: 'NETunnelProviderProtocol' is only available in tvOS 17.0 or newer
    |                                                `- note: add 'if #available' version check
 32 |     }
 33 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:31:22: error: 'protocolConfiguration' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 28 |     }
 29 |
 30 |     private var configuration: [String: Any]? {
    |                 `- note: add '@available' attribute to enclosing property
 31 |         return (self.protocolConfiguration as? NETunnelProviderProtocol)?.providerConfiguration
    |                      |- error: 'protocolConfiguration' is only available in tvOS 17.0 or newer
    |                      `- note: add 'if #available' version check
 32 |     }
 33 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:31:75: error: 'providerConfiguration' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 28 |     }
 29 |
 30 |     private var configuration: [String: Any]? {
    |                 `- note: add '@available' attribute to enclosing property
 31 |         return (self.protocolConfiguration as? NETunnelProviderProtocol)?.providerConfiguration
    |                                                                           |- error: 'providerConfiguration' is only available in tvOS 17.0 or newer
    |                                                                           `- note: add 'if #available' version check
 32 |     }
 33 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:50:13: error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 32 |     }
 33 |
 34 |     private func configureProvider(completionHandler: @escaping (TMTunnelConfigurationError?) -> Void) {
    |                  `- note: add '@available' attribute to enclosing instance method
 35 |         guard let config = configuration else {
 36 |             completionHandler(.missingConfiguration)
    :
 48 |             let settings = networkSettings.packetTunnelNetworkSettings
 49 |
 50 |             setTunnelNetworkSettings(settings) { error in
    |             |- error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
    |             `- note: add 'if #available' version check
 51 |                 if let error = error {
 52 |                     completionHandler(.configurationDecodingFailed(decodeError: error))
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:57:52: error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 32 |     }
 33 |
 34 |     private func configureProvider(completionHandler: @escaping (TMTunnelConfigurationError?) -> Void) {
    |                  `- note: add '@available' attribute to enclosing instance method
 35 |         guard let config = configuration else {
 36 |             completionHandler(.missingConfiguration)
    :
 55 |                 self.provider.configureTunnel(
 56 |                     userConfigurationData: userConfigData,
 57 |                     settingsApplicationBlock: self.setTunnelNetworkSettings
    |                                                    |- error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
    |                                                    `- note: add 'if #available' version check
 58 |                 ) { error in
 59 |                     if let error = error {
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:16:39: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Defines events describing changes to the state of the tunnel provider, and the specific service it provides.
 13 | public protocol TMTunnelProviderManagerDelegate: AnyObject {
    |                 `- note: add '@available' attribute to enclosing protocol
 14 |
 15 |     /// Invoked whenever the tunnel provider state changes.
 16 |     func tunnelStateChanged(to state: NEVPNStatus)
    |          |                            `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |          `- note: add '@available' attribute to enclosing instance method
 17 |
 18 |     /// Invoked every time the service state changes. This contains information specific to the service provided by the
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:45:30: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 25 | /// `TMMockTunnelProviderManager` or `TMNativeTunnelProviderManager` using `TMMockTunnelProviderManagerFactory`, based
 26 | /// on whether mocking is desired or not.
 27 | public class TMTunnelProviderManager {
    |              `- note: add '@available' attribute to enclosing class
 28 |
 29 |     init() {}
    :
 43 |
 44 |     /// Current status of the network extension
 45 |     public var tunnelStatus: NEVPNStatus { fatalError("Must override") }
    |                |             `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                `- note: add '@available' attribute to enclosing property
 46 |
 47 |     /// Sends a message request to the tunnel provider.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:112:38: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
102 | /// A mock tunnel provider manager which allows the functionality of a specific TMPacketTunnelProvider to be executed on
103 | /// host/container app targets and simulator target environments.
104 | public class TMMockTunnelProviderManager: TMTunnelProviderManager {
    |              `- note: add '@available' attribute to enclosing class
105 |
106 |     private let provider: TMPacketTunnelProvider
    :
110 |     private let userConfigurationData: Data?
111 |
112 |     private var currentTunnelStatus: NEVPNStatus = .invalid {
    |                                      `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
113 |         didSet {
114 |             mockSession.setStatus(currentTunnelStatus)
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMPacketTunnelProviderNative.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMTunnelProviderManager.swift
SwiftCompile normal arm64 Compiling\ TMLogger.swift,\ TMOSLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMOSLogger.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMLogger.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMLogger.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMOSLogger.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMOSLogger.swift
SwiftCompile normal arm64 Compiling\ TMCommunicationError.swift,\ TunnelMonitor.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TunnelMonitor.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMCommunicationError.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TunnelMonitor.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TunnelMonitor.swift
SwiftCompile normal arm64 Compiling\ TMTunnelProviderManagerFactory.swift,\ TMTunnelProviderSession.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMTunnelProviderManagerFactory.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMTunnelProviderSession.swift
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/SDKExplicitPrecompiledModules
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/ExplicitPrecompiledModules
2026-09-20 12:05:05.176 xcodebuild[631:4014] [MT] IDERunDestination: Supported platforms for the buildables in the current scheme is empty.
2026-09-20 12:05:05.319 xcodebuild[631:4014] [MT] IDERunDestination: Supported platforms for the buildables in the current scheme is empty.
** BUILD FAILED **
The following build commands failed:
	SwiftCompile normal arm64 (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
	SwiftEmitModule normal arm64 Emitting\ module\ for\ TunnelMonitorKit (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
	Building workspace TunnelMonitorKit with scheme TunnelMonitorKit
(3 failures)
Command line invocation:
    /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/usr/bin/xcodebuild -IDEClonedSourcePackagesDirPathOverride=/Users/admin/builder/spi-builder-workspace/.dependencies -resolvePackageDependencies
Resolve Package Graph
Resolved source packages:
  TunnelMonitorKit: /Users/admin/builder/spi-builder-workspace
resolved source packages: TunnelMonitorKit
2026-09-20 12:05:10.687 xcodebuild[713:4452] [MT] IDERunDestination: Supported platforms for the buildables in the current scheme is empty.
2026-09-20 12:05:10.835 xcodebuild[713:4452] [MT] IDERunDestination: Supported platforms for the buildables in the current scheme is empty.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "TunnelMonitorKit",
  "name" : "TunnelMonitorKit",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "11.0"
    },
    {
      "name" : "macos",
      "version" : "10.13"
    }
  ],
  "products" : [
    {
      "name" : "TunnelMonitorKit",
      "targets" : [
        "TunnelMonitorKit"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "TunnelMonitorKitTests",
      "module_type" : "SwiftTarget",
      "name" : "TunnelMonitorKitTests",
      "path" : "Tests/TunnelMonitorKitTests",
      "sources" : [
        "MockingTests/TMMockTunnelProviderManagerTests.swift",
        "MockingTests/TMTunnelProviderSessionMockTests.swift",
        "TunnelCommunicationTests/MessageContainerTests.swift",
        "TunnelCommunicationTests/MessageRouterTests.swift",
        "TunnelCommunicationTests/TunnelMonitorTests.swift",
        "TunnelConfigurationTests/PacketTunnelConfigurationTests.swift",
        "UtilTests/NEIPv4RouteTests.swift"
      ],
      "target_dependencies" : [
        "TunnelMonitorKit"
      ],
      "type" : "test"
    },
    {
      "c99name" : "TunnelMonitorKit",
      "module_type" : "SwiftTarget",
      "name" : "TunnelMonitorKit",
      "path" : "Sources/TunnelMonitorKit",
      "product_memberships" : [
        "TunnelMonitorKit"
      ],
      "sources" : [
        "Logging/TMLogger.swift",
        "Logging/TMOSLogger.swift",
        "Mocking/TMNativeTunnelProviderManager.swift",
        "Mocking/TMPacketTunnelProvider.swift",
        "Mocking/TMPacketTunnelProviderNative.swift",
        "Mocking/TMTunnelProviderManager.swift",
        "Mocking/TMTunnelProviderManagerFactory.swift",
        "Mocking/TMTunnelProviderSession.swift",
        "TunnelCommunication/MessageContainer.swift",
        "TunnelCommunication/MessageRouter.swift",
        "TunnelCommunication/TMCommunicationError.swift",
        "TunnelCommunication/TunnelMonitor.swift",
        "TunnelConfiguration/PacketTunnelConfiguration.swift",
        "TunnelConfiguration/TunnelConfigurationError.swift",
        "TunnelMonitorKit.swift",
        "Util/NEIPv4Route+Util.swift",
        "Util/NEProviderStopReason+StringConvertible.swift",
        "Util/NEVPNStatus+Util.swift",
        "Util/NSTextCheckingResult+Util.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.5"
}
{
  "workspace" : {
    "name" : "TunnelMonitorKit",
    "schemes" : [
      "TunnelMonitorKit"
    ]
  }
}
2026-09-20 12:05:12.007 xcodebuild[721:4522] [MT] IDERunDestination: Supported platforms for the buildables in the current scheme is empty.
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-27.0.0-Release.Candidate.app xcrun xcodebuild -IDEClonedSourcePackagesDirPathOverride=$PWD/.dependencies -skipMacroValidation -skipPackagePluginValidation -derivedDataPath $PWD/.derivedData build -scheme TunnelMonitorKit -destination generic/platform=tvOS
Command line invocation:
    /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/usr/bin/xcodebuild -IDEClonedSourcePackagesDirPathOverride=/Users/admin/builder/spi-builder-workspace/.dependencies -skipMacroValidation -skipPackagePluginValidation -derivedDataPath /Users/admin/builder/spi-builder-workspace/.derivedData build -scheme TunnelMonitorKit -destination generic/platform=tvOS
Resolve Package Graph
Resolved source packages:
  TunnelMonitorKit: /Users/admin/builder/spi-builder-workspace
ComputePackagePrebuildTargetDependencyGraph
Prepare packages
CreateBuildRequest
SendProjectDescription
CreateBuildOperation
ComputeTargetDependencyGraph
note: Building targets in dependency order
note: Target dependency graph (3 targets)
    Target 'TunnelMonitorKitTests-product' in project 'TunnelMonitorKit'
        ➜ Explicit dependency on target 'TunnelMonitorKit' in project 'TunnelMonitorKit'
    Target 'TunnelMonitorKit-product' in project 'TunnelMonitorKit'
        ➜ Explicit dependency on target 'TunnelMonitorKit' in project 'TunnelMonitorKit'
    Target 'TunnelMonitorKit' in project 'TunnelMonitorKit' (no dependencies)
GatherProvisioningInputs
CreateBuildDescription
ClangStatCache /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang-stat-cache /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk /Users/admin/builder/spi-builder-workspace/.derivedData/SDKStatCaches.noindex/appletvos27.0-24J360-e829b21a6f8c9b70876ba0858053c044b32bfd8d43560033f8d89884cdb90028.sdkstatcache
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang-stat-cache /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk -o /Users/admin/builder/spi-builder-workspace/.derivedData/SDKStatCaches.noindex/appletvos27.0-24J360-e829b21a6f8c9b70876ba0858053c044b32bfd8d43560033f8d89884cdb90028.sdkstatcache
SwiftDriver TunnelMonitorKit normal arm64 com.apple.xcode.tools.swift.compiler (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftDriver -- /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc -parse-as-library -module-name TunnelMonitorKit -Onone @/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.SwiftFileList -DSWIFT_PACKAGE -DDEBUG -DSWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE -DXcode -plugin-path /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins/testing -enable-experimental-feature DebugDescriptionMacro -sdk /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk -target arm64-apple-tvos15.0 -g -module-cache-path /Users/admin/builder/spi-builder-workspace/.derivedData/ModuleCache.noindex -Xfrontend -serialize-debugging-options -profile-coverage-mapping -profile-generate -enable-testing -index-store-path /Users/admin/builder/spi-builder-workspace/.derivedData/Index.noindex/DataStore -Xcc -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -swift-version 5 -I /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos -Isystem /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib -F /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos -F /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/Library/Frameworks -F /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk/Developer/Library/Frameworks -c -j10 -enable-batch-mode -incremental -Xcc -ivfsstatcache -Xcc /Users/admin/builder/spi-builder-workspace/.derivedData/SDKStatCaches.noindex/appletvos27.0-24J360-e829b21a6f8c9b70876ba0858053c044b32bfd8d43560033f8d89884cdb90028.sdkstatcache -output-file-map /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-OutputFileMap.json -save-temps -no-color-diagnostics -explicit-module-build -module-cache-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules -clang-scanner-module-cache-path /Users/admin/builder/spi-builder-workspace/.derivedData/ModuleCache.noindex -sdk-module-cache-path /Users/admin/builder/spi-builder-workspace/.derivedData/SDKExplicitPrecompiledModules -emit-dependencies -emit-module -emit-module-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.swiftmodule -serialize-diagnostics -dependency-scan-serialize-diagnostics-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-dependency-scan.dia -validate-clang-modules-once -clang-build-session-file /Users/admin/builder/spi-builder-workspace/.derivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -fmodules-prune-interval\=86400 -Xcc -fmodules-prune-after\=345600 -emit-const-values -const-gather-protocols-list /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit_const_extract_protocols.json -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos/include -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources-normal/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources -Xcc -DSWIFT_PACKAGE -Xcc -DDEBUG\=1 -emit-objc-header -emit-objc-header-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-Swift.h -working-directory /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode -experimental-emit-module-separately -disable-cmo
SwiftCompile normal arm64 Compiling\ TMPacketTunnelProviderNative.swift,\ TMTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:93:50: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 91 |     }
 92 |
 93 |     override public func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
    |                          |                       `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
    |                          `- note: add '@available' attribute to enclosing instance method
 94 |         log(.info, "Stopping tunnel provider with reason: \(reason)")
 95 |         provider.stopTunnel(with: reason, completionHandler: completionHandler)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:21:82: error: 'NEPacketTunnelProvider' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            |                                                                     `- error: 'NEPacketTunnelProvider' is only available in tvOS 17.0 or newer
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:31:48: error: 'NETunnelProviderProtocol' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 28 |     }
 29 |
 30 |     private var configuration: [String: Any]? {
    |                 `- note: add '@available' attribute to enclosing property
 31 |         return (self.protocolConfiguration as? NETunnelProviderProtocol)?.providerConfiguration
    |                                                |- error: 'NETunnelProviderProtocol' is only available in tvOS 17.0 or newer
    |                                                `- note: add 'if #available' version check
 32 |     }
 33 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:31:22: error: 'protocolConfiguration' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 28 |     }
 29 |
 30 |     private var configuration: [String: Any]? {
    |                 `- note: add '@available' attribute to enclosing property
 31 |         return (self.protocolConfiguration as? NETunnelProviderProtocol)?.providerConfiguration
    |                      |- error: 'protocolConfiguration' is only available in tvOS 17.0 or newer
    |                      `- note: add 'if #available' version check
 32 |     }
 33 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:31:75: error: 'providerConfiguration' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 28 |     }
 29 |
 30 |     private var configuration: [String: Any]? {
    |                 `- note: add '@available' attribute to enclosing property
 31 |         return (self.protocolConfiguration as? NETunnelProviderProtocol)?.providerConfiguration
    |                                                                           |- error: 'providerConfiguration' is only available in tvOS 17.0 or newer
    |                                                                           `- note: add 'if #available' version check
 32 |     }
 33 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:50:13: error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 32 |     }
 33 |
 34 |     private func configureProvider(completionHandler: @escaping (TMTunnelConfigurationError?) -> Void) {
    |                  `- note: add '@available' attribute to enclosing instance method
 35 |         guard let config = configuration else {
 36 |             completionHandler(.missingConfiguration)
    :
 48 |             let settings = networkSettings.packetTunnelNetworkSettings
 49 |
 50 |             setTunnelNetworkSettings(settings) { error in
    |             |- error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
    |             `- note: add 'if #available' version check
 51 |                 if let error = error {
 52 |                     completionHandler(.configurationDecodingFailed(decodeError: error))
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:57:52: error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 32 |     }
 33 |
 34 |     private func configureProvider(completionHandler: @escaping (TMTunnelConfigurationError?) -> Void) {
    |                  `- note: add '@available' attribute to enclosing instance method
 35 |         guard let config = configuration else {
 36 |             completionHandler(.missingConfiguration)
    :
 55 |                 self.provider.configureTunnel(
 56 |                     userConfigurationData: userConfigData,
 57 |                     settingsApplicationBlock: self.setTunnelNetworkSettings
    |                                                    |- error: 'setTunnelNetworkSettings(_:completionHandler:)' is only available in tvOS 17.0 or newer
    |                                                    `- note: add 'if #available' version check
 58 |                 ) { error in
 59 |                     if let error = error {
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:16:39: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Defines events describing changes to the state of the tunnel provider, and the specific service it provides.
 13 | public protocol TMTunnelProviderManagerDelegate: AnyObject {
    |                 `- note: add '@available' attribute to enclosing protocol
 14 |
 15 |     /// Invoked whenever the tunnel provider state changes.
 16 |     func tunnelStateChanged(to state: NEVPNStatus)
    |          |                            `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |          `- note: add '@available' attribute to enclosing instance method
 17 |
 18 |     /// Invoked every time the service state changes. This contains information specific to the service provided by the
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMPacketTunnelProviderNative.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMTunnelProviderManager.swift
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:45:30: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 25 | /// `TMMockTunnelProviderManager` or `TMNativeTunnelProviderManager` using `TMMockTunnelProviderManagerFactory`, based
 26 | /// on whether mocking is desired or not.
 27 | public class TMTunnelProviderManager {
    |              `- note: add '@available' attribute to enclosing class
 28 |
 29 |     init() {}
    :
 43 |
 44 |     /// Current status of the network extension
 45 |     public var tunnelStatus: NEVPNStatus { fatalError("Must override") }
    |                |             `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                `- note: add '@available' attribute to enclosing property
 46 |
 47 |     /// Sends a message request to the tunnel provider.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:112:38: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
102 | /// A mock tunnel provider manager which allows the functionality of a specific TMPacketTunnelProvider to be executed on
103 | /// host/container app targets and simulator target environments.
104 | public class TMMockTunnelProviderManager: TMTunnelProviderManager {
    |              `- note: add '@available' attribute to enclosing class
105 |
106 |     private let provider: TMPacketTunnelProvider
    :
110 |     private let userConfigurationData: Data?
111 |
112 |     private var currentTunnelStatus: NEVPNStatus = .invalid {
    |                                      `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
113 |         didSet {
114 |             mockSession.setStatus(currentTunnelStatus)
SwiftCompile normal arm64 Compiling\ TMTunnelProviderManagerFactory.swift,\ TMTunnelProviderSession.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:46:9: error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 44 |     ) {
 45 |         // Initialise VPNManager, which also saves/updates a tunnel configuration to the phone's VPN settings
 46 |         NETunnelProviderManager.loadAllFromPreferences { (savedManagers, error) in
    |         |- error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
    |         `- note: add 'if #available' version check
 47 |             if let error = error {
 48 |                 log(.error, "Failed to load list of tunnel provider managers with error: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:46:33: error: 'loadAllFromPreferences(completionHandler:)' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 44 |     ) {
 45 |         // Initialise VPNManager, which also saves/updates a tunnel configuration to the phone's VPN settings
 46 |         NETunnelProviderManager.loadAllFromPreferences { (savedManagers, error) in
    |                                 |- error: 'loadAllFromPreferences(completionHandler:)' is only available in tvOS 17.0 or newer
    |                                 `- note: add 'if #available' version check
 47 |             if let error = error {
 48 |                 log(.error, "Failed to load list of tunnel provider managers with error: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:57:26: error: 'loadFromPreferences(completionHandler:)' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 55 |                 return
 56 |             }
 57 |             savedManager.loadFromPreferences { (error) in
    |                          |- error: 'loadFromPreferences(completionHandler:)' is only available in tvOS 17.0 or newer
    |                          `- note: add 'if #available' version check
 58 |                 if let error = error {
 59 |                     log(.error, "Failed to load tunnel provider manager: \(savedManager) error: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:64:32: error: 'NETunnelProviderProtocol' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 62 |                 }
 63 |
 64 |                 let provider = NETunnelProviderProtocol()
    |                                |- error: 'NETunnelProviderProtocol' is only available in tvOS 17.0 or newer
    |                                `- note: add 'if #available' version check
 65 |                 provider.providerBundleIdentifier = tunnelSettings.tunnelBundleID
 66 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:65:26: error: 'providerBundleIdentifier' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 63 |
 64 |                 let provider = NETunnelProviderProtocol()
 65 |                 provider.providerBundleIdentifier = tunnelSettings.tunnelBundleID
    |                          |- error: 'providerBundleIdentifier' is only available in tvOS 17.0 or newer
    |                          `- note: add 'if #available' version check
 66 |
 67 |                 let encoder = JSONEncoder()
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:76:30: error: 'providerConfiguration' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 74 |                     ]
 75 |
 76 |                     provider.providerConfiguration = config
    |                              |- error: 'providerConfiguration' is only available in tvOS 17.0 or newer
    |                              `- note: add 'if #available' version check
 77 |                     provider.serverAddress = networkSettings.tunnelRemoteAddress
 78 |                     provider.disconnectOnSleep = tunnelSettings.disconnectOnSleep
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:77:30: error: 'serverAddress' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 75 |
 76 |                     provider.providerConfiguration = config
 77 |                     provider.serverAddress = networkSettings.tunnelRemoteAddress
    |                              |- error: 'serverAddress' is only available in tvOS 17.0 or newer
    |                              `- note: add 'if #available' version check
 78 |                     provider.disconnectOnSleep = tunnelSettings.disconnectOnSleep
 79 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:78:30: error: 'disconnectOnSleep' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 76 |                     provider.providerConfiguration = config
 77 |                     provider.serverAddress = networkSettings.tunnelRemoteAddress
 78 |                     provider.disconnectOnSleep = tunnelSettings.disconnectOnSleep
    |                              |- error: 'disconnectOnSleep' is only available in tvOS 17.0 or newer
    |                              `- note: add 'if #available' version check
 79 |
 80 |                     savedManager.localizedDescription = tunnelSettings.managerLocalizedDescription
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:80:34: error: 'localizedDescription' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 78 |                     provider.disconnectOnSleep = tunnelSettings.disconnectOnSleep
 79 |
 80 |                     savedManager.localizedDescription = tunnelSettings.managerLocalizedDescription
    |                                  |- error: 'localizedDescription' is only available in tvOS 17.0 or newer
    |                                  `- note: add 'if #available' version check
 81 |                     savedManager.protocolConfiguration = provider
 82 |                     savedManager.isEnabled = true
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:81:34: error: 'protocolConfiguration' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 79 |
 80 |                     savedManager.localizedDescription = tunnelSettings.managerLocalizedDescription
 81 |                     savedManager.protocolConfiguration = provider
    |                                  |- error: 'protocolConfiguration' is only available in tvOS 17.0 or newer
    |                                  `- note: add 'if #available' version check
 82 |                     savedManager.isEnabled = true
 83 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:82:34: error: 'isEnabled' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 80 |                     savedManager.localizedDescription = tunnelSettings.managerLocalizedDescription
 81 |                     savedManager.protocolConfiguration = provider
 82 |                     savedManager.isEnabled = true
    |                                  |- error: 'isEnabled' is only available in tvOS 17.0 or newer
    |                                  `- note: add 'if #available' version check
 83 |
 84 |                     savedManager.saveToPreferences { error in
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift:84:34: error: 'saveToPreferences(completionHandler:)' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Responsible for constructing mock or native packet tunnel provider managers.
 13 | public class TMTunnelProviderManagerFactory {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// Creates a mock provider manager, capable of executing tunnel provider logic implemented by the given
    :
 37 |     ///   - userConfiguration: Service specific configuration, required to configure the given `Provider`.
 38 |     ///   - completionHandler: Completion handler executed when the tunnel loading finishes.
 39 |     public static func loadNativeProviderManager<UserConfiguration: Codable>(
    |                        `- note: add '@available' attribute to enclosing static method
 40 |         tunnelSettings: TMTunnelSettings,
 41 |         networkSettings: TMNetworkSettings,
    :
 82 |                     savedManager.isEnabled = true
 83 |
 84 |                     savedManager.saveToPreferences { error in
    |                                  |- error: 'saveToPreferences(completionHandler:)' is only available in tvOS 17.0 or newer
    |                                  `- note: add 'if #available' version check
 85 |                         if let error = error {
 86 |                             log(.error, "Failed to save tunnel provider manager: \(savedManager) error: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:29:17: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 11 |
 12 | /// A base class allowing native and mock sessions to be used interchangebly.
 13 | public class TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// This method returns immediately after starting the process of connecting the tunnel.
    :
 27 |
 28 |     /// Returns the current session status.
 29 |     var status: NEVPNStatus { return .invalid }
    |         |       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |         `- note: add '@available' attribute to enclosing property
 30 |
 31 | }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:36:32: error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    |                                `- error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
 37 |
 38 |     public init(nativeSession: NETunnelProviderSession) {
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:38:32: error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
 37 |
 38 |     public init(nativeSession: NETunnelProviderSession) {
    |            |                   `- error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
    |            `- note: add '@available' attribute to enclosing initializer
 39 |         self.nativeSession = nativeSession
 40 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:42:33: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    :
 40 |     }
 41 |
 42 |     override public var status: NEVPNStatus {
    |                         |       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                         `- note: add '@available' attribute to enclosing property
 43 |         return nativeSession.status
 44 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:63:32: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 58 |
 59 | /// A mock tunnel provider session.
 60 | public class TMTunnelProviderSessionMock: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 61 |
 62 |     public let mockMessageRouter = MessageRouter()
 63 |     private var currentStatus: NEVPNStatus = .invalid
    |                                `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 64 |     private var provider: TMPacketTunnelProvider?
 65 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:70:37: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 58 |
 59 | /// A mock tunnel provider session.
 60 | public class TMTunnelProviderSessionMock: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 61 |
 62 |     public let mockMessageRouter = MessageRouter()
    :
 68 |     }
 69 |
 70 |     public func setStatus(_ status: NEVPNStatus) {
    |                 |                   `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                 `- note: add '@available' attribute to enclosing instance method
 71 |         currentStatus = status
 72 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:74:33: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 58 |
 59 | /// A mock tunnel provider session.
 60 | public class TMTunnelProviderSessionMock: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 61 |
 62 |     public let mockMessageRouter = MessageRouter()
    :
 72 |     }
 73 |
 74 |     override public var status: NEVPNStatus {
    |                         |       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                         `- note: add '@available' attribute to enclosing property
 75 |         return currentStatus
 76 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:43:30: error: 'status' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    :
 40 |     }
 41 |
 42 |     override public var status: NEVPNStatus {
    |                         `- note: add '@available' attribute to enclosing property
 43 |         return nativeSession.status
    |                              |- error: 'status' is only available in tvOS 17.0 or newer
    |                              `- note: add 'if #available' version check
 44 |     }
 45 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:47:23: error: 'stopTunnel()' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    :
 44 |     }
 45 |
 46 |     override public func stopTunnel() {
    |                          `- note: add '@available' attribute to enclosing instance method
 47 |         nativeSession.stopTunnel()
    |                       |- error: 'stopTunnel()' is only available in tvOS 17.0 or newer
    |                       `- note: add 'if #available' version check
 48 |     }
 49 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:51:27: error: 'startTunnel(options:)' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    :
 48 |     }
 49 |
 50 |     override public func startTunnel(options: [String: Any]?) throws {
    |                          `- note: add '@available' attribute to enclosing instance method
 51 |         try nativeSession.startTunnel(options: options)
    |                           |- error: 'startTunnel(options:)' is only available in tvOS 17.0 or newer
    |                           `- note: add 'if #available' version check
 52 |     }
 53 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:55:27: error: 'sendProviderMessage(_:responseHandler:)' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    :
 52 |     }
 53 |
 54 |     override public func sendProviderMessage(_ message: Data, responseHandler: ResponseCompletion) throws {
    |                          `- note: add '@available' attribute to enclosing instance method
 55 |         try nativeSession.sendProviderMessage(message, responseHandler: responseHandler)
    |                           |- error: 'sendProviderMessage(_:responseHandler:)' is only available in tvOS 17.0 or newer
    |                           `- note: add 'if #available' version check
 56 |     }
 57 | }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:79:25: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 58 |
 59 | /// A mock tunnel provider session.
 60 | public class TMTunnelProviderSessionMock: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 61 |
 62 |     public let mockMessageRouter = MessageRouter()
    :
 76 |     }
 77 |
 78 |     override public func stopTunnel() {
    |                          `- note: add '@available' attribute to enclosing instance method
 79 |         currentStatus = NEVPNStatus.disconnected
    |                         |- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                         `- note: add 'if #available' version check
 80 |     }
 81 |
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMTunnelProviderManagerFactory.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMTunnelProviderSession.swift
SwiftCompile normal arm64 Compiling\ MessageContainer.swift,\ MessageRouter.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageContainer.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageRouter.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageContainer.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile MessageContainer.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageRouter.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile MessageRouter.swift
SwiftCompile normal arm64 Compiling\ TMNativeTunnelProviderManager.swift,\ TMPacketTunnelProvider.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:16:34: error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
16 |     private let providerManager: NETunnelProviderManager
   |                                  `- error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
17 |
18 |     private var pollingInterval = 1.0
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:20:39: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
18 |     private var pollingInterval = 1.0
19 |
20 |     override public var tunnelStatus: NEVPNStatus { session?.status ?? .invalid }
   |                         |             `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   |                         `- note: add '@available' attribute to enclosing property
21 |     override public var tunnelMonitor: TunnelMonitor { monitor }
22 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:24:20: error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
22 |
23 |     /// Initialise VPNManager, which also saves/updates a tunnel configuration to the phone's VPN settings
24 |     init(provider: NETunnelProviderManager) {
   |     |              `- error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
   |     `- note: add '@available' attribute to enclosing initializer
25 |         providerManager = provider
26 |         super.init()
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:31:37: error: 'NEVPNStatusDidChange' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
22 |
23 |     /// Initialise VPNManager, which also saves/updates a tunnel configuration to the phone's VPN settings
24 |     init(provider: NETunnelProviderManager) {
   |     `- note: add '@available' attribute to enclosing initializer
25 |         providerManager = provider
26 |         super.init()
   :
29 |             self,
30 |             selector: #selector(handleVPNStatusChange),
31 |             name: Notification.Name.NEVPNStatusDidChange,
   |                                     |- error: 'NEVPNStatusDidChange' is only available in tvOS 17.0 or newer
   |                                     `- note: add 'if #available' version check
32 |             object: nil
33 |         )
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:37:65: error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
34 |     }
35 |
36 |     override var session: TMTunnelProviderSession? {
   |                  `- note: add '@available' attribute to enclosing property
37 |         if let providerSession = providerManager.connection as? NETunnelProviderSession {
   |                                                                 |- error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
   |                                                                 `- note: add 'if #available' version check
38 |             return TMTunnelProviderSessionNative(nativeSession: providerSession)
39 |         }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:37:50: error: 'connection' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
34 |     }
35 |
36 |     override var session: TMTunnelProviderSession? {
   |                  `- note: add '@available' attribute to enclosing property
37 |         if let providerSession = providerManager.connection as? NETunnelProviderSession {
   |                                                  |- error: 'connection' is only available in tvOS 17.0 or newer
   |                                                  `- note: add 'if #available' version check
38 |             return TMTunnelProviderSessionNative(nativeSession: providerSession)
39 |         }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:49:33: error: 'connection' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
41 |     }
42 |
43 |     override public func startTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
44 |         guard let session = session, session.status != .connected else {
45 |             log(.error, "Failed to start: tunnel is already connected!")
   :
47 |         }
48 |         do {
49 |             try providerManager.connection.startVPNTunnel()
   |                                 |- error: 'connection' is only available in tvOS 17.0 or newer
   |                                 `- note: add 'if #available' version check
50 |         } catch {
51 |             print("\(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:49:44: error: 'startVPNTunnel()' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
41 |     }
42 |
43 |     override public func startTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
44 |         guard let session = session, session.status != .connected else {
45 |             log(.error, "Failed to start: tunnel is already connected!")
   :
47 |         }
48 |         do {
49 |             try providerManager.connection.startVPNTunnel()
   |                                            |- error: 'startVPNTunnel()' is only available in tvOS 17.0 or newer
   |                                            `- note: add 'if #available' version check
50 |         } catch {
51 |             print("\(error)")
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:58:25: error: 'connection' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
55 |
56 |     /// Stop the service, closing the existing VPN Tunnel.
57 |     override public func stopTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
58 |         providerManager.connection.stopVPNTunnel()
   |                         |- error: 'connection' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
59 |         tunnelMonitor.stopMonitoring()
60 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:58:36: error: 'stopVPNTunnel()' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
55 |
56 |     /// Stop the service, closing the existing VPN Tunnel.
57 |     override public func stopTunnel() {
   |                          `- note: add '@available' attribute to enclosing instance method
58 |         providerManager.connection.stopVPNTunnel()
   |                                    |- error: 'stopVPNTunnel()' is only available in tvOS 17.0 or newer
   |                                    `- note: add 'if #available' version check
59 |         tunnelMonitor.stopMonitoring()
60 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift:51:46: error: 'NETunnelNetworkSettings' is only available in tvOS 17.0 or newer
27 | /// the `TMPacketTunnelProvider` protocol, with the info.plist file pointing to it via the `NSExtensionPrincipalClass`
28 | /// entry.
29 | public protocol TMPacketTunnelProvider {
   |                 `- note: add '@available' attribute to enclosing protocol
30 |
31 |     init()
   :
47 |     ///   - settingsApplicationBlock: The block which applies the tunnel's protocol configuration object.
48 |     ///   - completionHandler: The completion handler which signals configuration completion to the provider manager.
49 |     func configureTunnel(
   |          `- note: add '@available' attribute to enclosing instance method
50 |         userConfigurationData: Data?,
51 |         settingsApplicationBlock: @escaping (NETunnelNetworkSettings?, ((Error?) -> Void)?) -> Void,
   |                                              `- error: 'NETunnelNetworkSettings' is only available in tvOS 17.0 or newer
52 |         completionHandler: @escaping (TMTunnelConfigurationError?) -> Void
53 |     )
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMNativeTunnelProviderManager.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMPacketTunnelProvider.swift
SwiftEmitModule normal arm64 Emitting\ module\ for\ TunnelMonitorKit (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:16:34: error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
16 |     private let providerManager: NETunnelProviderManager
   |                                  `- error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
17 |
18 |     private var pollingInterval = 1.0
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:20:39: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
18 |     private var pollingInterval = 1.0
19 |
20 |     override public var tunnelStatus: NEVPNStatus { session?.status ?? .invalid }
   |                         |             `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   |                         `- note: add '@available' attribute to enclosing property
21 |     override public var tunnelMonitor: TunnelMonitor { monitor }
22 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift:24:20: error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
11 | /// Class that manages the vpn network extension. The native tunnel provider manager is essentially a wrapper around a
12 | /// real tunnel provider manager.
13 | public class TMNativeTunnelProviderManager: TMTunnelProviderManager {
   |              `- note: add '@available' attribute to enclosing class
14 |
15 |     private let monitor = TunnelMonitor()
   :
22 |
23 |     /// Initialise VPNManager, which also saves/updates a tunnel configuration to the phone's VPN settings
24 |     init(provider: NETunnelProviderManager) {
   |     |              `- error: 'NETunnelProviderManager' is only available in tvOS 17.0 or newer
   |     `- note: add '@available' attribute to enclosing initializer
25 |         providerManager = provider
26 |         super.init()
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift:51:46: error: 'NETunnelNetworkSettings' is only available in tvOS 17.0 or newer
27 | /// the `TMPacketTunnelProvider` protocol, with the info.plist file pointing to it via the `NSExtensionPrincipalClass`
28 | /// entry.
29 | public protocol TMPacketTunnelProvider {
   |                 `- note: add '@available' attribute to enclosing protocol
30 |
31 |     init()
   :
47 |     ///   - settingsApplicationBlock: The block which applies the tunnel's protocol configuration object.
48 |     ///   - completionHandler: The completion handler which signals configuration completion to the provider manager.
49 |     func configureTunnel(
   |          `- note: add '@available' attribute to enclosing instance method
50 |         userConfigurationData: Data?,
51 |         settingsApplicationBlock: @escaping (NETunnelNetworkSettings?, ((Error?) -> Void)?) -> Void,
   |                                              `- error: 'NETunnelNetworkSettings' is only available in tvOS 17.0 or newer
52 |         completionHandler: @escaping (TMTunnelConfigurationError?) -> Void
53 |     )
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift:69:34: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
27 | /// the `TMPacketTunnelProvider` protocol, with the info.plist file pointing to it via the `NSExtensionPrincipalClass`
28 | /// entry.
29 | public protocol TMPacketTunnelProvider {
   |                 `- note: add '@available' attribute to enclosing protocol
30 |
31 |     init()
   :
67 |     ///   - reason: The reason for stopping the tunnel
68 |     ///   - completionHandler: Completion handler used to signal that the tunne lhas been stopped.
69 |     func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void)
   |          |                       `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
   |          `- note: add '@available' attribute to enclosing instance method
70 |
71 |     /// This method is invoked whenever the tunnel receives a message from the host application. This communication
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:93:50: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
    :
 91 |     }
 92 |
 93 |     override public func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
    |                          |                       `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
    |                          `- note: add '@available' attribute to enclosing instance method
 94 |         log(.info, "Stopping tunnel provider with reason: \(reason)")
 95 |         provider.stopTunnel(with: reason, completionHandler: completionHandler)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift:21:82: error: 'NEPacketTunnelProvider' is only available in tvOS 17.0 or newer
 19 | /// open class MyNativeTunnelProvider: TMPacketTunnelProviderNative<MyTunnelProvider> { }
 20 | /// ```
 21 | open class TMPacketTunnelProviderNative<TunnelProvider: TMPacketTunnelProvider>: NEPacketTunnelProvider {
    |            |                                                                     `- error: 'NEPacketTunnelProvider' is only available in tvOS 17.0 or newer
    |            `- note: add '@available' attribute to enclosing generic class
 22 |
 23 |     let provider: TunnelProvider
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:16:39: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 11 |
 12 | /// Defines events describing changes to the state of the tunnel provider, and the specific service it provides.
 13 | public protocol TMTunnelProviderManagerDelegate: AnyObject {
    |                 `- note: add '@available' attribute to enclosing protocol
 14 |
 15 |     /// Invoked whenever the tunnel provider state changes.
 16 |     func tunnelStateChanged(to state: NEVPNStatus)
    |          |                            `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |          `- note: add '@available' attribute to enclosing instance method
 17 |
 18 |     /// Invoked every time the service state changes. This contains information specific to the service provided by the
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:45:30: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 25 | /// `TMMockTunnelProviderManager` or `TMNativeTunnelProviderManager` using `TMMockTunnelProviderManagerFactory`, based
 26 | /// on whether mocking is desired or not.
 27 | public class TMTunnelProviderManager {
    |              `- note: add '@available' attribute to enclosing class
 28 |
 29 |     init() {}
    :
 43 |
 44 |     /// Current status of the network extension
 45 |     public var tunnelStatus: NEVPNStatus { fatalError("Must override") }
    |                |             `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                `- note: add '@available' attribute to enclosing property
 46 |
 47 |     /// Sends a message request to the tunnel provider.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:112:38: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
102 | /// A mock tunnel provider manager which allows the functionality of a specific TMPacketTunnelProvider to be executed on
103 | /// host/container app targets and simulator target environments.
104 | public class TMMockTunnelProviderManager: TMTunnelProviderManager {
    |              `- note: add '@available' attribute to enclosing class
105 |
106 |     private let provider: TMPacketTunnelProvider
    :
110 |     private let userConfigurationData: Data?
111 |
112 |     private var currentTunnelStatus: NEVPNStatus = .invalid {
    |                                      `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
113 |         didSet {
114 |             mockSession.setStatus(currentTunnelStatus)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift:138:39: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
102 | /// A mock tunnel provider manager which allows the functionality of a specific TMPacketTunnelProvider to be executed on
103 | /// host/container app targets and simulator target environments.
104 | public class TMMockTunnelProviderManager: TMTunnelProviderManager {
    |              `- note: add '@available' attribute to enclosing class
105 |
106 |     private let provider: TMPacketTunnelProvider
    :
136 |
137 |     override var session: TMTunnelProviderSession? { mockSession }
138 |     override public var tunnelStatus: NEVPNStatus { currentTunnelStatus }
    |                         |             `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                         `- note: add '@available' attribute to enclosing property
139 |     override public var tunnelMonitor: TunnelMonitor { monitor }
140 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:29:17: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 11 |
 12 | /// A base class allowing native and mock sessions to be used interchangebly.
 13 | public class TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 14 |
 15 |     /// This method returns immediately after starting the process of connecting the tunnel.
    :
 27 |
 28 |     /// Returns the current session status.
 29 |     var status: NEVPNStatus { return .invalid }
    |         |       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |         `- note: add '@available' attribute to enclosing property
 30 |
 31 | }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:36:32: error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    |                                `- error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
 37 |
 38 |     public init(nativeSession: NETunnelProviderSession) {
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:38:32: error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
 37 |
 38 |     public init(nativeSession: NETunnelProviderSession) {
    |            |                   `- error: 'NETunnelProviderSession' is only available in tvOS 17.0 or newer
    |            `- note: add '@available' attribute to enclosing initializer
 39 |         self.nativeSession = nativeSession
 40 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:42:33: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 32 |
 33 | /// A wrapper around a real NETunnelProviderSession.
 34 | public class TMTunnelProviderSessionNative: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 35 |
 36 |     private let nativeSession: NETunnelProviderSession
    :
 40 |     }
 41 |
 42 |     override public var status: NEVPNStatus {
    |                         |       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                         `- note: add '@available' attribute to enclosing property
 43 |         return nativeSession.status
 44 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:63:32: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 58 |
 59 | /// A mock tunnel provider session.
 60 | public class TMTunnelProviderSessionMock: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 61 |
 62 |     public let mockMessageRouter = MessageRouter()
 63 |     private var currentStatus: NEVPNStatus = .invalid
    |                                `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 64 |     private var provider: TMPacketTunnelProvider?
 65 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:70:37: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 58 |
 59 | /// A mock tunnel provider session.
 60 | public class TMTunnelProviderSessionMock: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 61 |
 62 |     public let mockMessageRouter = MessageRouter()
    :
 68 |     }
 69 |
 70 |     public func setStatus(_ status: NEVPNStatus) {
    |                 |                   `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                 `- note: add '@available' attribute to enclosing instance method
 71 |         currentStatus = status
 72 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift:74:33: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 58 |
 59 | /// A mock tunnel provider session.
 60 | public class TMTunnelProviderSessionMock: TMTunnelProviderSession {
    |              `- note: add '@available' attribute to enclosing class
 61 |
 62 |     public let mockMessageRouter = MessageRouter()
    :
 72 |     }
 73 |
 74 |     override public var status: NEVPNStatus {
    |                         |       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
    |                         `- note: add '@available' attribute to enclosing property
 75 |         return currentStatus
 76 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift:15:23: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
10 |
11 | /// Contains information about why communication with tunnel failed
12 | public enum TMCommunicationError: Error {
   |             `- note: add '@available' attribute to enclosing enum
13 |
14 |     /// The extension is not in a state in which it can be communicated with
15 |     case invalidState(NEVPNStatus)
   |                       `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
16 |
17 |     /// The manager connection instance could not be cast to a NETunnelProviderSession or is nil
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:63:45: error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                |                            `- error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:81:57: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
79 |     }
80 |
81 |     private static func parseRoutes(string: String) -> [NEIPv4Route] {
   |                         |                               `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   |                         `- note: add '@available' attribute to enclosing static method
82 |         return string.split(separator: ",")
83 |             .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift:19:11: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
17 | private let routeRegex = try! NSRegularExpression(pattern: "^(?<address>\(ipPattern)):(?<subnet>\(ipPattern))$")
18 |
19 | extension NEIPv4Route {
   | |         `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
20 |
21 |     /// Required to prevent invalid IP routes from being constructed, e.g. 0.0.0.0:0
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:1: warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:11: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |         `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:11: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |         `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:28:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
29 |     public static var allCases: [NEVPNStatus] {
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:29:34: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | `- note: add '@available' attribute to enclosing extension
29 |     public static var allCases: [NEVPNStatus] {
   |                       |          `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   |                       `- note: add '@available' attribute to enclosing static property
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
31 |     }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:28:11: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | |         `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
29 |     public static var allCases: [NEVPNStatus] {
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
Failed frontend command:
/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -emit-module -experimental-skip-non-inlinable-function-bodies-without-types /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMOSLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMNativeTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProvider.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMPacketTunnelProviderNative.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManager.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderManagerFactory.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Mocking/TMTunnelProviderSession.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageContainer.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/MessageRouter.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TunnelMonitor.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/TunnelConfigurationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelMonitorKit.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NSTextCheckingResult+Util.swift -target arm64-apple-tvos15.0 -disable-cross-import-overlay-search -load-resolved-plugin /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib/swift/host/plugins/libFoundationMacros.dylib\#/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/bin/swift-plugin-server\#FoundationMacros -load-resolved-plugin /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib/swift/host/plugins/libObservationMacros.dylib\#/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/bin/swift-plugin-server\#ObservationMacros -load-resolved-plugin /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib/swift/host/plugins/libSwiftMacros.dylib\#/Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/bin/swift-plugin-server\#SwiftMacros -disable-implicit-swift-modules -Xcc -fno-implicit-modules -Xcc -fno-implicit-module-maps -explicit-swift-module-map-file /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-dependencies-1.json -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk -I /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos -Isystem /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/usr/lib -F /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos -F /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/Library/Frameworks -F /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS27.0.sdk/Developer/Library/Frameworks -module-cache-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules -no-color-diagnostics -Xcc -fno-color-diagnostics -enable-testing -g -debug-info-format\=dwarf -dwarf-version\=4 -profile-generate -profile-coverage-mapping -swift-version 5 -Onone -D SWIFT_PACKAGE -D DEBUG -D SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE -D Xcode -serialize-debugging-options -enable-experimental-feature DebugDescriptionMacro -empty-abi-descriptor -validate-clang-modules-once -clang-build-session-file /Users/admin/builder/spi-builder-workspace/.derivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode -enable-anonymous-context-mangled-names -file-compilation-dir /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode -Xcc -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -Xcc -ivfsstatcache -Xcc /Users/admin/builder/spi-builder-workspace/.derivedData/SDKStatCaches.noindex/appletvos27.0-24J360-e829b21a6f8c9b70876ba0858053c044b32bfd8d43560033f8d89884cdb90028.sdkstatcache -Xcc -fmodules-prune-interval\=86400 -Xcc -fmodules-prune-after\=345600 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug-appletvos/include -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources-normal/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/DerivedSources -Xcc -DSWIFT_PACKAGE -Xcc -DDEBUG\=1 -no-auto-bridging-header-chaining -module-name TunnelMonitorKit -const-gather-protocols-file /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit_const_extract_protocols.json -disable-clang-spi -clang-target arm64-apple-tvos27.0 -target-sdk-version 27.0 -target-sdk-name appletvos27.0 -in-process-plugin-server-path /Applications/Xcode-27.0.0-Release.Candidate.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/libSwiftInProcPluginServer.dylib -emit-module-doc-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.swiftdoc -emit-module-source-info-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.swiftsourceinfo -emit-objc-header-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-Swift.h -serialize-diagnostics-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-primary-emit-module.dia -emit-dependencies-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit-primary-emit-module.d -parse-as-library -o /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.swiftmodule -emit-abi-descriptor-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/TunnelMonitorKit.build/Debug-appletvos/TunnelMonitorKit-t.build/Objects-normal/arm64/TunnelMonitorKit.abi.json
SwiftCompile normal arm64 (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode

SwiftCompile normal arm64 Compiling\ PacketTunnelConfiguration.swift,\ TunnelConfigurationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/TunnelConfigurationError.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:63:45: error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                |                            `- error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:81:57: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
79 |     }
80 |
81 |     private static func parseRoutes(string: String) -> [NEIPv4Route] {
   |                         |                               `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   |                         `- note: add '@available' attribute to enclosing static method
82 |         return string.split(separator: ",")
83 |             .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:64:31: error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
   |                               |- error: 'NEPacketTunnelNetworkSettings' is only available in tvOS 17.0 or newer
   |                               `- note: add 'if #available' version check
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:64:31: error: 'init(tunnelRemoteAddress:)' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
   |                               |- error: 'init(tunnelRemoteAddress:)' is only available in tvOS 17.0 or newer
   |                               `- note: add 'if #available' version check
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:66:28: error: 'NEIPv4Settings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
   |                            |- error: 'NEIPv4Settings' is only available in tvOS 17.0 or newer
   |                            `- note: add 'if #available' version check
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:66:28: error: 'init(addresses:subnetMasks:)' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
   |                            |- error: 'init(addresses:subnetMasks:)' is only available in tvOS 17.0 or newer
   |                            `- note: add 'if #available' version check
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:67:22: error: 'includedRoutes' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
   |                      |- error: 'includedRoutes' is only available in tvOS 17.0 or newer
   |                      `- note: add 'if #available' version check
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
69 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:68:22: error: 'excludedRoutes' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
66 |         let ipv4Settings = NEIPv4Settings(addresses: [tunnelAddress], subnetMasks: [tunnelSubnet])
67 |         ipv4Settings.includedRoutes = TMNetworkSettings.parseRoutes(string: includedRoutes)
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
   |                      |- error: 'excludedRoutes' is only available in tvOS 17.0 or newer
   |                      `- note: add 'if #available' version check
69 |
70 |         networkSettings.ipv4Settings = ipv4Settings
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:70:25: error: 'ipv4Settings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
68 |         ipv4Settings.excludedRoutes = TMNetworkSettings.parseRoutes(string: excludedRoutes)
69 |
70 |         networkSettings.ipv4Settings = ipv4Settings
   |                         |- error: 'ipv4Settings' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
71 |
72 |         if let overheadBytes = tunnelOverheadBytes {
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:73:29: error: 'tunnelOverheadBytes' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
71 |
72 |         if let overheadBytes = tunnelOverheadBytes {
73 |             networkSettings.tunnelOverheadBytes = NSNumber(value: overheadBytes)
   |                             |- error: 'tunnelOverheadBytes' is only available in tvOS 17.0 or newer
   |                             `- note: add 'if #available' version check
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:75:25: error: 'mtu' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
73 |             networkSettings.tunnelOverheadBytes = NSNumber(value: overheadBytes)
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
   |                         |- error: 'mtu' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
77 |
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:76:25: error: 'dnsSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
   |                         |- error: 'dnsSettings' is only available in tvOS 17.0 or newer
   |                         `- note: add 'if #available' version check
77 |
78 |         return networkSettings
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:76:39: error: 'NEDNSSettings' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
   |                                       |- error: 'NEDNSSettings' is only available in tvOS 17.0 or newer
   |                                       `- note: add 'if #available' version check
77 |
78 |         return networkSettings
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift:76:39: error: 'init(servers:)' is only available in tvOS 17.0 or newer
36 | /// configuration. See the `configureTunnel` method of `TMPacketTunnelProvider`. It is invoked when mock or native
37 | /// providers are started by a `TMPacketTunnelProviderManager`.
38 | public struct TMNetworkSettings: Codable {
   |               `- note: add '@available' attribute to enclosing struct
39 |     let tunnelRemoteAddress: String
40 |     let includedRoutes, excludedRoutes: String
   :
61 |
62 |     /// Constructs a settings object to be consumed by the VPN extension.
63 |     public var packetTunnelNetworkSettings: NEPacketTunnelNetworkSettings {
   |                `- note: add '@available' attribute to enclosing property
64 |         let networkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: tunnelRemoteAddress)
65 |
   :
74 |         }
75 |         networkSettings.mtu = NSNumber(value: mtu)
76 |         networkSettings.dnsSettings = NEDNSSettings(servers: dns.components(separatedBy: ","))
   |                                       |- error: 'init(servers:)' is only available in tvOS 17.0 or newer
   |                                       `- note: add 'if #available' version check
77 |
78 |         return networkSettings
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/PacketTunnelConfiguration.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile PacketTunnelConfiguration.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelConfiguration/TunnelConfigurationError.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TunnelConfigurationError.swift
SwiftCompile normal arm64 Compiling\ NEProviderStopReason+StringConvertible.swift,\ NEVPNStatus+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:1: warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEProviderStopReason' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift:11:11: error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEProviderStopReason: CustomStringConvertible {
   | |         `- error: 'NEProviderStopReason' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance.
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:11:11: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
 9 | import NetworkExtension
10 |
11 | extension NEVPNStatus: CustomStringConvertible {
   | |         `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
12 |
13 |   /// A textual representation of this instance
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:28:1: warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | |- warning: extension declares a conformance of imported type 'NEVPNStatus' to imported protocol 'CaseIterable'; this will not behave correctly if the owners of 'NetworkExtension' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
29 |     public static var allCases: [NEVPNStatus] {
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift:29:34: error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
26 | }
27 |
28 | extension NEVPNStatus: CaseIterable {
   | `- note: add '@available' attribute to enclosing extension
29 |     public static var allCases: [NEVPNStatus] {
   |                       |          `- error: 'NEVPNStatus' is only available in tvOS 17.0 or newer
   |                       `- note: add '@available' attribute to enclosing static property
30 |         return [.invalid, .disconnected, .disconnecting, .connecting, .connected, .reasserting]
31 |     }
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEProviderStopReason+StringConvertible.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NEProviderStopReason+StringConvertible.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEVPNStatus+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NEVPNStatus+Util.swift
SwiftCompile normal arm64 Compiling\ TMCommunicationError.swift,\ TunnelMonitor.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TunnelMonitor.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TMCommunicationError.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMCommunicationError.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelCommunication/TunnelMonitor.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TunnelMonitor.swift
SwiftCompile normal arm64 Compiling\ TunnelMonitorKit.swift,\ NEIPv4Route+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelMonitorKit.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
/Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift:19:11: error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
17 | private let routeRegex = try! NSRegularExpression(pattern: "^(?<address>\(ipPattern)):(?<subnet>\(ipPattern))$")
18 |
19 | extension NEIPv4Route {
   | |         `- error: 'NEIPv4Route' is only available in tvOS 17.0 or newer
   | `- note: add '@available' attribute to enclosing extension
20 |
21 |     /// Required to prevent invalid IP routes from being constructed, e.g. 0.0.0.0:0
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/TunnelMonitorKit.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TunnelMonitorKit.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NEIPv4Route+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NEIPv4Route+Util.swift
SwiftCompile normal arm64 Compiling\ TMLogger.swift,\ TMOSLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMLogger.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMOSLogger.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMLogger.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMLogger.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Logging/TMOSLogger.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile TMOSLogger.swift
SwiftCompile normal arm64 Compiling\ NSTextCheckingResult+Util.swift /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NSTextCheckingResult+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/TunnelMonitorKit/Util/NSTextCheckingResult+Util.swift (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile NSTextCheckingResult+Util.swift
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/ExplicitPrecompiledModules
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/SDKExplicitPrecompiledModules
2026-09-20 12:05:13.056 xcodebuild[722:4546] [MT] IDERunDestination: Supported platforms for the buildables in the current scheme is empty.
** BUILD FAILED **
The following build commands failed:
	SwiftEmitModule normal arm64 Emitting\ module\ for\ TunnelMonitorKit (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
	SwiftCompile normal arm64 (in target 'TunnelMonitorKit' from project 'TunnelMonitorKit')
	Building workspace TunnelMonitorKit with scheme TunnelMonitorKit
(3 failures)
BUILD FAILURE 6.4 tvOS