Loading...
Loading...
Non-glass SwiftUI APIs from WWDC 2025 (iOS 26, macOS 26, visionOS 26). Covers @Animatable macro, TextEditor with AttributedString/AttributedTextSelection/AttributedTextFormattingDefinition, FindContext, WebView/WebPage, UIHostingSceneDelegate, ToolbarSpacer, Slider ticks, windowResizeAnchor, dragContainer, draggable(containerItemID:), scrollEdgeEffectStyle, tabBarMinimizeBehavior. Use when building rich text editors, embedding web content, bridging UIKit scenes to SwiftUI, or configuring scroll edge effects and tab bar minimization. DO NOT use for Liquid Glass design patterns (use apple-liquid-glass-design), general Swift or pre-iOS 26 SwiftUI (use swiftui-ui-patterns).
npx skill4agent add kmshdev/claude-swift-toolkit swiftui-26-apiFor Liquid Glass APIs (,glassEffect,GlassEffectContainer, morph animations), loadbackgroundExtensionEffectskill instead.apple-liquid-glass-design
@Animatable
struct CoolShape: Shape {
var width: CGFloat
var angle: Angle
@AnimatableIgnored var isOpaque: Bool
// animatableData synthesized from width + angle
}TextEditorAttributedStringAttributedTextSelectionstruct SuggestionTextEditor: View {
@State var text: AttributedString = ""
@State var selection = AttributedTextSelection()
var body: some View {
VStack {
TextEditor(text: $text, selection: $selection)
SuggestionsView(substrings: getSubstrings(
text: text, indices: selection.indices(in: text)))
}
}
}AttributedTextFormattingDefinitionTextEditorstruct MyTextFormattingDefinition: AttributedTextFormattingDefinition {
var body: some AttributedTextFormattingDefinition<
AttributeScopes.SwiftUIAttributes
> {
ValueConstraint(
for: \.underlineStyle,
values: [nil, .single],
default: .single)
MyAttributedTextValueConstraint()
ContactsArePurple()
}
}import WebKitimport WebKit
struct ContentView: View {
@State private var page = WebPage()
var body: some View {
NavigationStack {
WebView(page)
.navigationTitle(page.title)
}
}
}UIHostingSceneDelegateclass HostingSceneDelegate: UIHostingSceneDelegate {
static var rootScene: some Scene {
WindowGroup(id: "swiftui-window") {
ContentView()
}
}
}
// Activate from UIKit:
if let request = UISceneSessionActivationRequest(
hostingDelegateClass: HostingSceneDelegate.self,
id: "swiftui-window"
) {
UIApplication.shared.activateSceneSession(for: request)
}ScrollView {
LazyVStack {
ForEach(data) { item in
RowView(item)
}
}
}
.scrollEdgeEffectStyle(.hard, for: .all)TabView {
Tab("Numbers", systemImage: "number") {
ScrollView {
ForEach(0 ..< 50) { index in
Text("\(index)").padding()
}
}
}
}
.tabBarMinimizeBehavior(.onScrollDown)ContentView()
.toolbar(id: "main-toolbar") {
ToolbarItem(id: "tag") { TagButton() }
ToolbarItem(id: "share") { ShareButton() }
ToolbarSpacer(.fixed)
ToolbarItem(id: "more") { MoreButton() }
}struct HeightResizingExample: View {
@State private var height: CGFloat = 300
var body: some View {
Color.red
.overlay { Text("Tap to toggle").foregroundStyle(.white) }
.onTapGesture {
withAnimation(.easeInOut) {
height = height == 300 ? 700 : 300
}
}
.frame(width: 250, height: height)
.windowResizeAnchor(.top)
}
}VStack {
ForEach(fruits) { fruit in
FruitView(fruit)
.draggable(containerItemID: fruit.name)
}
}
.dragContainer(itemID: \Fruit.name) { ids in
fruits(with: ids)
}apple-liquid-glass-designtext-editing.mdfind-context.mdwebkit.mduikit-scene-bridge.mdwebkit.mduikit-scene-bridge.mdanimatable-macro.mdapple-liquid-glass-designmacos-drag-and-windows.mdtoolbar-and-slider.mdanimatable-macro.mdapple-liquid-glass-designWebPage@MainActorWebPageWebViewWebPageWebViewdragContainerdraggable(containerItemID:)@AnimatableFindContext@Environment(\.findContext)TextEditorAttributedStringAttributedTextSelectionString| Symptom | Cause | Fix |
|---|---|---|
| Missing framework import | Add |
| Compiler too old | Requires Swift 5.9+ (Xcode 15+), even though protocol availability is iOS 13+ |
| Applied to wrong container | Only works on |
| Missing scene declaration | Ensure |
| Not accessing via environment | Use |
| Not stored as @State | Declare as |
| Missing resizability setting | Set |
| Selection bound to String | |
| macOS 26 only | Guard with |
| File | Read when... |
|---|---|
| using |
| building |
| implementing find/replace via |
| embedding web content with |
| bridging UIKit scene lifecycle to SwiftUI via |
| adding |
| configuring |
| adding |
apple-liquid-glass-designswiftui-input-apiswift-app-lifecycleswiftui-effects-api