Telegram Web Link
Создание UDP-сервера и клиента в Swift на базе фрейморка Network

Сетевая модель OSI описывает, каким образом устройства в локальных (и глобальных сетях) обмениваются данными.

Всего у неё 7 уровней и каждый из них выполняет определённую задачу (скорее всего вы и так это знаете, обычно это проходят на 2-3 курсе универа).

Так вот, на прикладном уровне чаще всего нам достаточно URLSession.

Но вот для сетевых задач более низкого уровня (работа с TCP и UDP), фреймворк Network предоставляет более полный контроль на транспортном уровне. Это обеспечивает большую гибкость и эффективность по сравнению с URLSession.

📖 В этом материале от нашего читателя Максима Егорова вы можете познакомиться с тем, как написать свой UDP-сервер и клиент на несложном, но любопытном примере.

🛠 Полный код проекта доступен здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Кровь, пот и пиксели

Перед обратным перелётом из Манчестера вспомнил про вашу чудесную подборку книг и решил чем-нибудь занять 5 часов. Спасибо, что на пути оказался один из магазинов blackwells с прайсом за книгу в 12 фунтов.

Признаюсь, я ждал историй успешного успеха, и отчасти поэтому занизил изначальные ожидания. Но Джейсон Шрейер не стал описывать сказки, как сделать в гараже собственный GTA VI. Вместо этого он сосредоточился на реальных трудностях не только корпораций-гигантов вроде Blizzard, но и инди-разработчиков, например, целая глава выделена для истории Stardew Valley.

Конечно, я не буду делиться спойлерами, чтобы не уменьшать потенциальный интерес от чтения. Но не могу не вынести пару мыслей касаемо разработки ПО в целом, а не только игр.

Проблемы были и будут всегда, вопрос лишь в том, как именно на это реагировать не только в здесь и сейчас, но и в долгосрочной перспективе. Ведь часто бывает так, что у нас бывает только вектор развития (или как верно заметил Шрейер, работая в огромной корпорации вы как будто находитесь на корабле и плывёте куда-то на запад, но куда именно - неизвестно).

Порой крайне сложно (если вообще реально) добиться, чтобы изначально поставленные годовые планы были достигнуты в нужный срок и со всем объёмом.

И наша задача как разработчиков постараться описать как можно больше корнер-кейсов до начала реализации, чтобы наш корабль не превратился в призрак.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация пошаговой анимации в SwiftUI

На talk.objc.io вышел бесплатный эпизод, посвященный созданию анимации с комбинацией хэдера и нескольких ячеек (которые должны появляться в шахматном порядке и учитывать изменения прозрачности и градиента).

📖 Выпуск с видео и примерами кода доступен здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Примерно раз в год я прошу вас, читатели, помочь улучшить канал: подсветить недостатки, указать, что можно сделать иначе, поделиться идеями и мыслями в целом.

Сейчас как раз пятница, так что если у вас будет пара минут свободного времени, буду рад прочесть любые ваши отзывы.

По традиции, форма анонимная, ни один вопрос не обязательный, но все ответы совершенно точно будут прочитаны и каждое мнение будет иметь значение.

😎 Пройти опрос можно по этой ссылке.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Picker в SwiftUI: примеры кода

Это один из самых часто используемых элементов, который позволяет выбирать пользователям из набора значений. Возможно, наиболее известные стили это сегмент-контрол и меню-пикер.

📖 В этой статье на несложных примерах рассказано, как создать такой пикер и настроить нужное отображение.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Структурная идентичность в SwiftUI

В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо.

Однако перерисовывать все подряд — неэффективно.

И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность.

📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Обнаружение и устранение зависаний в приложениях для iOS

📖 В этой статье рассмотрена одна из самых частых причин снижения производительности в iOS-приложениях.

Спойлер: причина в сложных вычислениях в главном потоке.

Рассказано, как обнаружить зависание используя App Hangs Detection и Instruments, смоделирован сценарий зависания интерфейса в проекте SwiftUI и продемонстрированы шаги для устранения этой проблемы.

Большой разбор возможных кейсов проблем с производительностью, причин зависаний и способов предотвращения такого поведения есть 💰тут и ⭐️ прямо здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Динамическая адаптация к доступному пространству с помощью ViewThatFits

ViewThatFits - это компонент SwiftUI, доступный с iOS 16.

Вкратце принцип работы следующий: ViewThatFits выбирает первое child view, чей идеальный размер по заданным осям впишется в предложенный размер.

Обычно это происходит в порядке от наибольшего к наименьшему, но, так как наше вью иногда может поместиться только вдоль одной оси, порядок может быть нарушен.

По умолчанию ViewThatFits ограничивается по горизонтальной и вертикальной осям.

📖 Неплохой пример использования ViewThatFits есть тут и в официальной документации.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Стратегии, позволяющие избежать мерж-конфликтов в проектах Xcode

Каждый, кто работал в более-менее большой команде разработчиков (что уж там, даже двоих человек иногда достаточно), наверняка сталкивался с конфликтами при слиянии изменений.

📖 Tuist выпустили неплохой материал с разбором, почему такие проблемы вообще возникают, и как с этим может быть связан файл project.pbxproj в Xcode.

А ещё они описали несколько вариантов решения: от использования workspace и SwiftPM до buildable folders в Xcode 16.

🔗 Кстати, вот тут можно познакомиться и с другими возможными причинами мерж-конфликтов.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как улучшить архитектуру кода с помощью принципов SOLID (с примерами на Swift)

Эти принципы помогают сократить количество хаоса на проекте с течением времени. Да и следование SOLID облегчает в целом сопровождение кода, тестирование и потенциальное масштабирование.

Наш читатель Максим Егоров (уже знакомый вам по примеру работы с Network-фреймворком) в этот раз решил затронуть базу и показал на несложных примерах потенциальные ошибки, которые могут нарушать принципы, сформулированные Робертом Мартином, а ещё привёл варианты их исправления.

📖 Прочитать статью целиком можно здесь.

🧠 Напомню, что в приложении вы можете проверить себя не только в знании этих принципов, но и в других важных темах.

😃 iOS Dev
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift init() - особенности, примеры использования и подводные камни

📖 Статья, на первый взгляд полезная новичкам, на самом деле описывает несколько проблем, с которыми могут столкнуться разработчики.

Кирилл, который уже делился своим разбором 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() и что скрывает документация.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
12–13 апреля проводим Weekend Offer Mobile

Устроиться в Яндекс за выходные — реально. Ищем крутых Android- и iOS-разработчиков с опытом работы от 3 лет, готовых работать в офисном или гибридном режиме в России.

Подавайте заявку до 9 апреля — и всего за 2 дня пройдите все технические собеседования. После сможете пообщаться с нанимающими командами и выбрать ту, которая покажется самой интересной. Если всё сложится хорошо, сразу же пришлём вам офер.

Узнать подробности и зарегистрироваться.

Реклама. ООО "Яндекс". ИНН 7736207543
Разделение или работа в команде

Удивительно, как в нескольких компаниях сразу идеи о том, как важно отделять рабочее от всего остального, вышли буквально на мировой уровень.

📺 Несколько лет назад появился сериал Разделение, о котором я даже написал пару строк (и по случайному совпадению он завершал один из небольших квестов в нашем канале).
К слову, линия мистера Милчека с его перфоманс-ревью и последующей рефлексией возможно найдет ответ и у некоторых разработчиков.

🎮 А ведь кроме этого вышла сначала it takes two, а в этом году не менее чудесная Split Fiction, в которой, к слову, секретное послание оставил и геймдизайнер.

Пожалуй, крайне важная часть — умение работать в команде, ведь далеко не всегда всё зависит от мобильного клиента, или конкретно от разработчика.

Тесное взаимодействие команд дизайна, тестирования, реализации на сервере и формирование продуктовых задач, которые попадают в спринт достигается за счёт синергии всех участников процесса.

Кроме этого, одна из основных составляющих нашей работы состоит как раз в сложности разделения.

Тяжело перестать думать о баге или какой-нибудь важной фиче, которую вот-вот и вы выкатите на прод, особенно перед релизом.

И это может влиять и на менталку, и на какие-то дела вне работы. Поэтому довольно важно научиться разделять рабочие моменты и все, что находится за пределами, какой бы сложной и важной та или иная не казалась на первый взгляд.

🔄 Главное помнить, что умение переключать контекст - важнейший скилл. Не только в работе, но и в жизни.

И это далеко не самый простой навык.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
ℹ️ Вышел первый стабильный релиз Swiftly - официального менеджера версий Swift

Хотя актуальный релиз Swift по дефолту включен в Xcode, иногда может понадобиться другая версия для создания сервисов или, например, каких-либо инструментов командной строки.

Установка надежной версии Swift (с нужными зависимостями) требовала действий вручную, которые, очевидно, могли приводить к ошибкам.

🛠 В этом релизе swiftly стал частью Swift toolchain.

Кроме этого, добавлена и поддержка macOS для того, чтобы сделать возможной установку Swift отдельно от Xcode.

Среди базовых фич:

➡️ Установка нескольких тулчейнов (и стабильные релизы, и снэпшоты).
➡️ Обновление установленных тулчейнов до актуальной версии.
➡️ Проверка доступных для установки тулчейнов с помощью list-available.
➡️ Совместное использование предпочитаемого тулчейна в качестве настройки проекта с помощью файла .swift-version.
➡️ Выполнение заданной команды с помощью подкоманды run.

📖 Официальная новость на сайте Swift.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Архитектура SwiftData: паттерны и практики

SwiftData ознаменовала важный шаг вперёд в области хранения данных. Она была призвана заменить Core Data чем-то более интуитивным: тем, что будет проще интегрировать в SwiftUI.

Однако осталось несколько важных вопросов.

Как именно мы должны проектировать приложение на её основе?

Должны ли мы целиком полагаться на @Model и @Query, или можно абстрагировать их за протоколами для обеспечения гибкости? Как быть с бизнес-логикой? Да и как в целом нужно структурировать код для обеспечения надёжности и тестируемости в будущем.

📖 В этой масштабной статье можно узнать ответы на эти и другие вопросы:

🔘 Как структурировать модели данных
🔘 Где разместить бизнес-логику
🔘 Как писать модульные тесты
🔘 Как настроить работу Preview в Xcode
🔘 Как интегрировать CloudKit
🔘 Как работать с изменениями в слоях в будущем.

😃 iOS Dev
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Современные практики для работы с URL в Swift

Использование современных API в Foundation для построения (и дальнейшей работы) с URL не только упрощает наш код, но и снижает риск возникновения ошибок и возможных крашей.

📖 В своей статье Джон Санделл разбирает импакт от StaticString, макросов, как прийти к виду let url = #staticURL("https://www.tg-me.com/iosdev"), например, а также опции построения сложных запросов с помощью фич из iOS 16.

Кстати, про особенности и свойства URLSession можно узнать из этого поста.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/04/03 04:40:46
Back to Top
HTML Embed Code: