Apple Design Awards 2026
Apple назвала 36 финалистов дизайн-премии года. Победителей объявят на WWDC 8-12 июня. Ниже будет нескольо приложений, можно взять за пример некоторые момент, авось получится стать следующим финалистом?🔥
Guitar Wiz - соло дев из Индии написал его полностью на SwiftUI. VoiceOver проговаривает каждую струну и аккорд. Dynamic Type, Increased Contrast, Differentiate Without Color - всё из коробки. Если хочешь понять как делать accessibility правильно - вот твой референс.
Hearing Buddy - девушка с потерей слуха сделала субтитры в реальном времени. Использует Foundation Models для on-device распознавания речи. Кто забыл - это тот самый фреймворк который Apple представила в iOS 26.
Structured - планер дня, на SwiftUI. Автор встроил Foundation Models для автозаполнения задач: к примеру, ты пишешь "зубной" и он предлагает "запись к стоматологу, среда 10:00".
Detail: AI Video Editor - превращает текстовый план в сценарий телесуфлёра и сам монтирует multi-angle. Тут тоже используется Foundation Models.
Apple любит, когда используешь их новинки. Возможно стоит рассмотреть новинки этого WWDC, если хочется, чтобы твоё приложение зафичерили в сторе?
👉 Все финалисты: https://developer.apple.com/design/awards/
Apple назвала 36 финалистов дизайн-премии года. Победителей объявят на WWDC 8-12 июня. Ниже будет нескольо приложений, можно взять за пример некоторые момент, авось получится стать следующим финалистом?
Guitar Wiz - соло дев из Индии написал его полностью на SwiftUI. VoiceOver проговаривает каждую струну и аккорд. Dynamic Type, Increased Contrast, Differentiate Without Color - всё из коробки. Если хочешь понять как делать accessibility правильно - вот твой референс.
Hearing Buddy - девушка с потерей слуха сделала субтитры в реальном времени. Использует Foundation Models для on-device распознавания речи. Кто забыл - это тот самый фреймворк который Apple представила в iOS 26.
Structured - планер дня, на SwiftUI. Автор встроил Foundation Models для автозаполнения задач: к примеру, ты пишешь "зубной" и он предлагает "запись к стоматологу, среда 10:00".
Detail: AI Video Editor - превращает текстовый план в сценарий телесуфлёра и сам монтирует multi-angle. Тут тоже используется Foundation Models.
Apple любит, когда используешь их новинки. Возможно стоит рассмотреть новинки этого WWDC, если хочется, чтобы твоё приложение зафичерили в сторе?
👉 Все финалисты: https://developer.apple.com/design/awards/
Please open Telegram to view this post
VIEW IN TELEGRAM
App Store
Guitar Wiz - Tuner & Chords App - App Store
Download Guitar Wiz - Tuner & Chords by Bijoy Thangaraj on the App Store. See screenshots, ratings and reviews, user tips, and more apps like Guitar Wiz - Tuner…
👍4❤3🔥2
Новые вопросы для @ios_roadmap_academy_2024_bot
• Swift Testing: параметризованные тесты через @Test(arguments:)
• Тестирование actor и @MainActor кода без deadlock в XCTest
• Memory leak detection в тестах: addTeardownBlock и weak self
• UserRepository на Core Data и SwiftData: тестирование persistence без диска
• ImageProcessor: отлов регрессий производительности в CI через XCTest
• Тестирование AsyncSequence и AsyncStream: ожидание событий и завершения
• AuthService: изоляция Keychain, UserDefaults и FileManager в unit-тестах
• SwiftUI LoginView: поведение и visual regression в одном тест файле
• Xcode Test Plans: разный запуск unit, integration и UI в СI
• PaymentService: выбор test double для каждой зависимости
• Охват анимации в SwiftUI: withAnimation vs .animation(_:value:)
• Coordinate spaces в GeometryProxy и поведение GeometryReader
• Dependency tracking в SwiftUI body: триггеры перерендера и run loop колизии
• Модальная презентация в SwiftUI: .sheet, .fullScreenCover и DismissAction
• Coordinator в UIViewRepresentable: makeUIView, updateUIView, makeCoordinator и bridge между мирами
• Safe area в SwiftUI: safeAreaInsets, ignoresSafeArea и frame в layout pass
• Lazy-контейнеры SwiftUI: построение по требованию и точка срабатывания onAppear
• AnyView и type erasure: потеря structural identity и последствия для SwiftUI diffing
• @ViewBuilder внутри: TupleView, _ConditionalContent и предел в 10 потомков
• Различие some и any в Swift 5.7+: opaque types vs existential containers
• Семантика inout: copy-in/copy-out и запрет захвата в @escaping closure
• Семантика @autoclosure: ленивая оценка, nil coalescing и assert
• Контракт @propertyWrapper: wrappedValue, projectedValue и dollar-prefix accessor
• Custom CodingKeys и nested container для flat-структуры из nested JSON
• String.Index, .count и Character vs Unicode.Scalar в Swift
• ArraySlice: сохранение индексов исходного Array и copy-on-write
• Автоматический synthesis Hashable и Equatable: struct, enum, class
• Иерархия KeyPath в Swift: KeyPath, WritableKeyPath, ReferenceWritableKeyPath, PartialKeyPath
• Result<Success, Failure>: map, mapError, flatMap и get() в Swift
• Ключевое слово mutating: struct, enum, class и protocol требования
• Семантика равенства AnyHashable: type identity и .base
• Tuple и protocol conformance в Swift
• Primary associated types: что добавил Swift 5.7
• Варианты try / try? / try! и контракт rethrows
• Дженерики: where-clause и same-type constraints
• Access control: private vs fileprivate vs private(set)
• Приведение типов: as? / as! / is, protocol-existential и type(of:)
• Custom Sequence: self-as-iterator и ленивые последовательности
• Цикл layout в UIView: setNeedsLayout, layoutIfNeeded и layoutSubviews
• Off-screen rendering: триггеры и стоимость GPU pass
• Цикл отрисовки UIView: setNeedsDisplay() и draw(_:)
• Алгоритм hitTest(_:with:): обход subviews и условия возврата nil
• Auto Layout self-sizing: intrinsicContentSize, invalidate и systemLayoutSizeFitting
• UIScrollView: contentInset vs adjustedContentInset и автоматическое смещение contentOffset
• Идентичность через Hashable и режимы apply в NSDiffableDataSourceSnapshot
• Анализ различий UIGestureRecognizer: shouldRecognizeSimultaneouslyWith vs require(toFail:)
• Прерывание UIViewPropertyAnimator: fractionComplete и isReversed во время interactive transitions
• Порядок жизненных методов при push и модальной презентации
Категория:"Тестирование"
• Swift Testing: параметризованные тесты через @Test(arguments:)
• Тестирование actor и @MainActor кода без deadlock в XCTest
• Memory leak detection в тестах: addTeardownBlock и weak self
• UserRepository на Core Data и SwiftData: тестирование persistence без диска
• ImageProcessor: отлов регрессий производительности в CI через XCTest
• Тестирование AsyncSequence и AsyncStream: ожидание событий и завершения
• AuthService: изоляция Keychain, UserDefaults и FileManager в unit-тестах
• SwiftUI LoginView: поведение и visual regression в одном тест файле
• Xcode Test Plans: разный запуск unit, integration и UI в СI
• PaymentService: выбор test double для каждой зависимости
Категория:"SwiftUI: Основы"
• Охват анимации в SwiftUI: withAnimation vs .animation(_:value:)
• Coordinate spaces в GeometryProxy и поведение GeometryReader
• Dependency tracking в SwiftUI body: триггеры перерендера и run loop колизии
• Модальная презентация в SwiftUI: .sheet, .fullScreenCover и DismissAction
• Coordinator в UIViewRepresentable: makeUIView, updateUIView, makeCoordinator и bridge между мирами
• Safe area в SwiftUI: safeAreaInsets, ignoresSafeArea и frame в layout pass
• Lazy-контейнеры SwiftUI: построение по требованию и точка срабатывания onAppear
• AnyView и type erasure: потеря structural identity и последствия для SwiftUI diffing
• @ViewBuilder внутри: TupleView, _ConditionalContent и предел в 10 потомков
Категория:"Swift: Основы"
• Различие some и any в Swift 5.7+: opaque types vs existential containers
• Семантика inout: copy-in/copy-out и запрет захвата в @escaping closure
• Семантика @autoclosure: ленивая оценка, nil coalescing и assert
• Контракт @propertyWrapper: wrappedValue, projectedValue и dollar-prefix accessor
• Custom CodingKeys и nested container для flat-структуры из nested JSON
• String.Index, .count и Character vs Unicode.Scalar в Swift
• ArraySlice: сохранение индексов исходного Array и copy-on-write
• Автоматический synthesis Hashable и Equatable: struct, enum, class
• Иерархия KeyPath в Swift: KeyPath, WritableKeyPath, ReferenceWritableKeyPath, PartialKeyPath
• Result<Success, Failure>: map, mapError, flatMap и get() в Swift
• Ключевое слово mutating: struct, enum, class и protocol требования
• Семантика равенства AnyHashable: type identity и .base
• Tuple и protocol conformance в Swift
• Primary associated types: что добавил Swift 5.7
• Варианты try / try? / try! и контракт rethrows
• Дженерики: where-clause и same-type constraints
• Access control: private vs fileprivate vs private(set)
• Приведение типов: as? / as! / is, protocol-existential и type(of:)
• Custom Sequence: self-as-iterator и ленивые последовательности
Категория:"UIKit: Основы"
• Цикл layout в UIView: setNeedsLayout, layoutIfNeeded и layoutSubviews
• Off-screen rendering: триггеры и стоимость GPU pass
• Цикл отрисовки UIView: setNeedsDisplay() и draw(_:)
• Алгоритм hitTest(_:with:): обход subviews и условия возврата nil
• Auto Layout self-sizing: intrinsicContentSize, invalidate и systemLayoutSizeFitting
• UIScrollView: contentInset vs adjustedContentInset и автоматическое смещение contentOffset
• Идентичность через Hashable и режимы apply в NSDiffableDataSourceSnapshot
• Анализ различий UIGestureRecognizer: shouldRecognizeSimultaneouslyWith vs require(toFail:)
• Прерывание UIViewPropertyAnimator: fractionComplete и isReversed во время interactive transitions
• Порядок жизненных методов при push и модальной презентации
Эти вопросы доступны как для категории на экране "Интервью", так же будут попадаться и для дэлей.
👍5🔥4❤1
UI обновление для mini app
Привет, в приложении уже доступен новый UI. Теперь легко и удобно отслеживать достижения, ключевые метрики и прогресс по ответам на вопросы.
Суть обновления в том, чтобы наконец-то унифицировать этот экран. Он будет и дальше докручиваться, доделываться, но теперь уже с айдентикой и понятным UI.
Если есть вопросы, предложения по Mini App - всегда можно отписать в лс. А сам Mini App доступен здесь: @ios_roadmap_academy_2024_bot
Привет, в приложении уже доступен новый UI. Теперь легко и удобно отслеживать достижения, ключевые метрики и прогресс по ответам на вопросы.
Суть обновления в том, чтобы наконец-то унифицировать этот экран. Он будет и дальше докручиваться, доделываться, но теперь уже с айдентикой и понятным UI.
Если есть вопросы, предложения по Mini App - всегда можно отписать в лс. А сам Mini App доступен здесь: @ios_roadmap_academy_2024_bot
❤5🔥4👍2
WWDC 2026 - основные моменты
Если не хочется смотреть видео по WWDC, но хочется тезисно понять:
• Что сделали
• Где сделали
• Описание
И т.д. то вот WWDC Notes ведётся западным коммьюнити. На этом же сайте из а 2025 год есть и будет наполняться по мере выхода выпусков в этом году!
Если не хочется смотреть видео по WWDC, но хочется тезисно понять:
• Что сделали
• Где сделали
• Описание
И т.д. то вот WWDC Notes ведётся западным коммьюнити. На этом же сайте из а 2025 год есть и будет наполняться по мере выхода выпусков в этом году!
🔥3❤2👍1
WWDC26 - Platforms State of the Union
В этом году удивляет! Мало того, что будет RAG и Температура, т.е работу с AI планируется серьзеная.
Так показали новый Xcode 27:
- Плагины место где можно будет накатить скиллы, агенты и тулзы. К примеру Гитхаб и Фигма будут уже доступны.
- Хаб для тестирования, прощай Rocket Sim? Где можно будет растянуть девайс, поменять цвета и тему и тд
- AI теперь будет сопровождать планом, как завещали лучшие LLM, ревью внутри Xcode с ароматами подпункто.
Так еще и Xcode AI теперь сможет взять и полностью протестировать: понажимать, подергать, перейти, а в конце выгрузить скриншоты и описание, что сделано!
Ну и наконец-то сломанное body в SwiftUI теперь покажет конкретное место, не прошло и 5 лет 😁🤝
Выглядит интересным 🤝
В этом году удивляет! Мало того, что будет RAG и Температура, т.е работу с AI планируется серьзеная.
Так показали новый Xcode 27:
- Плагины место где можно будет накатить скиллы, агенты и тулзы. К примеру Гитхаб и Фигма будут уже доступны.
- Хаб для тестирования, прощай Rocket Sim? Где можно будет растянуть девайс, поменять цвета и тему и тд
- AI теперь будет сопровождать планом, как завещали лучшие LLM, ревью внутри Xcode с ароматами подпункто.
Так еще и Xcode AI теперь сможет взять и полностью протестировать: понажимать, подергать, перейти, а в конце выгрузить скриншоты и описание, что сделано!
Ну и наконец-то сломанное body в SwiftUI теперь покажет конкретное место, не прошло и 5 лет 😁🤝
Выглядит интересным 🤝
❤8🔥4👍2😁2
Property Wrapper @State теперь макрос
Только-что показали, что @State стала макросом и тем самым будет доступна с ios 17.
Исправили проблему, при которой @State могла вызвать конструктор сущности несколько раз.
В отличие от @StateObject с его autoclosure, у @State отсутствовало последнее и это было неоднозначно.
В ноушене про это писал, что будьте осторожны, несет за собой сайд эффект.
Теперь еще одну неприятность убрали, отлично!
Только-что показали, что @State стала макросом и тем самым будет доступна с ios 17.
Исправили проблему, при которой @State могла вызвать конструктор сущности несколько раз.
В отличие от @StateObject с его autoclosure, у @State отсутствовало последнее и это было неоднозначно.
В ноушене про это писал, что будьте осторожны, несет за собой сайд эффект.
Теперь еще одну неприятность убрали, отлично!
🔥5❤2👍1
ForEach из SwiftUI обзовется swipe actions
Наконец-то Apple добавили поведение свайпов: влево, вправо как у List, UICollection, UITableView, Table и для ForEach элементов, примате ленивые стеки!
Жаль это все доступно только с 27 версии. Как по мне изначально должно было быт, с 13 или хотя бы 15…
Наконец-то Apple добавили поведение свайпов: влево, вправо как у List, UICollection, UITableView, Table и для ForEach элементов, примате ленивые стеки!
Жаль это все доступно только с 27 версии. Как по мне изначально должно было быт, с 13 или хотя бы 15…
❤4🔥3😁2🤯1
Реинкорнация Stack Overflow
Возможно ты видел новость, что количество вопросов на Stack Overflow упало с 200к до 3862 в месяц.
Так вот, команда не сдаётся, она адаптируется. Будут делать свой сайт "API first" для агентов.
Как это работает? Цикл из четырёх шагов:
• Сначала ищи. Независимо от того, планирует ли агент выполнение задачи, застрял ли он в процессе реализации или собирается выполнить действие, на которое модель не была обучена, он сначала запрашивает информацию в Stack Overflow for Agents, прежде чем тратить вычислительные ресурсы на повторный поиск уже известных решений. Если нужный ответ есть в корпусе, агент использует проверенный ответ и приступает к выполнению задачи.
• Нет ответа - внеси свой. Решил проблему сам? Оформляет пост. Для этого skill файл просит сначала показать черновик человеку-оркестратору на ревью.
• Проверяй чужое. Агенты и разработчики, которые пробуют решить ту же проблему после публикации, делятся информацией о том, что сработало, что пришлось изменить и при каких условиях это сработало. Именно проверка, а не создание ответов, помогает агентам заработать репутацию на Stack Overflow.
• Сигналы объединяются в консенсус. Голоса, ответы и отзывы о проверке возвращаются к исходному сообщению и накапливаются вокруг него. Платформа создана для выявления консенсуса, а не единственного канонического ответа, поэтому пользователи видят, что уже было опробовано, и сами решают, что подходит именно им.
Возможно ты видел новость, что количество вопросов на Stack Overflow упало с 200к до 3862 в месяц.
Так вот, команда не сдаётся, она адаптируется. Будут делать свой сайт "API first" для агентов.
Как это работает? Цикл из четырёх шагов:
• Сначала ищи. Независимо от того, планирует ли агент выполнение задачи, застрял ли он в процессе реализации или собирается выполнить действие, на которое модель не была обучена, он сначала запрашивает информацию в Stack Overflow for Agents, прежде чем тратить вычислительные ресурсы на повторный поиск уже известных решений. Если нужный ответ есть в корпусе, агент использует проверенный ответ и приступает к выполнению задачи.
• Нет ответа - внеси свой. Решил проблему сам? Оформляет пост. Для этого skill файл просит сначала показать черновик человеку-оркестратору на ревью.
• Проверяй чужое. Агенты и разработчики, которые пробуют решить ту же проблему после публикации, делятся информацией о том, что сработало, что пришлось изменить и при каких условиях это сработало. Именно проверка, а не создание ответов, помогает агентам заработать репутацию на Stack Overflow.
• Сигналы объединяются в консенсус. Голоса, ответы и отзывы о проверке возвращаются к исходному сообщению и накапливаются вокруг него. Платформа создана для выявления консенсуса, а не единственного канонического ответа, поэтому пользователи видят, что уже было опробовано, и сами решают, что подходит именно им.
Сейчас есть Три типа постов
1. Question. Что пробовал, что не вышло, где остался затык.
2. Today I Learned. Что сломалось, что помогло, в чём корневая причина. Самый ценный тип: фиксирует ровно то, чего не было в обучении модели.
3. Blueprint. Переиспользуемый паттерн архитектуры. Планка качества максимальная: один кривой Blueprint уведёт в сторону всех, кто строит такое же.
👍5🔥4❤2
Матрёшка из Task внутри ViewModel
Есть популярный паттерн, который выглядит знакомым многим SwiftUI разработчикам:
На первый взгляд вроде-бы всё нормально:
• ViewModel изолирована на MainActor
• UI состояние меняется безопасно
• async работа вынесена в Task
Но есть одно "но" и выглядит оно как
Проблема в том, что мы легко можем протащить через MainActor работу, которой этот актор вообще не нужен.
Например, ViewModel целиком помечена
Но как быть, если у нас ViewModel большая, скажем на 800-900 строк и одну из операций внутри неё необходимо реализовать вне текущего actor isolation?🤔
В Swift 6.2 для такого случая есть явный инструмент - атрибут @concurrent.
Что здесь происходит:
•
• Вызов публикации больше не стартует в MainActor изоляции ViewModel
• MainActor.run используется только там, где реально нужно обновить UI состояние
То есть мы не таскаем всю операцию через главный актор просто потому, что вся ViewModel помечена @MainActor. И
Эту async работу не нужно выполнять в текущей actor isolation
Тем самым ближе познакомились с достаточно частым кейсом, сейчас / в будущем, где нам может понадобиться новый атрибут! 😎️️️️️️
Вдохновился и видоизменил под +1 кейс от Unexpected Task suspension points in Swift Concurrency
Есть популярный паттерн, который выглядит знакомым многим SwiftUI разработчикам:
@MainActor
final class ArticleViewModel: ObservableObject {
@Published var isPublishing = false
func publish(_ article: Article) {
isPublishing = true
Task {
await ArticlePublisher.publish(article: article)
isPublishing = false
}
}
}
На первый взгляд вроде-бы всё нормально:
• ViewModel изолирована на MainActor
• UI состояние меняется безопасно
• async работа вынесена в Task
Но есть одно "но" и выглядит оно как
Task. Кто-то сразу прикинул:"Ага, ну тут у нас просто Task, а не Task.detached и значит мы наследуем изоляцию и замыкание Task будет изолировано на MainActor!" И будет прав, достаточно типичный пример в SwiftUI разработке.Проблема в том, что мы легко можем протащить через MainActor работу, которой этот актор вообще не нужен.
Например, ViewModel целиком помечена
@MainActor, потому что хранит UI состояние и управляет навигацией, но не каждая операция внутри такой ViewModel обязана выполняться в этой изоляции.Но как быть, если у нас ViewModel большая, скажем на 800-900 строк и одну из операций внутри неё необходимо реализовать вне текущего actor isolation?
В Swift 6.2 для такого случая есть явный инструмент - атрибут @concurrent.
Task { @concurrent in
await ArticlePublisher.publish(article: article)
await MainActor.run {
isPublishing = false
}
}
Что здесь происходит:
•
@concurrent говорит замыканию Task не наследовать текущую actor isolation• Вызов публикации больше не стартует в MainActor изоляции ViewModel
• MainActor.run используется только там, где реально нужно обновить UI состояние
То есть мы не таскаем всю операцию через главный актор просто потому, что вся ViewModel помечена @MainActor. И
@concurrent нужен как раз для случаев, когда мы хотим явно сказать:Эту async работу не нужно выполнять в текущей actor isolation
Тем самым ближе познакомились с достаточно частым кейсом, сейчас / в будущем, где нам может понадобиться новый атрибут! 😎️️️️️️
Вдохновился и видоизменил под +1 кейс от Unexpected Task suspension points in Swift Concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥5
#miniapp #обновление
Привет, в mini app обновление - расширил источник вакансий. Теперь есть небольшой количество вакансий из Linkedln, совсем немного 10-15шт удалось подтянуть.
Соверешнно бесплатно и уже доступно для каждого: @ios_roadmap_academy_2024_bot
Привет, в mini app обновление - расширил источник вакансий. Теперь есть небольшой количество вакансий из Linkedln, совсем немного 10-15шт удалось подтянуть.
Буду так же смотреть в увеличение вакансий из Linkedln + остальные источники.
Соверешнно бесплатно и уже доступно для каждого: @ios_roadmap_academy_2024_bot
🔥3👍2🤯1
Получай новые вакансии прямо в боте
Сейчас все настройки у каждого пользователя по-умолчанию выключены. Но если тебе актуален просмотр вакансий и тем-более новых, то по картинкам показал путь до включения уведомлений для новых вакансий.
Тем самым тебе от бота будет приходить каждые 2 часа при наличии новых. Если вакансий открылось несколько - будет одно смс с разделением.
При нажатии на вакансию ты по диплинку перейдешь на детальный экран. Там уже на сам сайт, либо написать заметку или добавить в избранное и т.д.
Новые вакансии - это новые в БД мини App. Так как источников несколько.
@ios_roadmap_academy_2024_bot
Сейчас все настройки у каждого пользователя по-умолчанию выключены. Но если тебе актуален просмотр вакансий и тем-более новых, то по картинкам показал путь до включения уведомлений для новых вакансий.
Тем самым тебе от бота будет приходить каждые 2 часа при наличии новых. Если вакансий открылось несколько - будет одно смс с разделением.
При нажатии на вакансию ты по диплинку перейдешь на детальный экран. Там уже на сам сайт, либо написать заметку или добавить в избранное и т.д.
Новые вакансии - это новые в БД мини App. Так как источников несколько.
• Бесплатно
• Доступно
• Легко и просто
@ios_roadmap_academy_2024_bot
🔥3❤1👍1