diff --git a/src/SafariServices/SSEnums.cs b/src/SafariServices/SSEnums.cs
index 7f9e1b46aaa2..c2434c1196d7 100644
--- a/src/SafariServices/SSEnums.cs
+++ b/src/SafariServices/SSEnums.cs
@@ -55,6 +55,8 @@ public enum SFErrorCode : long {
InternalError = 4,
/// The app is missing an entitlement.
MissingEntitlement = 5,
+ /// The maximum number of allowed attempts to load the extension has been exceeded.
+ MaximumAttemptsExceeded = 6,
}
[NoMac]
diff --git a/src/safariservices.cs b/src/safariservices.cs
index 8adf2251aec7..902bfdf36479 100644
--- a/src/safariservices.cs
+++ b/src/safariservices.cs
@@ -899,6 +899,9 @@ interface SFAddToHomeScreenInfo : NSCopying {
delegate void SFSafariSettingsOpenExportBrowsingDataSettingsCompletionHandler ([NullAllowed] NSError error);
+ [NoTV, NoMacCatalyst, iOS (26, 2), NoMac]
+ delegate void SFSafariSettingsOpenExtensionsSettingsCompletionHandler ([NullAllowed] NSError error);
+
[NoTV, NoMacCatalyst, iOS (26, 0), NoMac]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
@@ -907,6 +910,35 @@ interface SFSafariSettings {
[Static]
[Export ("openExportBrowsingDataSettingsWithCompletionHandler:")]
void OpenExportBrowsingDataSettings ([NullAllowed] SFSafariSettingsOpenExportBrowsingDataSettingsCompletionHandler completionHandler);
+
+ [Async]
+ [iOS (26, 2)]
+ [Static]
+ [Export ("openExtensionsSettingsForIdentifiers:completionHandler:")]
+ void OpenExtensionsSettings (string [] extensionIdentifiers, [NullAllowed] SFSafariSettingsOpenExtensionsSettingsCompletionHandler completionHandler);
+ }
+
+ [NoTV, iOS (26, 2), MacCatalyst (26, 2), NoMac]
+ delegate void SFSafariExtensionManagerHandler ([NullAllowed] SFSafariExtensionState state, [NullAllowed] NSError error);
+
+ [NoTV, iOS (26, 2), MacCatalyst (26, 2), NoMac]
+ [BaseType (typeof (NSObject))]
+ [DisableDefaultCtor]
+ interface SFSafariExtensionManager {
+
+ [Async]
+ [Static]
+ [Export ("getStateOfExtensionWithIdentifier:completionHandler:")]
+ void GetState (string identifier, SFSafariExtensionManagerHandler completionHandler);
+ }
+
+ [NoTV, iOS (26, 2), MacCatalyst (26, 2), NoMac]
+ [BaseType (typeof (NSObject))]
+ [DisableDefaultCtor]
+ interface SFSafariExtensionState {
+
+ [Export ("enabled")]
+ bool Enabled { [Bind ("isEnabled")] get; }
}
}
diff --git a/tests/cecil-tests/Documentation.KnownFailures.txt b/tests/cecil-tests/Documentation.KnownFailures.txt
index 32a5799b7c83..d38118b0af43 100644
--- a/tests/cecil-tests/Documentation.KnownFailures.txt
+++ b/tests/cecil-tests/Documentation.KnownFailures.txt
@@ -15960,6 +15960,8 @@ M:SafariServices.SFSafariExtensionHandling_Extensions.ContentBlocker(SafariServi
M:SafariServices.SFSafariExtensionHandling_Extensions.ValidateContextMenuItemAsync(SafariServices.ISFSafariExtensionHandling,System.String,SafariServices.SFSafariPage,Foundation.NSDictionary{Foundation.NSString,Foundation.NSObject})
M:SafariServices.SFSafariExtensionHandling_Extensions.ValidateToolbarItemAsync(SafariServices.ISFSafariExtensionHandling,SafariServices.SFSafariWindow)
M:SafariServices.SFSafariExtensionHandling_Extensions.WillNavigate(SafariServices.ISFSafariExtensionHandling,SafariServices.SFSafariPage,Foundation.NSUrl)
+M:SafariServices.SFSafariExtensionManager.GetState(System.String,SafariServices.SFSafariExtensionManagerHandler)
+M:SafariServices.SFSafariExtensionManager.GetStateAsync(System.String)
M:SafariServices.SFSafariExtensionViewController.DismissPopover
M:SafariServices.SFSafariPage.GetContainingTab(System.Action{SafariServices.SFSafariTab})
M:SafariServices.SFSafariPage.GetContainingTabAsync
@@ -15968,6 +15970,8 @@ M:SafariServices.SFSafariPage.GetScreenshotOfVisibleArea(System.Action{AppKit.NS
M:SafariServices.SFSafariPage.GetScreenshotOfVisibleAreaAsync
M:SafariServices.SFSafariSettings.OpenExportBrowsingDataSettings(SafariServices.SFSafariSettingsOpenExportBrowsingDataSettingsCompletionHandler)
M:SafariServices.SFSafariSettings.OpenExportBrowsingDataSettingsAsync
+M:SafariServices.SFSafariSettings.OpenExtensionsSettings(System.String[],SafariServices.SFSafariSettingsOpenExtensionsSettingsCompletionHandler)
+M:SafariServices.SFSafariSettings.OpenExtensionsSettingsAsync(System.String[])
M:SafariServices.SFSafariTab.ActivateAsync
M:SafariServices.SFSafariTab.Close
M:SafariServices.SFSafariTab.GetActivePageAsync
@@ -23521,6 +23525,7 @@ P:SafariServices.ISFAddToHomeScreenActivityItem.Title
P:SafariServices.ISFAddToHomeScreenActivityItem.Url
P:SafariServices.SFAddToHomeScreenInfo.Manifest
P:SafariServices.SFAddToHomeScreenInfo.WebsiteCookies
+P:SafariServices.SFSafariExtensionState.Enabled
P:SafariServices.SFSafariViewController.PreferredBarTintColor
P:SafariServices.SFSafariViewController.PreferredControlTintColor
P:SafariServices.SFSafariViewControllerActivityButton.ExtensionIdentifier
@@ -28285,11 +28290,15 @@ T:SafariServices.SFExtensionValidationHandler
T:SafariServices.SFSafariApplication
T:SafariServices.SFSafariExtension
T:SafariServices.SFSafariExtensionHandler
+T:SafariServices.SFSafariExtensionManager
+T:SafariServices.SFSafariExtensionManagerHandler
+T:SafariServices.SFSafariExtensionState
T:SafariServices.SFSafariExtensionViewController
T:SafariServices.SFSafariPage
T:SafariServices.SFSafariPageProperties
T:SafariServices.SFSafariSettings
T:SafariServices.SFSafariSettingsOpenExportBrowsingDataSettingsCompletionHandler
+T:SafariServices.SFSafariSettingsOpenExtensionsSettingsCompletionHandler
T:SafariServices.SFSafariTab
T:SafariServices.SFSafariToolbarItem
T:SafariServices.SFSafariViewControllerActivityButton
diff --git a/tests/introspection/iOSApiProtocolTest.cs b/tests/introspection/iOSApiProtocolTest.cs
index 704ac4cf46d0..fe11fafdbcda 100644
--- a/tests/introspection/iOSApiProtocolTest.cs
+++ b/tests/introspection/iOSApiProtocolTest.cs
@@ -450,6 +450,9 @@ protected override bool Skip (Type type, string protocolName)
case "CPMessageGridItemConfiguration": // Conformance not in headers
case "PKAddIdentityDocumentMetadata": // Conformance not in headers
return true;
+ // Xcode 26.2
+ case "SFSafariExtensionState": // Conformance not in headers
+ return true;
}
break;
case "NSSecureCoding":
@@ -661,6 +664,9 @@ protected override bool Skip (Type type, string protocolName)
case "CPMessageGridItemConfiguration": // Conformance not in headers
case "PKAddIdentityDocumentMetadata": // Conformance not in headers
return true;
+ // Xcode 26.2
+ case "SFSafariExtensionState": // Conformance not in headers
+ return true;
}
break;
case "NSCopying":
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-SafariServices.todo b/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-SafariServices.todo
deleted file mode 100644
index a9ab93814d84..000000000000
--- a/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-SafariServices.todo
+++ /dev/null
@@ -1,5 +0,0 @@
-!missing-selector! +SFSafariExtensionManager::getStateOfExtensionWithIdentifier:completionHandler: not bound
-!missing-selector! SFSafariExtensionState::isEnabled not bound
-!missing-type! SFSafariExtensionManager not bound
-!missing-type! SFSafariExtensionState not bound
-!missing-enum-value! SFErrorCode native value SFErrorMaximumAttemptsExceeded = 6 not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/iOS-SafariServices.todo b/tests/xtro-sharpie/api-annotations-dotnet/iOS-SafariServices.todo
deleted file mode 100644
index b2bc206f5df0..000000000000
--- a/tests/xtro-sharpie/api-annotations-dotnet/iOS-SafariServices.todo
+++ /dev/null
@@ -1,6 +0,0 @@
-!missing-selector! +SFSafariExtensionManager::getStateOfExtensionWithIdentifier:completionHandler: not bound
-!missing-selector! +SFSafariSettings::openExtensionsSettingsForIdentifiers:completionHandler: not bound
-!missing-selector! SFSafariExtensionState::isEnabled not bound
-!missing-type! SFSafariExtensionManager not bound
-!missing-type! SFSafariExtensionState not bound
-!missing-enum-value! SFErrorCode native value SFErrorMaximumAttemptsExceeded = 6 not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/macOS-SafariServices.ignore b/tests/xtro-sharpie/api-annotations-dotnet/macOS-SafariServices.ignore
index 18b39df283cf..26691771f8b9 100644
--- a/tests/xtro-sharpie/api-annotations-dotnet/macOS-SafariServices.ignore
+++ b/tests/xtro-sharpie/api-annotations-dotnet/macOS-SafariServices.ignore
@@ -9,3 +9,4 @@
# these values are not listed in the macOS headers, but it's an error enum, so we're keeping the same values across all platforms.
!extra-enum-value! Managed value 4 for SFErrorCode.InternalError not found in native headers
!extra-enum-value! Managed value 5 for SFErrorCode.MissingEntitlement not found in native headers
+!extra-enum-value! Managed value 6 for SFErrorCode.MaximumAttemptsExceeded not found in native headers