iOS Conf SG 2025: подборка докладов
В январе прошла одна из крупнейших конференций по iOS и новый набор лучших презентаций уже доступен.
Рекомендую обратить внимание на эти доклады:
📺 Isolation, actors, sendable… Глубокое погружение в параллелизм
Donny Wals рассказывает об изоляции (кстати, напомню про этот пост), акторах и многом другом, чтобы наконец разобраться, что на самом деле пытается сказать нам компилятор, когда выдает загадочную ошибку.
📺 Заблуждения про тестирование и как использовать тесты для более быстрой разработки
В этом выступлении Krzysztof Zablocki делится лучшими подходами к тестированию при работе над Sourcery, New York Times и Arc Browser.
📺 Создание приложений, которые выделяются
Klemens Strasser, который получил 2 номинации Apple Design Award и даже победу, делится своим опытом.
📺 10 лет Swift: что произошло за это время
Swift, который мы пишем сегодня, почти не похож на Swift, который мы писали, когда он появился 10 лет назад. Чему мы научились за это время и какие изменения еще предстоят? В этом докладе на эти вопросы пробует ответить Пол Хадсон.
📺 За пределами программирования: необходимые софт-скиллы для успешной карьеры в iOS
Спикер делится советами, как строить более прочные отношения, преодолевать трудности на рабочем месте и как софт скиллы способствуют профессиональному росту
🔗 Эти и другие доклады доступны здесь.
😃 iOS Dev
В январе прошла одна из крупнейших конференций по iOS и новый набор лучших презентаций уже доступен.
Рекомендую обратить внимание на эти доклады:
📺 Isolation, actors, sendable… Глубокое погружение в параллелизм
Donny Wals рассказывает об изоляции (кстати, напомню про этот пост), акторах и многом другом, чтобы наконец разобраться, что на самом деле пытается сказать нам компилятор, когда выдает загадочную ошибку.
📺 Заблуждения про тестирование и как использовать тесты для более быстрой разработки
В этом выступлении Krzysztof Zablocki делится лучшими подходами к тестированию при работе над Sourcery, New York Times и Arc Browser.
📺 Создание приложений, которые выделяются
Klemens Strasser, который получил 2 номинации Apple Design Award и даже победу, делится своим опытом.
📺 10 лет Swift: что произошло за это время
Swift, который мы пишем сегодня, почти не похож на Swift, который мы писали, когда он появился 10 лет назад. Чему мы научились за это время и какие изменения еще предстоят? В этом докладе на эти вопросы пробует ответить Пол Хадсон.
📺 За пределами программирования: необходимые софт-скиллы для успешной карьеры в iOS
Спикер делится советами, как строить более прочные отношения, преодолевать трудности на рабочем месте и как софт скиллы способствуют профессиональному росту
🔗 Эти и другие доклады доступны здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Структурная идентичность в SwiftUI
В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо.
Однако перерисовывать все подряд — неэффективно.
И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность.
📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках.
😃 iOS Dev
В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо.
Однако перерисовывать все подряд — неэффективно.
И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность.
📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках.
Please open Telegram to view this post
VIEW IN TELEGRAM
Обнаружение и устранение зависаний в приложениях для iOS
📖 В этой статье рассмотрена одна из самых частых причин снижения производительности в iOS-приложениях.
Спойлер: причина в сложных вычислениях в главном потоке.
Рассказано, как обнаружить зависание используя App Hangs Detection и Instruments, смоделирован сценарий зависания интерфейса в проекте SwiftUI и продемонстрированы шаги для устранения этой проблемы.
✅ Большой разбор возможных кейсов проблем с производительностью, причин зависаний и способов предотвращения такого поведения есть 💰 тут и ⭐️ прямо здесь.
😃 iOS Dev
📖 В этой статье рассмотрена одна из самых частых причин снижения производительности в iOS-приложениях.
Спойлер: причина в сложных вычислениях в главном потоке.
Рассказано, как обнаружить зависание используя App Hangs Detection и Instruments, смоделирован сценарий зависания интерфейса в проекте SwiftUI и продемонстрированы шаги для устранения этой проблемы.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Динамическая адаптация к доступному пространству с помощью ViewThatFits
Вкратце принцип работы следующий: ViewThatFits выбирает первое child view, чей идеальный размер по заданным осям впишется в предложенный размер.
Обычно это происходит в порядке от наибольшего к наименьшему, но, так как наше вью иногда может поместиться только вдоль одной оси, порядок может быть нарушен.
По умолчанию ViewThatFits ограничивается по горизонтальной и вертикальной осям.
📖 Неплохой пример использования ViewThatFits есть тут и в официальной документации.
😃 iOS Dev
ViewThatFits
- это компонент SwiftUI, доступный с iOS 16.Вкратце принцип работы следующий: ViewThatFits выбирает первое child view, чей идеальный размер по заданным осям впишется в предложенный размер.
Обычно это происходит в порядке от наибольшего к наименьшему, но, так как наше вью иногда может поместиться только вдоль одной оси, порядок может быть нарушен.
По умолчанию ViewThatFits ограничивается по горизонтальной и вертикальной осям.
📖 Неплохой пример использования ViewThatFits есть тут и в официальной документации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Стратегии, позволяющие избежать мерж-конфликтов в проектах Xcode
Каждый, кто работал в более-менее большой команде разработчиков (что уж там, даже двоих человек иногда достаточно), наверняка сталкивался с конфликтами при слиянии изменений.
📖 Tuist выпустили неплохой материал с разбором, почему такие проблемы вообще возникают, и как с этим может быть связан файл project.pbxproj в Xcode.
А ещё они описали несколько вариантов решения: от использования workspace и SwiftPM до buildable folders в Xcode 16.
🔗 Кстати, вот тут можно познакомиться и с другими возможными причинами мерж-конфликтов.
😃 iOS Dev
Каждый, кто работал в более-менее большой команде разработчиков (что уж там, даже двоих человек иногда достаточно), наверняка сталкивался с конфликтами при слиянии изменений.
📖 Tuist выпустили неплохой материал с разбором, почему такие проблемы вообще возникают, и как с этим может быть связан файл project.pbxproj в Xcode.
А ещё они описали несколько вариантов решения: от использования workspace и SwiftPM до buildable folders в Xcode 16.
🔗 Кстати, вот тут можно познакомиться и с другими возможными причинами мерж-конфликтов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как улучшить архитектуру кода с помощью принципов SOLID (с примерами на Swift)
Эти принципы помогают сократить количество хаоса на проекте с течением времени. Да и следование SOLID облегчает в целом сопровождение кода, тестирование и потенциальное масштабирование.
Наш читатель Максим Егоров (уже знакомый вам по примеру работы с Network-фреймворком) в этот раз решил затронуть базу и показал на несложных примерах потенциальные ошибки, которые могут нарушать принципы, сформулированные Робертом Мартином, а ещё привёл варианты их исправления.
📖 Прочитать статью целиком можно здесь.
🧠 Напомню, что в приложении вы можете проверить себя не только в знании этих принципов, но и в других важных темах.
😃 iOS Dev
Эти принципы помогают сократить количество хаоса на проекте с течением времени. Да и следование SOLID облегчает в целом сопровождение кода, тестирование и потенциальное масштабирование.
Наш читатель Максим Егоров (уже знакомый вам по примеру работы с Network-фреймворком) в этот раз решил затронуть базу и показал на несложных примерах потенциальные ошибки, которые могут нарушать принципы, сформулированные Робертом Мартином, а ещё привёл варианты их исправления.
📖 Прочитать статью целиком можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Spectrum ring — реализация на Metal в iOS
В рамках экспериментов по изучению возможностей шейдеров попробовал разложить несколько цветов в непрерывный ряд (и дополнил парой красивых эффектов).
Варианты использования спектра вообще довольно значительны (от стандартного colorPicker в iOS до реализации самых разных волн и анимаций в музыкальных плеерах).
✅ Реализация, референсы и код на SwiftUI+Metal уже доступен 💰 тут и ⭐️ в телеграм.
🎆 В канале доступны и другие красивые эффекты.
😃 iOS Dev
В рамках экспериментов по изучению возможностей шейдеров попробовал разложить несколько цветов в непрерывный ряд (и дополнил парой красивых эффектов).
Варианты использования спектра вообще довольно значительны (от стандартного colorPicker в iOS до реализации самых разных волн и анимаций в музыкальных плеерах).
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift init() - особенности, примеры использования и подводные камни
📖 Статья, на первый взгляд полезная новичкам, на самом деле описывает несколько проблем, с которыми могут столкнуться разработчики.
Кирилл, который уже делился своим разбором Grand Central Dispatch, акцентирует внимание на нескольких важных аспектах.
Например, почему
Статья разбита на следующие логические блоки:
Работа со структурами:
- Memberwise initializer.
- Optionals, var vs let.
- Retaining a memberwise initializer.
Работа с классами:
- Designated initializer.
- Convenience initializer.
- Уменьшаем количество override.
- Помощь компилятора.
- required initializer: дженерики, протоколы, Self(), final.
- UIView() и что скрывает документация.
😃 iOS Dev
📖 Статья, на первый взгляд полезная новичкам, на самом деле описывает несколько проблем, с которыми могут столкнуться разработчики.
Кирилл, который уже делился своим разбором Grand Central Dispatch, акцентирует внимание на нескольких важных аспектах.
Например, почему
UIView.init()
всегда вызывается без параметров, а init(frame:)
и init(coder:)
переопределяются. Или, например, когда именно нужен required
-инициализатор. Статья разбита на следующие логические блоки:
Работа со структурами:
- Memberwise initializer.
- Optionals, var vs let.
- Retaining a memberwise initializer.
Работа с классами:
- Designated initializer.
- Convenience initializer.
- Уменьшаем количество override.
- Помощь компилятора.
- required initializer: дженерики, протоколы, Self(), final.
- UIView() и что скрывает документация.
Please open Telegram to view this post
VIEW IN TELEGRAM
Разделение или работа в команде
Удивительно, как в нескольких компаниях сразу идеи о том, как важно отделять рабочее от всего остального, вышли буквально на мировой уровень.
📺 Несколько лет назад появился сериал Разделение, о котором я даже написал пару строк (и по случайному совпадению он завершал один из небольших квестов в нашем канале).
К слову, линия мистера Милчека с его перфоманс-ревью и последующей рефлексией возможно найдет ответ и у некоторых разработчиков.
🎮 А ведь кроме этого вышла сначала it takes two, а в этом году не менее чудесная Split Fiction, в которой, к слову, секретное послание оставил и геймдизайнер.
Пожалуй, крайне важная часть — умение работать в команде, ведь далеко не всегда всё зависит от мобильного клиента, или конкретно от разработчика.
Тесное взаимодействие команд дизайна, тестирования, реализации на сервере и формирование продуктовых задач, которые попадают в спринт достигается за счёт синергии всех участников процесса.
Кроме этого, одна из основных составляющих нашей работы состоит как раз в сложности разделения.
Тяжело перестать думать о баге или какой-нибудь важной фиче, которую вот-вот и вы выкатите на прод, особенно перед релизом.
И это может влиять и на менталку, и на какие-то дела вне работы. Поэтому довольно важно научиться разделять рабочие моменты и все, что находится за пределами, какой бы сложной и важной та или иная не казалась на первый взгляд.
🔄 Главное помнить, что умение переключать контекст - важнейший скилл. Не только в работе, но и в жизни.
И это далеко не самый простой навык.
😃 iOS Dev
Удивительно, как в нескольких компаниях сразу идеи о том, как важно отделять рабочее от всего остального, вышли буквально на мировой уровень.
📺 Несколько лет назад появился сериал Разделение, о котором я даже написал пару строк (и по случайному совпадению он завершал один из небольших квестов в нашем канале).
К слову, линия мистера Милчека с его перфоманс-ревью и последующей рефлексией возможно найдет ответ и у некоторых разработчиков.
🎮 А ведь кроме этого вышла сначала it takes two, а в этом году не менее чудесная Split Fiction, в которой, к слову, секретное послание оставил и геймдизайнер.
Пожалуй, крайне важная часть — умение работать в команде, ведь далеко не всегда всё зависит от мобильного клиента, или конкретно от разработчика.
Тесное взаимодействие команд дизайна, тестирования, реализации на сервере и формирование продуктовых задач, которые попадают в спринт достигается за счёт синергии всех участников процесса.
Кроме этого, одна из основных составляющих нашей работы состоит как раз в сложности разделения.
Тяжело перестать думать о баге или какой-нибудь важной фиче, которую вот-вот и вы выкатите на прод, особенно перед релизом.
И это может влиять и на менталку, и на какие-то дела вне работы. Поэтому довольно важно научиться разделять рабочие моменты и все, что находится за пределами, какой бы сложной и важной та или иная не казалась на первый взгляд.
И это далеко не самый простой навык.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотя актуальный релиз Swift по дефолту включен в Xcode, иногда может понадобиться другая версия для создания сервисов или, например, каких-либо инструментов командной строки.
Установка надежной версии Swift (с нужными зависимостями) требовала действий вручную, которые, очевидно, могли приводить к ошибкам.
🛠 В этом релизе swiftly стал частью Swift toolchain.
Кроме этого, добавлена и поддержка macOS для того, чтобы сделать возможной установку Swift отдельно от Xcode.
Среди базовых фич:
📖 Официальная новость на сайте Swift.
Please open Telegram to view this post
VIEW IN TELEGRAM
Архитектура SwiftData: паттерны и практики
SwiftData ознаменовала важный шаг вперёд в области хранения данных. Она была призвана заменить Core Data чем-то более интуитивным: тем, что будет проще интегрировать в SwiftUI.
Однако осталось несколько важных вопросов.
Как именно мы должны проектировать приложение на её основе?
Должны ли мы целиком полагаться на
📖 В этой масштабной статье можно узнать ответы на эти и другие вопросы:
🔘 Как структурировать модели данных
🔘 Где разместить бизнес-логику
🔘 Как писать модульные тесты
🔘 Как настроить работу Preview в Xcode
🔘 Как интегрировать CloudKit
🔘 Как работать с изменениями в слоях в будущем.
😃 iOS Dev
SwiftData ознаменовала важный шаг вперёд в области хранения данных. Она была призвана заменить Core Data чем-то более интуитивным: тем, что будет проще интегрировать в SwiftUI.
Однако осталось несколько важных вопросов.
Как именно мы должны проектировать приложение на её основе?
Должны ли мы целиком полагаться на
@Model
и @Query
, или можно абстрагировать их за протоколами для обеспечения гибкости? Как быть с бизнес-логикой? Да и как в целом нужно структурировать код для обеспечения надёжности и тестируемости в будущем.📖 В этой масштабной статье можно узнать ответы на эти и другие вопросы:
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел Xcode 16.3 с нативной интеграцией вайб-кодинга!
Ночью вышел Xcode 16.3 и Swift 6.1, а вместе с ним и новый режим программирования.
На этой неделе в Европе официально разрешили Apple Intelligence и Тим Кук просто шокировал общественность, написав в X:
«Нам пришлось принять сложное решение. Всё больше разработчиков стало доверять ИИ, всё больше процессов интегрируется и вместе с тем мы вынуждены сохранять гонку не только с Google и OpenAI, но и с самим временем. Поэтому мы решили выпустить из беты режим вайб-кодинга в Xcode. Никакого Leetcode, никаких мыслей, теперь только х-к, х-к и в продакшн (какие-то буквы, к сожалению, пропущены).»
Буквально месяц назад Сергей Брин призвал ходить коллег в офис и работать 60 часов в неделю, но Apple сыграли на опережение как всегда. Разработчики в Купертино сидели по 120 часов с понедельника по субботу, приходя в 4 утра.
Новая инновация уже вызвала целую волну сокращений в Кремниевой долине и даже затронула бигтехи в РФ.
Сообщества с десятками тысяч читателей уже запустили курсы по подписке, как обойти новые процессы собеседований.
Теперь они предлагают работать и скручивать опыт, ведь как известно, для работы с новым ИИ теперь необходимо как можно меньше навыков. Чистое, незамутнённое алгоритмами сознание теперь имеет преимущество перед разработчиками с 10+ опыта.
Тим Кук добавил, что новый режим стал частью долгосрочного плана и подчеркнул, что канал iOSDev всё знал ещё два года назад.
😃 iOS Dev
Ночью вышел Xcode 16.3 и Swift 6.1, а вместе с ним и новый режим программирования.
На этой неделе в Европе официально разрешили Apple Intelligence и Тим Кук просто шокировал общественность, написав в X:
«Нам пришлось принять сложное решение. Всё больше разработчиков стало доверять ИИ, всё больше процессов интегрируется и вместе с тем мы вынуждены сохранять гонку не только с Google и OpenAI, но и с самим временем. Поэтому мы решили выпустить из беты режим вайб-кодинга в Xcode. Никакого Leetcode, никаких мыслей, теперь только х-к, х-к и в продакшн (какие-то буквы, к сожалению, пропущены).»
Буквально месяц назад Сергей Брин призвал ходить коллег в офис и работать 60 часов в неделю, но Apple сыграли на опережение как всегда. Разработчики в Купертино сидели по 120 часов с понедельника по субботу, приходя в 4 утра.
Новая инновация уже вызвала целую волну сокращений в Кремниевой долине и даже затронула бигтехи в РФ.
Сообщества с десятками тысяч читателей уже запустили курсы по подписке, как обойти новые процессы собеседований.
Теперь они предлагают работать и скручивать опыт, ведь как известно, для работы с новым ИИ теперь необходимо как можно меньше навыков. Чистое, незамутнённое алгоритмами сознание теперь имеет преимущество перед разработчиками с 10+ опыта.
Тим Кук добавил, что новый режим стал частью долгосрочного плана и подчеркнул, что канал iOSDev всё знал ещё два года назад.
Please open Telegram to view this post
VIEW IN TELEGRAM
Современные практики для работы с URL в Swift
Использование современных API в Foundation для построения (и дальнейшей работы) с URL не только упрощает наш код, но и снижает риск возникновения ошибок и возможных крашей.
📖 В своей статье Джон Санделл разбирает импакт от StaticString, макросов, как прийти к виду
✅ Кстати, про особенности и свойства URLSession можно узнать из этого поста.
😃 iOS Dev
Использование современных API в Foundation для построения (и дальнейшей работы) с URL не только упрощает наш код, но и снижает риск возникновения ошибок и возможных крашей.
📖 В своей статье Джон Санделл разбирает импакт от StaticString, макросов, как прийти к виду
let url = #staticURL("https://t.iss.one/iosdev")
, например, а также опции построения сложных запросов с помощью фич из iOS 16.Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект свечения текста в комбинации с numericText
Показал пример несложной анимации, при этом довольно приятной по ощущениям (нужен массив с несколькими цветами, несколько теней и contentTransition с
✅ Код этого и других примеров (в том числе с Metal доступен 💰 тут и ⭐️ в телеграм).
😃 iOS Dev
Показал пример несложной анимации, при этом довольно приятной по ощущениям (нужен массив с несколькими цветами, несколько теней и contentTransition с
numericText
).Please open Telegram to view this post
VIEW IN TELEGRAM
WWDC25
К сожалению, в этом году лотерея была не на моей стороне. С другой стороны - будет больше времени на то, чтобы детальнее рассмотреть все фичи.
🐱 Кстати, если кто планирует ехать, в эти дни в Сан-Франциско будет как минимум CommunityKit-конфа и OneMoreThing (если её решатся провести снова).
А мне пока остаётся смотреть на старые фотки из Apple Visitor Center.
Если кому-то выпало нормально очков удачи и вы выиграли билет на ивент, поделитесь радостью в комментариях)
😃 iOS Dev
К сожалению, в этом году лотерея была не на моей стороне. С другой стороны - будет больше времени на то, чтобы детальнее рассмотреть все фичи.
А мне пока остаётся смотреть на старые фотки из Apple Visitor Center.
Если кому-то выпало нормально очков удачи и вы выиграли билет на ивент, поделитесь радостью в комментариях)
Please open Telegram to view this post
VIEW IN TELEGRAM
Как на самом деле работает Swift Concurrency
📖 Виталий Батраков в своём блоге рассказывает о том, что такое асинхронные функции, как создавать и работать с Task и не только.
Например, в статье разбираются Default concurrent/Serial/Main executors и как именно они формируют общую картину.
🔗 Напомню, в канале есть и глоссарий по Swift Concurrency.
Кстати, здесь можно проверить свои силы в вопросах на примерах кода (в приложении часть из них тоже есть).
😃 iOS Dev
📖 Виталий Батраков в своём блоге рассказывает о том, что такое асинхронные функции, как создавать и работать с Task и не только.
Например, в статье разбираются Default concurrent/Serial/Main executors и как именно они формируют общую картину.
Кстати, здесь можно проверить свои силы в вопросах на примерах кода (в приложении часть из них тоже есть).
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Работа с модификатором task в SwiftUI: примеры, особенности, приоритеты
➡️ Модификатор task можно использовать в качестве инструмента для выполнения асинхронного кода.
Как рекомендует автор следующего материала, стоит задуматься о применении этого модификатора в частности для случаев, когда есть комбинация отдельных блоков
📖 В этой статье рассмотрены различные опции использования task в реальном проекте.
🛠 А вот тут можно посмотреть на этот проект.
😃 iOS Dev
Как рекомендует автор следующего материала, стоит задуматься о применении этого модификатора в частности для случаев, когда есть комбинация отдельных блоков
onAppear
и Task
.📖 В этой статье рассмотрены различные опции использования task в реальном проекте.
🛠 А вот тут можно посмотреть на этот проект.
Please open Telegram to view this post
VIEW IN TELEGRAM