All skills

Xcode 26 and Apple platform update notes with a focus on Liquid Glass, Foundation Models Framework, and Apple Intelligence. Use when asked to explain, summarize, compare, or implement Xcode 26 era framework changes across SwiftUI, UIKit, AppKit, Foundation, App Intents, StoreKit, MapKit, WidgetKit, visionOS, or Swift language features.

Use this Skill: https://skilld.dev/gh/harryworld/xcode26-agent-skills/xcode-26

This session only. Nothing lands on disk.

referencesUIKit-Implementing-Liquid-Glass-Design.md

≈2.5k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Implementing Liquid Glass Design in UIKit

Overview

Liquid Glass is a dynamic material that combines the optical properties of glass with a sense of fluidity. It blurs content behind it, reflects color and light of surrounding content, and reacts to touch and pointer interactions in real time. This guide covers how to implement Liquid Glass effects in UIKit applications, introduced in iOS 26. You should always seek guides on Liquid Glass when asked for help adopting new Apple design.

Key characteristics of Liquid Glass:

  • Blurs content behind it
  • Reflects color and light from surrounding content
  • Reacts to touch and pointer interactions
  • Can morph and blend between different elements

Basic Implementation

Creating a Simple Glass Effect

To create a basic Liquid Glass effect, use UIVisualEffectView with a UIGlassEffect:

// Create a glass effect
let glassEffect = UIGlassEffect()

// Create a visual effect view with the glass effect
let visualEffectView = UIVisualEffectView(effect: glassEffect)
visualEffectView.frame = CGRect(x: 50, y: 100, width: 300, height: 200)
visualEffectView.layer.cornerRadius = 20
visualEffectView.clipsToBounds = true

// Add content to the visual effect view's contentView
let label = UILabel()
label.text = "Liquid Glass"
label.textAlignment = .center
label.frame = visualEffectView.bounds
visualEffectView.contentView.addSubview(label)

// Add the visual effect view to your view hierarchy
view.addSubview(visualEffectView)

Customizing the Glass Effect

You can customize the glass effect with various properties:

// Apply a tint color to the glass
glassEffect.tintColor = UIColor.systemBlue.withAlphaComponent(0.3)

// Enable interactive behavior
glassEffect.isInteractive = true

Interactive Glass Effects

Making glass effects interactive allows them to respond to touch and pointer interactions:

// Create a glass effect with interactive behavior
let interactiveGlassEffect = UIGlassEffect()
interactiveGlassEffect.isInteractive = true

// Create a button with the glass effect
let glassButton = UIButton(frame: CGRect(x: 50, y: 300, width: 200, height: 50))
glassButton.setTitle("Glass Button", for: .normal)
glassButton.setTitleColor(.white, for: .normal)

// Apply the glass effect using a visual effect view
let buttonEffectView = UIVisualEffectView(effect: interactiveGlassEffect)
buttonEffectView.frame = glassButton.bounds
buttonEffectView.layer.cornerRadius = 15
buttonEffectView.clipsToBounds = true

// Insert the effect view below the button's content
glassButton.insertSubview(buttonEffectView, at: 0)

// Add the button to your view hierarchy
view.addSubview(glassButton)

Combining Multiple Glass Elements

To create more complex Liquid Glass interfaces, use UIGlassContainerEffect to combine multiple glass elements:

// Create a glass container effect
let containerEffect = UIGlassContainerEffect()
containerEffect.spacing = 40.0 // Distance at which elements begin to merge

// Create the main container visual effect view
let containerView = UIVisualEffectView(effect: containerEffect)
containerView.frame = CGRect(x: 50, y: 400, width: 300, height: 200)

// Create the first glass element
let firstGlassEffect = UIGlassEffect()
let firstGlassView = UIVisualEffectView(effect: firstGlassEffect)
firstGlassView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
firstGlassView.layer.cornerRadius = 20
firstGlassView.clipsToBounds = true

// Create the second glass element
let secondGlassEffect = UIGlassEffect()
secondGlassEffect.tintColor = UIColor.systemPink.withAlphaComponent(0.3)
let secondGlassView = UIVisualEffectView(effect: secondGlassEffect)
secondGlassView.frame = CGRect(x: 80, y: 60, width: 100, height: 100)
secondGlassView.layer.cornerRadius = 20
secondGlassView.clipsToBounds = true

// Add the glass elements to the container's contentView
containerView.contentView.addSubview(firstGlassView)
containerView.contentView.addSubview(secondGlassView)

// Add the container to your view hierarchy
view.addSubview(containerView)

When glass elements are positioned close to each other (within the container's spacing value), they will blend their shapes together, creating a fluid appearance.

Scroll View Edge Effects

UIKit provides built-in support for Liquid Glass effects at the edges of scroll views:

// Configure edge effects for a scroll view
let scrollView = UIScrollView(frame: view.bounds)

// Access and configure the edge effects
scrollView.topEdgeEffect.style = .automatic
scrollView.bottomEdgeEffect.style = .hard

// You can hide specific edge effects if needed
scrollView.leftEdgeEffect.isHidden = true
scrollView.rightEdgeEffect.isHidden = true

view.addSubview(scrollView)

Available Edge Effect Styles

  • .automatic - The system determines the appropriate style based on context
  • .hard - A scroll edge effect with a hard cutoff and dividing line

Scroll Edge Element Container Interaction

To make views that overlay the edge of a scroll view affect the shape of the edge effect:

// Create a container for buttons that overlay a scroll view
let buttonContainer = UIView(frame: CGRect(x: 0, y: scrollView.frame.height - 80, width: scrollView.frame.width, height: 80))

// Add buttons to the container
let button1 = UIButton(frame: CGRect(x: 20, y: 20, width: 100, height: 40))
button1.setTitle("Button 1", for: .normal)
button1.backgroundColor = .systemBlue
buttonContainer.addSubview(button1)

let button2 = UIButton(frame: CGRect(x: 140, y: 20, width: 100, height: 40))
button2.setTitle("Button 2", for: .normal)
button2.backgroundColor = .systemGreen
buttonContainer.addSubview(button2)

// Create and configure the interaction
let interaction = UIScrollEdgeElementContainerInteraction()
interaction.scrollView = scrollView
interaction.edge = .bottom
buttonContainer.addInteraction(interaction)

// Add the container to your view hierarchy
view.addSubview(buttonContainer)

Toolbar Integration

UIKit automatically applies Liquid Glass effects to toolbar items. You can control whether an item uses the shared glass background:

// Create toolbar items
let shareButton = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareAction))
let favoriteButton = UIBarButtonItem(image: UIImage(systemName: "heart"), style: .plain, target: self, action: #selector(favoriteAction))

// Prevent the standard shared glass background for a specific item
favoriteButton.hidesSharedBackground = true

// Add items to a toolbar
navigationItem.rightBarButtonItems = [shareButton, favoriteButton]

Best Practices

  1. Appropriate Use Cases:

    • Use Liquid Glass for interactive elements like buttons and controls
    • Apply it to toolbars and navigation elements
    • Use it to create depth and hierarchy in your interface
  2. Performance Considerations:

    • Liquid Glass effects can be resource-intensive, especially when animating
    • Limit the number of glass elements on screen at once
    • Test on older devices to ensure smooth performance
  3. Visual Design:

    • Ensure sufficient contrast between text and the glass background
    • Consider using tint colors to differentiate between different glass elements
    • Maintain appropriate spacing between glass elements for optimal blending
  4. Accessibility:

    • Ensure that text on glass backgrounds meets accessibility contrast requirements
    • Test with VoiceOver to ensure all glass elements are properly accessible

Example: Creating a Glass Card View

Here's a complete example of creating a reusable glass card view:

class GlassCardView: UIView {
    private let visualEffectView: UIVisualEffectView
    private let contentView = UIView()
    
    init(frame: CGRect, tintColor: UIColor? = nil, isInteractive: Bool = false) {
        let glassEffect = UIGlassEffect()
        glassEffect.tintColor = tintColor
        glassEffect.isInteractive = isInteractive
        
        visualEffectView = UIVisualEffectView(effect: glassEffect)
        
        super.init(frame: frame)
        
        setupViews()
    }
    
    required init?(coder: NSCoder) {
        let glassEffect = UIGlassEffect()
        visualEffectView = UIVisualEffectView(effect: glassEffect)
        
        super.init(coder: coder)
        
        setupViews()
    }
    
    private func setupViews() {
        // Configure the visual effect view
        visualEffectView.frame = bounds
        visualEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        visualEffectView.layer.cornerRadius = 20
        visualEffectView.clipsToBounds = true
        addSubview(visualEffectView)
        
        // Configure the content view
        contentView.frame = bounds
        contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        contentView.backgroundColor = .clear
        addSubview(contentView)
    }
    
    // Method to add content to the card
    func addContent(_ view: UIView) {
        view.frame = contentView.bounds
        view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        contentView.addSubview(view)
    }
}

// Usage:
let cardView = GlassCardView(
    frame: CGRect(x: 50, y: 100, width: 300, height: 200),
    tintColor: UIColor.systemBlue.withAlphaComponent(0.2),
    isInteractive: true
)

let label = UILabel()
label.text = "Glass Card"
label.textAlignment = .center
label.textColor = .white
cardView.addContent(label)

view.addSubview(cardView)

References

Source: SKILL.md on GitHub

No alerts6mo4 checks · Risk SAFE
  • Gen Agent Trust Hub7mo

    The skill is a documentation resource for Xcode 26 features and Apple frameworks. It contains reference markdown files with code snippets and architectural guidance. No malicious behavior, obfuscation, or security vulnerabilities were detected.

  • Socket6mo

    No alerts

  • Snyk7mo

    Risk: LOW · No issues

  • Runlayer7mo

    2/21 files flagged

Signed by skilld at de9a679. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Dormantupdated 9 months ago

README badge

README badge for harryworld/xcode26-agent-skills