iOS Dev
7.6K subscribers
970 photos
79 videos
1 file
1.12K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
Please open Telegram to view this post
VIEW IN TELEGRAM
Что происходит, когда вы перемещаете файл в git?

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Рисование карт с помощью Swift Charts

Стандартный фреймворк Swift Charts это мощный инструмент для отображения данных с помощью самых разных способов.

В своей статье Артём Новичков вдохновился крутой сессией с WWDC и придумал необычное решение с комбинацией GeoJSON и MapKit.

📖 А что из этого вышло можно увидеть здесь.

🛠 Код проекта на GitHub.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Task.sleep() vs Task.yield(): Объяснение различий

В Swift Concurrency можно использовать Task.sleep() и Task.yield(), чтобы позволить определенной задаче «заснуть» или «выйти» на определенный период времени.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Простая настройка модуляризации для iOS-приложения

При этом подходе можно добиться целого ряда важных преимуществ.

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

📖 В этой статье показано, как можно структурировать такой проект (с использованием Core/Domain/Presentation слоёв), и, что немаловажно, как масштабировать этот подход для реализации более сложных и объёмных приложений.

🛠 Код доступен на GitHub.

🔗 В канале можно и посмотреть на подход Spotify к реализации модульной архитектуры.

А познакомиться с разными подходами для выбора нужной архитектуры проекта (и посмотреть на то, какие могут быть подводные камни) можно как всегда вот здесь (или же ⭐️ прямо тут).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Промпт-инженеры и их зарплаты

В канале я регулярно поднимаю вопросы, связанные с AI (от проблем у Stackoverflow, запрета использования в Apple до опросов).

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

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

Во-вторых, знаю ребят, которые пытались юзать ChatGPT (и аналоги) для решения алгоритмов и ломались уже на вещах уровня medium в литкоде. Особенно когда речь идёт о корнер-кейсах или нетривиальных условиях.
Будет неловко, если этот код попадёт в продакшен, как считаете?

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

Но вот в чём парадокс, происходит ровно наоборот, хотя пару десятков лет назад казалось разве робот может написать симфонию.

Люди создают музыку с использованием нейросетей, рисуют картины, программируют и даже пишут книги.

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

На счёт зарплат таких специалистов - отдельный разговор. Допустим, подписка на ChatGPT стоит от 20 до 200 долларов. Какое образование необходимо, чтобы пользоваться этим инструментом в IT-сфере?

Как думаете, должна ли быть отдельная должность с ограниченным пулом задач для промпт-инженеров в iOS, возможно ли это в целом? Могут ли у них быть собственные грейды?

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Синхронное выполнение задач в iOS-приложениях

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

Но на самом деле, если процесс короткий, как справедливо подмечает Мэтт в своей статье, такое смещение может плохо сказаться на производительности. Так как хотя затраты на переключение минимальны, такая операция на/из потока не является бесплатной.

Добавление в код параллелизма сопровождается увеличением сложности сразу по нескольким направлениям (и оно может быть существенным).

📖 Больше примеров и полезных размышлений можно прочитать в оригинальном материале.

А разбор других (не менее важных) вопросов в разработке, подборку вопросов по многопоточности и многое другое можно найти 💰 в закрытой базе и ⭐️ прямо здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Grand Central Dispatch: большой разбор

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

Среди основных тем:

🔘Основные концепты: thread, multithreading, GCD, task, queue
🔘Типы очередей: main, global, custom
🔘Quality of Service (QoS) и разбор приоритетов
🔘Последовательная и параллельная очереди
🔘Способы выполнения задач: async, sync
🔘Deadlock
🔘Упражнения для проверки знаний по GCD - весь код доступен на GitHub

Пообщавшись с Кириллом, было принято решение вынести некоторые задачи и в большую подборку.

📖 Оригинальную статью можно прочесть здесь.

Напомню, что доступ к этой и другим практическим темам можно получить 💰тут и ⭐️ прямо здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Симметричные и асимметричные эффекты в SwiftUI c добавлением модификатора Scroll Transition

📖 Делюсь неплохим гайдом с примерами кода по добавлению эффектов при скролле, важно помнить, что это доступно только с iOS 17.

А ещё напомню, что в канале есть несколько полезных постов:

🔗 Добавление растягиваемого заголовка в ScrollView с параллакс-эффектом для SwiftUI

🔗 Реализация эффектов ScrollView

🔗 Ещё один разбор ScrollTransitionConfiguration

А для UIKit можно чекнуть, как реализовать бесконечный скролл на базе UITableView + API HackerNews.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый инструмент анализа производительности: Processor Trace

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

🛠 В Xcode 16.3 Beta 2 появился новый инструмент для проверки нагрузки: Processor Trace.

С его помощью можно получить информацию о выполняемом коде, включая ветвления и инструкции.

Но, как обычно, есть и большое но: мы можем использовать его только на M4 и на устройствах iPhone 16 и выше.

И недостаток поменьше: при использовании трассировки девайс будет работать приблизительно на 1 % медленнее.

Благодаря новому инструменту можно проверять активность процессора (и уже затем мы можем решать, что реально вынести в фон с помощью Swift Concurrency или dispatch queue).

📖 Обратите внимание и на этот пост с советами по повышению производительности.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Музей науки Манчестера

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

Вообще, локация этого музея сама по себе необычная, для этого выбрана территория бывшего первого в мире пассажирского вокзала (Манчестер—Ливерпуль-Роуд).

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

И хотя он описан как маленький и примитивный (для своего времени), да и название у него символичное Малыш (или baby) сейчас эта махина выглядит просто огромной.

27 тонн, 15 на 7 метров с потребляемой мощностью в 150+ кВт. Вычислительная мощность — 357 операций умножения в секунду. При этом само умножение было реализовано очень любопытно и по факту 1 умножение равнялось 14 операциям сложения.

После такого задача писать мобильные приложения кажется немного проще 😌

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание 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