Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 60ce8b311afabff47c7cce8de2fef8ab02fe42bd
https://github.com/WebKit/WebKit/commit/60ce8b311afabff47c7cce8de2fef8ab02fe42bd
Author: Elliott Williams <[email protected]>
Date: 2026-05-05 (Tue, 05 May 2026)
Changed paths:
M Source/WebKit/Scripts/generate-swift-availability-macros
M Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore+SwiftOverlay.swift
M Source/WebKit/UIProcess/API/Cocoa/WebKitSwiftOverlay.swift
M Source/WebKit/UIProcess/API/Swift/URLSchemeHandler.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+BackForwardList.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+Configuration.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+DialogPresenting.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+FormInfo.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+FrameInfo.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+ImmersiveEnvironment.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+Navigation.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+NavigationDeciding.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+NavigationPreferences.swift
M Source/WebKit/UIProcess/API/Swift/WebPage+Transferable.swift
M Source/WebKit/UIProcess/API/Swift/WebPage.swift
M Source/WebKit/UIProcess/Cocoa/WKNavigationDelegateAdapter.swift
M Source/WebKit/_WebKit_SwiftUI/API/View+WebViewModifiers.swift
M Source/WebKit/_WebKit_SwiftUI/API/WebPage+SwiftUI.swift
M Source/WebKit/_WebKit_SwiftUI/API/WebPageNavigationAction+SwiftUI.swift
M Source/WebKit/_WebKit_SwiftUI/API/WebView.swift
M Source/WebKit/_WebKit_SwiftUI/API/WebViewImmersiveEnvironmentView.swift
Log Message:
-----------
[Swift] Add multi-platform macros to support downlevels
https://bugs.webkit.org/show_bug.cgi?id=294412
rdar://153851259
Reviewed by Richard Robinson.
The platform-specific way of annotating a Swift API `@available(macOS
X.Y, *)` does not work for downlevel builds. We write the OS version
that an API shipped in, but in downlevels, that API is still available,
because we are building a backported WebKit. Yet its declaration
indicates that it is unavailable, so clients cannot use it.
Unlike clang, Swift has no preprocessor, so we can't easily #undef
availability annotations like we do in Objective-C code.
Instead, switch Cocoa Swift APIs to using a custom availability
platform, whose name is based on the recently-added `anyAppleOS`
platform <https://forums.swift.org/t/introducing-anyappleos/85728>.
For example, instead of writing:
@available(macOS 26.4, iOS 26.4, visionOS 26.4, *)
we now write:
@availabile(anyAppleOSAndDownlevels 26.4, *)
Also, add a cross-platform "TBA" version to save typing. Instead of:
@available(WK_MAC_TBA, WK_IOS_TBA, WK_XROS_TBA, *)
write:
@available(TBA, *)
When an API doesn't ship on a particular platform, we continue to use
`unavailable` declarations to denote it. For example:
@available(anyAppleOSAndDownlevels 26.4, *)
@available(macOS, unavailable)
@available(watchOS, unavailable)
@available(tvOS, unavailable)
public func ...
denotes an iOS and visionOS-only API.
* LayoutTests/TestExpectations:
* Source/WebKit/Scripts/generate-swift-availability-macros:
* Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore+SwiftOverlay.swift:
* Source/WebKit/UIProcess/API/Cocoa/WebKitSwiftOverlay.swift:
* Source/WebKit/UIProcess/API/Swift/URLSchemeHandler.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+BackForwardList.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+Configuration.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+DialogPresenting.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+FormInfo.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+FrameInfo.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+ImmersiveEnvironment.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+Navigation.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+NavigationDeciding.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+NavigationPreferences.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage+Transferable.swift:
* Source/WebKit/UIProcess/API/Swift/WebPage.swift:
* Source/WebKit/UIProcess/Cocoa/WKNavigationDelegateAdapter.swift:
* Source/WebKit/_WebKit_SwiftUI/API/View+WebViewModifiers.swift:
* Source/WebKit/_WebKit_SwiftUI/API/WebPage+SwiftUI.swift:
* Source/WebKit/_WebKit_SwiftUI/API/WebPageNavigationAction+SwiftUI.swift:
* Source/WebKit/_WebKit_SwiftUI/API/WebView.swift:
* Source/WebKit/_WebKit_SwiftUI/API/WebViewImmersiveEnvironmentView.swift:
Canonical link: https://commits.webkit.org/312640@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications