Всемирная конференция разработчиков 2025 уже идет, и это идеальное время для изучения самых значительных изменений и дополнений к фреймворку SwiftUI. Давайте узнаем обо всех новых интересных функциях, которые Apple приготовила для нас в этом году.
Компания Apple представила новый язык дизайна под названием Liquid Glass. Благодаря декларативной природе SwiftUI нам не нужно существенно модифицировать код, чтобы изменить дизайн приложений и применить новую концепцию дизайна. Достаточно собрать приложение в Xcode 26, и вы получите новый дизайн вашего приложения.
Навигационные стеки, вкладки, инспекторы, панели инструментов — все теперь стеклянное, более округлое и прозрачное. Хотя нам еще придется внести некоторые коррективы, чтобы улучшить пользовательский опыт, настройки фреймворка по умолчанию уже впечатляют.
В то время как API навигационного стека не изменился, навигация вкладками предоставляет нам несколько новых API, позволяющих улучшить пользовательский опыт с учетом нового языка дизайна. Если вы все еще используете старые TabView API , самое время отрефакторить свою навигацию по вкладкам. Хотя старые API также получают стеклянные преобразования, новые позволяют нам использовать их лучше.
private var tabNavigation: some View {
TabView {
Tab("feed", systemImage: "ruler") {
feedTab
}
Tab("insights", systemImage: "chart.xyaxis.line") {
NavigationStack {
InsightsFeatureView()
.navigationTitle("insights")
}
}
Tab("awareness", systemImage: "text.book.closed") {
NavigationStack {
AwarenessView()
.navigationTitle("awareness")
}
}
Tab("settings", systemImage: "ruler") {
NavigationStack {
SettingsView(settings: settings)
.navigationTitle("settings")
}
}
Tab("search", systemImage: "magnifyingglass", role: .search) {
NavigationStack {
SearchFeatureView(store: searchStore)
}
}
}
}
Как видно по картинке выше, я использую новый Tab API, чтобы переместить поиск в нижнюю часть экрана и отделить его от других вкладок.
Тулбары теперь по умолчанию стеклянные. На платформе можно заметить, что многие панели инструментов разделены на группы. Для этого случая в SwiftUI появился новый тип ToolbarSpacer, позволяющий разделять панели инструментов.
@ToolbarContentBuilder private var toolbar: some ToolbarContent {
ToolbarItem(placement: .topBarLeading) {
Button {
if isPro {
sheetShown = .gpt
} else {
unlockPro()
}
} label: {
Label("gpt", systemImage: "sparkles")
}
.popoverTip(FeedTip.gpt)
}
ToolbarItemGroup(placement: .topBarTrailing) {
Button("editor", systemImage: "pencil") {
sheetShown = .editor
}
.keyboardShortcut("n")
}
ToolbarSpacer(.fixed, placement: .topBarTrailing)
ToolbarItemGroup(placement: .topBarTrailing) {
Button(LocalizedStringKey(HKQuantityType.bloodGlucose.identifier), systemImage: "carrot") {
sheetShown = .bloodGlucose
}
.buttonStyle(.glass)
Button(LocalizedStringKey(HKQuantityType.bodyMass.identifier), systemImage: "scalemass") {
sheetShown = .bodyMass
}
}
}
Кнопки также получили новый тип GlassButtonStyle, который можно задать с помощью модификатора вида buttonStyle.
Button {
// action
} label: {
Label("add", systemImage: "plus")
}
.buttonStyle(.glass)
Когда вы создаете кастомное представление, которое хотите сделать стеклянным, есть специальный модификатор вида glassEffect.
HStack {
// views
}
.glassEffect()
Помимо новых API дизайна, мы также получили долгожданную поддержку attributed строк в представлении TextEditor. Еще одна долгожданная функция — WebView, которая также появилась в этом году.
import WebKit
struct BrowserView: View {
@State var page = WebPage()
var body: some View {
WebView(page)
.onAppear {
page.load(URLRequest(url: URL(staticString: "https://google.com")))
}
}
}
Новый WebView позволяет не только загружать веб-страницы, но и наблюдать за ними, настраивать user agent и т.д.
Это будет огромный год для SwiftUI на macOS. Как отметила Apple, в macOS значительно повысилась производительность List и других прокручиваемых представлений. Apple также представила новый шаблон Instruments, который значительно упрощает профилирование приложений SwiftUI.

