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

Reply via email to