From 9b08a8c432bbe8181fe2573b341827dda408b4b3 Mon Sep 17 00:00:00 2001 From: Arthur Nacar <34354048+RTsta@users.noreply.github.com> Date: Thu, 17 Sep 2026 14:29:10 +0200 Subject: [PATCH 1/4] fix: raise minimum deployment target to iOS 15 for Xcode 27 Xcode 27 enforces a minimum iOS deployment target of 15.0 and refuses to build packages targeting anything lower. Bump Package.swift's iOS platform from v14 to v15 (macOS 12 / watchOS 9 already satisfy the equivalent minimums) and drop the now-redundant @available(iOS 15.0, *) attributes in the Upload API, which were already gating that code at iOS 15 regardless of the package's stated minimum. Co-Authored-By: Claude Sonnet 5 --- Package.swift | 2 +- Sources/Networking/Core/Upload/UploadAPIManager.swift | 5 ----- Sources/Networking/Core/Upload/UploadAPIManaging.swift | 2 -- Sources/Networking/Core/Upload/UploadTask.swift | 1 - Tests/NetworkingTests/UploadAPIManagerTests.swift | 1 - 5 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Package.swift b/Package.swift index b8cfc849..8f08b232 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "Networking", platforms: [ - .iOS(SupportedPlatform.IOSVersion.v14), + .iOS(SupportedPlatform.IOSVersion.v15), .macOS(SupportedPlatform.MacOSVersion.v12), .watchOS(SupportedPlatform.WatchOSVersion.v9) ], diff --git a/Sources/Networking/Core/Upload/UploadAPIManager.swift b/Sources/Networking/Core/Upload/UploadAPIManager.swift index d85e9495..1373f251 100644 --- a/Sources/Networking/Core/Upload/UploadAPIManager.swift +++ b/Sources/Networking/Core/Upload/UploadAPIManager.swift @@ -28,7 +28,6 @@ import Foundation 4. You can retry a specific task in case of failure with ``retry(taskId:)`` 5. In case you are not using a singleton instance don't forget to call ``invalidateSession(shouldFinishTasks:)`` once the instance is not needed anymore in order to prevent memory leaks, since the `UploadAPIManager` is not automatically deallocated from memory because of a `URLSession` holding a reference to it. */ -@available(iOS 15.0, *) open class UploadAPIManager: NSObject, UploadAPIManaging { // MARK: - Public Properties public var activeTasks: [UploadTask] { @@ -77,7 +76,6 @@ open class UploadAPIManager: NSObject, UploadAPIManaging { } // MARK: URLSessionDataDelegate -@available(iOS 15.0, *) extension UploadAPIManager: URLSessionDataDelegate { nonisolated public func urlSession( _ session: URLSession, @@ -112,7 +110,6 @@ extension UploadAPIManager: URLSessionDataDelegate { } // MARK: - URLSessionTaskDelegate -@available(iOS 15.0, *) extension UploadAPIManager: URLSessionTaskDelegate { nonisolated public func urlSession( _ session: URLSession, @@ -149,7 +146,6 @@ extension UploadAPIManager: URLSessionTaskDelegate { } // MARK: - UploadAPIManaging -@available(iOS 15.0, *) public extension UploadAPIManager { func upload(_ type: UploadType, to endpoint: Requestable) async throws -> UploadTask { let endpointRequest = EndpointRequest(endpoint, sessionId: sessionId) @@ -220,7 +216,6 @@ public extension UploadAPIManager { } // MARK: - Private API -@available(iOS 15.0, *) private extension UploadAPIManager { @discardableResult func uploadRequest( diff --git a/Sources/Networking/Core/Upload/UploadAPIManaging.swift b/Sources/Networking/Core/Upload/UploadAPIManaging.swift index 9df500cb..19590853 100644 --- a/Sources/Networking/Core/Upload/UploadAPIManaging.swift +++ b/Sources/Networking/Core/Upload/UploadAPIManaging.swift @@ -11,7 +11,6 @@ import Foundation /// A definition of an API layer with methods for handling data uploading. /// /// Recommended to be used as singleton. If you wish to use multiple instances, make sure you manually invalidate url session by calling the `invalidateSession` method. -@available(iOS 15.0, *) @NetworkingActor public protocol UploadAPIManaging: Sendable { typealias StateStream = AsyncStream @@ -49,7 +48,6 @@ public protocol UploadAPIManaging: Sendable { func invalidateSession(shouldFinishTasks: Bool) } -@available(iOS 15.0, *) public extension UploadAPIManaging { /// Initiates a data upload request for the specified endpoint. /// - Parameters: diff --git a/Sources/Networking/Core/Upload/UploadTask.swift b/Sources/Networking/Core/Upload/UploadTask.swift index a6fbc9aa..9fe3dfae 100644 --- a/Sources/Networking/Core/Upload/UploadTask.swift +++ b/Sources/Networking/Core/Upload/UploadTask.swift @@ -66,7 +66,6 @@ public extension UploadTask { } // MARK: - Internal API -@available(iOS 15.0, *) extension UploadTask { /// The identifier of the underlying `URLSessionUploadTask`. var taskIdentifier: Int { diff --git a/Tests/NetworkingTests/UploadAPIManagerTests.swift b/Tests/NetworkingTests/UploadAPIManagerTests.swift index d1de07e8..560ed759 100644 --- a/Tests/NetworkingTests/UploadAPIManagerTests.swift +++ b/Tests/NetworkingTests/UploadAPIManagerTests.swift @@ -9,7 +9,6 @@ import XCTest @NetworkingActor -@available(iOS 15.0, *) final class UploadAPIManagerTests: XCTestCase { enum UploadRouter: Requestable { case mock From 612947b63783c8c0b551774433799b007379ec91 Mon Sep 17 00:00:00 2001 From: Arthur Nacar <34354048+RTsta@users.noreply.github.com> Date: Mon, 21 Sep 2026 12:23:37 +0200 Subject: [PATCH 2/4] fix: update CI iOS destination to Xcode 26.6 / iOS 26.5 The pinned iOS 18.2 simulator no longer exists on GitHub's macos-15-arm64 runner image, breaking the "iOS 18.2, Xcode 16.2" job on this PR and on master. Move the job to macos-26-arm64 with Xcode 26.6 (default) and its paired iOS 26.5 simulator runtime, the newest combination actually available on a current runner image. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 385acfaa..8d668ff6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,10 +23,10 @@ jobs: fail-fast: false matrix: include: - - name: 'iOS 18.2, Xcode 16.2' - destination: 'OS=18.2,name=iPhone 16 Pro' - xcode: 'Xcode_16.2' - runsOn: macos-15 + - name: 'iOS 26.5, Xcode 26.6' + destination: 'OS=26.5,name=iPhone 17 Pro' + xcode: 'Xcode_26.6' + runsOn: macos-26 - name: 'macOS 15, Xcode 16.2' destination: 'platform=macOS' xcode: 'Xcode_16.2' From b38796b5ebead64a8d356dbc4b713d6877d3ea41 Mon Sep 17 00:00:00 2001 From: Arthur Nacar <34354048+RTsta@users.noreply.github.com> Date: Tue, 22 Sep 2026 10:23:27 +0200 Subject: [PATCH 3/4] [feat]: update self-hosted CI --- .github/workflows/ci.yml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d668ff6..4cff7b45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,22 +15,16 @@ concurrency: jobs: unit-tests: name: ${{ matrix.name }} - runs-on: ${{ matrix.runsOn }} - env: - DEVELOPER_DIR: "/Applications/${{ matrix.xcode }}.app/Contents/Developer" + runs-on: [self-hosted, macOS, mobile-ci] timeout-minutes: 30 strategy: fail-fast: false matrix: include: - - name: 'iOS 26.5, Xcode 26.6' - destination: 'OS=26.5,name=iPhone 17 Pro' - xcode: 'Xcode_26.6' - runsOn: macos-26 - - name: 'macOS 15, Xcode 16.2' + - name: 'iOS Simulator' + destination: 'platform=iOS Simulator,name=iPhone 17 Pro' + - name: 'macOS' destination: 'platform=macOS' - xcode: 'Xcode_16.2' - runsOn: macos-15 steps: - uses: actions/checkout@v4 From 0257fe423a9de488b5fb8839e6f5e0891c988e31 Mon Sep 17 00:00:00 2001 From: Arthur Nacar <34354048+RTsta@users.noreply.github.com> Date: Tue, 22 Sep 2026 10:34:11 +0200 Subject: [PATCH 4/4] [fix]: remove xcpretty dependency from self-hosted CI --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4cff7b45..5585f1f2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: matrix: include: - name: 'iOS Simulator' - destination: 'platform=iOS Simulator,name=iPhone 17 Pro' + destination: 'platform=iOS Simulator,name=iPhone 17 Pro,OS=latest' - name: 'macOS' destination: 'platform=macOS' steps: @@ -31,7 +31,7 @@ jobs: - name: 'Running unit tests on ${{ matrix.name }}' run: | set -o pipefail && \ - xcodebuild clean test -resultBundlePath "TestResults-${{ matrix.name }}" -skipPackagePluginValidation -scheme "Networking" -destination "${{ matrix.destination }}" | tee "build-log-${{ matrix.name }}.txt" | xcpretty + xcodebuild clean test -resultBundlePath "TestResults-${{ matrix.name }}" -skipPackagePluginValidation -scheme "Networking" -destination "${{ matrix.destination }}" | tee "build-log-${{ matrix.name }}.txt" # Missing Xcode 16 support # https://github.com/kishikawakatsumi/xcresulttool/issues/765