What's New in UIKit
Принес вам супер лонг рид про нововведение в UIKit в 26 iOS. 64 минуты на чтение - самое то на выходных🍷
Вот основные моменты и темы, освещённые в статье:
➡️ Обновления
➡️ Новые визуальные эффекты и компоненты: введён новый класс
➡️ Поддержка HDR-цветов: в
➡️ Расширена система меню с новыми методами для тонкой настройки главного меню iPadOS и контекстных меню, а также поддержкой фокусного выбора меню.
➡️ новые свойства для
➡️ новый класс
Принес вам супер лонг рид про нововведение в UIKit в 26 iOS. 64 минуты на чтение - самое то на выходных
Вот основные моменты и темы, освещённые в статье:
UIAction
и UIApplicationDelegate
: добавлены новые идентификаторы действий и происходит постепенный отход от UIApplicationDelegate
в пользу более современных UISceneDelegate
и UIWindowSceneDelegate
UIGlassEffect
с эффектами Liquid Glass
, новые API для сглаживания углов в виде UICornerConfiguration
и UICornerRadius
. Также есть новые опции для кнопок (UIButton.Configuration
и элементов навигационной панели UIBarButtonItem
, включая новые стили, бейджи иконок и поведение.UIColor
и связанных компонентах появляются конструкторы и свойства для работы с HDR, а в UIColorPickerViewController
добавлен HDR-лайтбокс.UINavigationItem
позволяют задавать комплексные атрибуты титулов и подзаголовков, улучшена работа жестов для интерактивного закрытия экранов и размещения поисковых панелей.UIScrollEdgeEffect
позволяет контролировать эффекты на краях скроллов, а появилось также взаимодействие UIScrollEdgeElementContainerInteraction
для кастомных элементов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Getting access to the user’s calendar
🗓 Для работы с календарем и напоминаниями пользователей используется фреймворк
🔴 Перед доступом к календарю необходимо получить разрешение от пользователя, используя ключи конфиденциальности в настройках проекта:
🖥 Для запроса доступа к событиям и напоминаниям используются методы
⚠️ Текущий статус авторизации можно проверить с помощью метода
➡️ Рекомендуется создать отдельный класс, например
EventKitt
, который предоставляет все необходимые инструменты для создания и получения событий.Privacy - Calendars Full Access Usage Description
и Privacy - Reminders Full Access Usage Description
.requestFullAccessToEvents
и requestFullAccessToReminders
, а также requestWriteOnlyAccessToEvents
для приложений, которые не требуют чтения календаря.authorizationStatus(for:)
, который возвращает значения EKAuthorizationStatus
, такие как fullAccess
, writeOnly
, denied
, notDetermined
и restricted
.CalendarPermissionsViewModel
, для управления статусом доступа к календарю и напоминаниям, а также для обработки запросов на доступ.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Inspect & optimize Image Decoding timing in iOS
⌛ Декодирование изображений в iOS происходит в основном потоке во время фазы коммита
⚙️ Используйте методы UIKit, такие как
➡️ Старайтесь использовать
⚠️ Использование API
Core Animation
, что может вызывать зависания приложения при работе с большими изображениями.prepareForDisplay
и prepareThumbnail
, для предварительной обработки изображений в фоновом режиме, чтобы избежать задержек в основном потоке.ImageIO
для создания уменьшенных изображений перед дальнейшей обработкой и избегайте копирования изображений между основной и графической памятью для повышения производительности.UIImageReader
в iOS 17 может привести к утечкам памяти, которые были исправлены в iOS 18.Getting HDR UIImage in iOS 17 and display it in a UIImageView will result in major memory leak internally. Apple have fixed this issue on iOS 18
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
High Level Anatomy of a Camera Capturing Session
❓ Камера или микрофон служат источником для захвата видео, фото или аудио, включая заднюю и фронтальную камеры.
ℹ️ Выход может быть в виде фото или видео, которые сохраняются на диске или обрабатываются для распознавания лиц и применения фильтров.
➡️
❓ Метод
➡️
AVCaptureSession
является центральным контроллером, который управляет входами, выходами и предварительными слоями для захвата медиа.capturePhoto
асинхронный, что означает, что захват фото занимает время из-за фокусировки и экспозиции.AVCapturePhoto
- это необработанный вывод, PHAsset
- ссылка на изображение в библиотеке, CGImage
- это битовая карта, а Image
в SwiftUI
- визуальное представление.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Certificate Pinning on iOS in Practice
Статья про то, что такое
⚠️ Основная цель реализации
🖥 Certificate pining включает в себя проверку цепочки сертификатов, состоящей из корневого, промежуточного и конечного сертификатов, с акцентом на конечный сертификат для обеспечения безопасности соединения.
ℹ️ Можно пиннить как весь сертификат, так и его отпечаток или открытый ключ, что дает гибкость в управлении сертификатами, особенно при их обновлении.
❗️ Обновление сертификатов может быть неудобным, так как требует обновления приложения. Рекомендуется использовать пиннинг открытого ключа или удаленные обновления сертификатов через такие решения, как
⚙️ Для реализации
Статья про то, что такое
certificate pining
и как его настроить.certificate pining
— защита от атак типа человек посередине
, которые могут позволить злоумышленникам перехватывать данные пользователей и тестировать уязвимости API.CloudKit
.certificate pining
в iOS необходимо использовать URLSessionDelegate
для обработки аутентификационных вызовов и проверки доверенных сертификатов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Swift Computed Property: Code Examples
Вдруг вы не знаете, что такое вычисляемое свойство - эта статья для вас🙂
ℹ️ Вычисляемое свойство в Swift предоставляет геттер и необязательный сеттер для косвенного доступа к другим свойствам и значениям, позволяя создавать новые значения на основе существующих.
❓
⚠️ Вычисляемые свойства выполняют свои операции каждый раз при доступе, что может привести к снижению производительности при тяжелых вычислениях. Рекомендуется использовать сохраненные значения, если вычисления статичны.
➡️
Такие свойства не принимают аргументы, поэтому для логики, требующей динамических входных параметров или тяжелых вычислений, лучше использовать методы для повышения читаемости и управления производительностью.
❓ Вычисляемые свойства могут иметь асинхронные геттеры, позволяя использовать
Вдруг вы не знаете, что такое вычисляемое свойство - эта статья для вас
Computed properties
могут использоваться для создания значений, таких как имя файла, основанное на других свойствах, или для управления доступом к внутренним объектам через публичные интерфейсы.Такие свойства не принимают аргументы, поэтому для логики, требующей динамических входных параметров или тяжелых вычислений, лучше использовать методы для повышения читаемости и управления производительностью.
await
для выполнения операций, таких как валидация данных перед возвратом значения.struct Content {
enum ContentError: Error {
case emptyFileExtension
}
let name: String
let fileExtension: String
/// A computed property to generate a filename.
/// Throws an error when the file extension is empty.
var filename: String {
get throws(ContentError) {
guard !fileExtension.isEmpty else {
throw .emptyFileExtension
}
return name + "." + fileExtension
}
}
}
/// We now need to use the `try` keyword when accessing:
print(try content.filename) // Prints: "swiftlee-banner.png"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Overview on Accessibility Nutrition Labels for iOS development
ℹ️ На WWDC25 Apple представила метки доступности, которые отображаются в App Store и информируют пользователей о поддерживаемых функциях доступности приложений.
🖥 Разработчики могут заявить о поддержке таких функций, как
🔈
🔍 Поддержка
➡️ Поддержка достаточной контрастности помогает пользователям с низким зрением; разработчики могут использовать инструмент
➡️ Субтитры обеспечивают текстовую альтернативу для пользователей с нарушениями слуха, а аудиодескрипции предоставляют устное описание визуального контента для пользователей с нарушениями зрения.
VoiceOver, Voice Control, Dynamic Type, Dark Mode
, и других, чтобы улучшить доступность своих приложений.VoiceOver
- это экранный диктор, который помогает пользователям навигировать по приложению без визуального контакта, требуя от разработчиков ручной настройки для улучшения опыта.Dynamic Type
позволяет пользователям увеличивать размер текста на устройствах iOS, что делает текст более читаемым и удобным.Color Contrast Calculator в Xcode
для проверки соответствия.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Inside Code Signing: Provisioning Profiles
Если вдруг вы не читали тех ноуты от🧠
В этом, например, рассказывают, что такое Provisioning Profiles и что за ними скрывается.
🔍 Профили Provisioning связывают пять критериев: кто может подписывать код, какие приложения могут быть подписаны, где и когда они могут работать, и как они могут быть уполномочены.
ℹ️ Профили создаются на сайте
🖥 Профиль представляет собой список свойств, включая сертификаты разработчиков, идентификатор приложения, список устройств и дату истечения срока действия.
⚙️ Современные системы используют бинарную форму профиля, хранящуюся в свойстве
Если вдруг вы не читали тех ноуты от
apple
, то очень зря. Там все супер подробно описано и разложено по полочкам. В этом, например, рассказывают, что такое Provisioning Profiles и что за ними скрывается.
Apple Developer
и могут быть подписаны криптографически. Для проверки профиля используется инструмент codesign
.DER-Encoded-Profile
, что является новым источником правды для профилей.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Что придумал Тим Кук кроме нового айфона? Узнаем в компании VK и Coffee&Code.
9 сентября встречаемся в Москве в офисе VK в Авроре. Будем смотреть и обсуждать презентацию, играть в бинго, общаться и чилить с попкорном и чипсиками.
Регистрация — тут. Ждём вас!
9 сентября встречаемся в Москве в офисе VK в Авроре. Будем смотреть и обсуждать презентацию, играть в бинго, общаться и чилить с попкорном и чипсиками.
Регистрация — тут. Ждём вас!
❤4🔥3❤🔥1👎1🥰1
Secret Management on iOS
🙅♂️ Если по какой-то причине вы храните токены или ключи в исходном коде - у меня для вас плохие новости: так не стоит делать
⚠️ Секреты не следует хранить в исходном коде или в файлах конфигурации Xcode, так как они могут быть доступны в скомпилированном приложении. Вместо этого рекомендуется использовать серверное хранение.
⚠️ Обфускация секретов с помощью генерации кода и шифрования может затруднить их извлечение, но не гарантирует полной безопасности.
❓ Лучший способ защитить секреты — это не хранить их на клиенте. Если это невозможно, следует рассмотреть возможность использования серверного хранения и обфускации для снижения рисков.
ℹ️ Исследования показывают, что тысячи секретов, таких как API-ключи, ежедневно утечка на платформах, таких как GitHub, что подчеркивает важность безопасного управления секретами.
Пусть статья и не новая, но актуальная.
Пусть статья и не новая, но актуальная.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Взлом через картинку в Apple: уроки громкой уязвимости для разработчиков
🚨 Уязвимость
‼️ Атака может происходить без взаимодействия пользователя (
🔼 Пользователям рекомендуется обновлять свои устройства до последних версий
❓ Для предотвращения подобных уязвимостей необходимо внедрять процессы безопасной разработки, включая фаззинг и статический анализ кода, а также использовать методы защиты от реверс-инжиниринга.
PT-2025-34177 (CVE-2025-43300)
в системном фреймворке ImageIO
позволяет злоумышленникам выполнять произвольный код через вредоносные изображения, что ставит под угрозу миллионы устройств Apple.zero-click
), что делает её особенно опасной, так как уязвимость использовалась в реальных атаках на конкретных людей.iOS/Android
для уменьшения риска быть атакованным и избегать открытия подозрительных файлов, особенно если они приходят как документы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Debugging Swift Concurrency: “Am I on the Main Actor?”
В
⚠️ Используйте
❓ Можно создавать собственные актеры с помощью
➡️ Используйте информацию о очереди в
В
Swift 6
важно думать не о потоках, а о акторах, чтобы избежать ошибок с доступом к пользовательскому интерфейсу и тяжелым вычислениям. MainActor.assertIsolated()
для проверки, что код выполняется на главном актере, что помогает выявить ошибки во время разработки. @globalActor,
что позволяет использовать аналогичные методы проверки изоляции.Xcode
для понимания контекста выполнения актеров и отладки проблем с многопоточностью.Please open Telegram to view this post
VIEW IN TELEGRAM
⚡6
Жизненный цикл UIViewController в 2025 году: что изменилось и что устарело
🔍 Методы
⌛ Классический жизненный цикл
🔗 Для корректного управления дочерними контроллерами необходимо использовать методы
➡️ Рекомендуется использовать методы
➡️ Методы для восстановления состояния, такие как
viewDidUnload
и didReceiveMemoryWarning
устарели, в то время как новые хуки, такие как viewIsAppearing
и viewSafeAreaInsetsDidChange
, стали стандартом для работы с UIViewController
.UIViewController
включает методы инициализации, загрузки представления, а также методы для управления отображением и изменениями окружения.addChild
и removeFromParent
, чтобы обеспечить правильное получение событий жизненного цикла.updateViewConstraints
и traitCollectionDidChange
для адаптации интерфейса к изменениям окружения, таким как смена темы или ориентации устройства.encodeRestorableState
и decodeRestorableState
, остаются актуальными, однако большинство разработчиков предпочитают использовать UserDefaults
или CoreData
для сохранения данных.Please open Telegram to view this post
VIEW IN TELEGRAM
1👍6
Debug crashes in iOS using MetricKit
⚠️
❓ Для начала работы с
ℹ️ Отчеты о сбоях обрабатываются с помощью метода
🔍 Для тестирования реализации
MetricKit
— это система для сбора и анализа отчетов о сбоях на уровне системы, которая была введена в iOS 13, позволяя выявлять сбои, которые традиционные инструменты не могут зафиксировать.MetricKit
необходимо импортировать его в AppDelegate
и подписаться на протокол MXMetricManagerSubscriber
, чтобы получать отчеты о сбоях.handleCrashDiagnostics
, который позволяет логировать краткие сводки, анализировать стек вызовов и архивировать информацию о сбоях.MetricKit
можно симулировать сбои, такие как выход за пределы массива или принудительное развертывание nil
, и проверить, как система реагирует на эти сбои.class AppDelegate: UIResponder, UIApplicationDelegate, MXMetricManagerSubscriber {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Register as a subscriber to receive metrics and diagnostics
MXMetricManager.shared.add(self)
return true
}
// Implement the required delegate method for diagnostics
func didReceive(_ payloads: [MXDiagnosticPayload]) {
// Process crash reports
for payload in payloads {
if let crashDiagnostics = payload.crashDiagnostics {
handleCrashDiagnostics(crashDiagnostics)
}
}
}
func applicationWillTerminate(_ application: UIApplication) {
// Unsubscribe when the app terminates
MXMetricManager.shared.remove(self)
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡2👍1
ARC в Swift
🎉 Всех с прошедшим Днем программиста! И чтобы не забывать основы - принес статью про механизм подсчета ссылок.
❓
⚠️ Циклы сильных ссылок (
🔗
⚙️ ARC работает на уровне
✔️ Автоматический подсчет ссылок упрощает управление памятью, избавляя разработчиков от необходимости вручную управлять ссылками, что делает код более лаконичным и понятным.
ARC (Automatic Reference Counting)
- это метод управления памятью в Swift
, который автоматически отслеживает количество сильных ссылок на объекты и освобождает их, когда счётчик достигает нуля.retain cycles
) могут возникать, когда два объекта ссылаются друг на друга, что мешает ARC освободить память. Это может привести к утечкам памяти.Weak
ссылки не учитываются ARC при подсчёте ссылок, что помогает избежать retain cycles
, в то время как unowned
ссылки никогда не становятся nil
, но могут крашнуть приложение при обращении к уничтоженному объекту.SIL (Swift Intermediate Language)
, где компилятор автоматически добавляет инструкции подсчёта ссылок, что делает код более чистым и безопасным.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤2👍2
Swift 6.2 Released
⚡️ Swift 6.2 выпущена 15 сентября. Кратко, что нового.
❓ Упрощенное написание безопасного параллельного кода с помощью новых атрибутов, таких как
🔒 В новой версии добавлены типы
🔥 Расширение Swift для VS Code теперь официально подтверждено и включает функции, такие как фоновая индексация и встроенная отладка с LLDB.
❓ Swift 6.2 теперь поддерживает WebAssembly, позволяя создавать приложения для браузеров и других сред выполнения.
⚙️ Библиотеки Swift 6.2 включают новый пакет
@concurrent,
и делает код однопоточным по умолчанию. InlineArray и Span,
которые обеспечивают безопасный доступ к памяти и высокую производительность без дополнительных затрат. Subprocess
для управления внешними процессами и улучшенный API для NotificationCenter.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡6❤2👍2🔥1
Не могу не поделиться важной и крутой инфой: мой друг выпустил 10 часовой бесплатный курс!!! про iOS разработку для начинающих 🔥
Если вы начали изучать Swift – обязательно к просмотру. И не забывайте делиться с теми, кто тож хочет начать этот увлекательный путь.
https://www.youtube.com/watch?v=SUKocLwjA5k
Если вы начали изучать Swift – обязательно к просмотру. И не забывайте делиться с теми, кто тож хочет начать этот увлекательный путь.
https://www.youtube.com/watch?v=SUKocLwjA5k
YouTube
Swift - полный курс для начинающих iOS разработчиков. Это БАЗА – Теория, практика, домашки
Swift - полный курс для начинающих. База для iOS разработчиков, которые хотят построить успешную карьеру
Помощь с домашками, обучением и трудоустройством по iOS разработке https://t.iss.one/ios_learning_bot
Таймкоды будут дополняться
00:00 Что будет в курсе…
Помощь с домашками, обучением и трудоустройством по iOS разработке https://t.iss.one/ios_learning_bot
Таймкоды будут дополняться
00:00 Что будет в курсе…
🔥8👍5❤2
Как Swift Runtime влияет на производительность iOS-приложений
⚡️ Тут наши ребята рассказывают про производительность - супер объемный и полезный обзор. Вот лишь несколько моментов.
⚙️
‼️ Метод
⚠️ Рекомендуется избегать использования
🤫 Использование
соответствия для каждого протокола.
💯 Рекомендую к прочтению.
Swift Runtime
играет ключевую роль в производительности iOS-приложений, особенно в управлении памятью и проверке соответствия типов, что может значительно замедлить работу приложения.swift_conformsToProtocolMaybeInstantiateSuperclasses
является узким местом производительности, так как он может занимать от 1 до 3 мс на каждом вызове, особенно при использовании операторов as?
и as!
или методов String(describing:)
и String(reflecting:)
.String(describing:)
и операторов as?
и as!
, а также минимизировать использование type-generic-constraint
-ов для повышения производительности приложения.type-generic-constraint
-ов может значительно замедлить приложение, так как каждый вызов метода swift_conformsToProtocolMaybeInstantiateSuperclasses
требует проверки соответствия для каждого протокола.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
Swift Default Value in String Interpolations
🔥 Swift 6.2 улучшает интерполяцию строк с опциональными значениями, позволяя использовать параметр значения по умолчанию.
❓ При интерполяции строк с опционалами компилятор выдает предупреждение, если не указано значение по умолчанию.
🤫 Теперь можно использовать новый параметр по умолчанию в строке, чтобы она не зависела от типа опционального значения. Однако, он не будет работать с локализацией:
LocalizedStringKey
не поддерживает такой формат.
// The count is not set
Text("The count is \(count, default: "not set")")
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🪄 Вжух и iOS-митап от Сбера
1 октября встречаемся на митап для iOS-разработчиков в офисе Сбера, чтобы обсудить самые актуальные задачи: как сделать iOS-приложения быстрее, стабильнее и удобнее для пользователей.
В программе:
🟢 спикеры из Сбера, Авито и SberDevices
🟢 подходы к оптимизации процессов и производительности
🟢 решения, которые можно внедрить в своей команде и даже в жизни
🟢 идеи, которые помогают экономить время и ресурсы
Формат: онлайн и офлайн
Программа и регистрация по ссылке
1 октября встречаемся на митап для iOS-разработчиков в офисе Сбера, чтобы обсудить самые актуальные задачи: как сделать iOS-приложения быстрее, стабильнее и удобнее для пользователей.
В программе:
🟢 спикеры из Сбера, Авито и SberDevices
🟢 подходы к оптимизации процессов и производительности
🟢 решения, которые можно внедрить в своей команде и даже в жизни
🟢 идеи, которые помогают экономить время и ресурсы
Формат: онлайн и офлайн
Программа и регистрация по ссылке
❤1