iOS Dev @iosdev Channel on Telegram

iOS Dev

@iosdev


🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

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

#ios #mobile #swift

iOS Dev (Russian)

🍏Канал об iOS-разработке, необычных подходах и решениях. Автор: Виктор Грушевский (@Viktorianec) Темы: ⭐️ Подготовка к собеседованиям. ⭐️ Архитектуры и алгоритмы. ⭐️ Код. Много кода. База знаний: https://boosty.to/ios_dev #ios #mobile #swiftnniOS Dev - это канал для всех, кто интересуется миром iOS-разработки. Здесь вы найдете не только новые и необычные подходы к созданию приложений, но и практические советы от опытного автора Виктора Грушевского. В канале обсуждаются различные темы, начиная от подготовки к собеседованиям по iOS-разработке, до более глубоких изучений архитектур и алгоритмов. А если вам нужен пример кода, здесь также представлено много полезных примеров. Более подробную информацию и статьи вы можете найти в базе знаний по ссылке. Присоединяйтесь к каналу iOS Dev и узнавайте все о мобильной разработке на платформе iOS!

iOS Dev

31 Dec, 08:35


Итоги

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

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

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

Написанный код должен приносить деньги, но всем нам полезно помнить, для чего это всё. Хочется находить время не только на развитие, но и на отдых.

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

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

Как сейчас, так и в будущем — этот канал будет концентрацией технических вещей, сложных разборов и практического применения арсенала знаний.

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

Ну а счастье. Счастье никогда не меняется.

С наступающим, у нас будет ещё много интересного.

iOS Dev

27 Dec, 14:24


Подборка топовых докладов с NSSpain 2024

Пожалуй, одна из самых известных конференций наконец опубликовала в общем доступе (а не только по инвайтам) список докладов.

📺 Реализация плавной прокрутки в Threads*.
Несмотря на то, что iPhone и iPad продолжают становиться все мощнее и мощнее, поддерживать плавность прокрутки приложений как никогда важно. Кстати, вот тут доступна первая версия доклада.

📺 Как создать лучший Pull Request
Написать хороший код - это только половина дела.

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

📺 Тестируйте свои приложения!
Krzysztof Zablocki делится информацией, как тестирование может сделать вас более эффективным и каковы лучшие практики для поддерживаемых тестов!

🔗 Целиком плейлист конференции доступен по этой ссылке.

Другие интересные подборки докладов:

🔗 Подборка докладов с iOS Conf SG 2024
🔗 Подборка докладов с конференции Swift Craft
🔗 Доклады с конференции try! Swift Tokyo 2024
🔗 Подборка докладов с конференции Swift Connection 2024

*Threads и Instagram принадлежит компании Meta, признанной экстремистской и запрещенной в России.

😃 iOS Dev

iOS Dev

26 Dec, 13:50


Коллекция анимаций для iOS-приложений

🎆 Делюсь очередной находкой, интересным сайтом, на котором собраны лучшие анимации в приложениях Apple и не только.

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

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

Кстати, вот тут вы можете найти реализацию некоторых эффектов (в том числе и на Metal).

😃 iOS Dev

iOS Dev

25 Dec, 07:14


Полезные инструменты

Умение использовать встроенные средства Xcode — невероятно полезно для разработчика любого уровня. И дело не только в профайлере или других важных опциях, но и в системных фреймворках. В канале я касался области знаний, связанных со сторонними зависимостями (и их возможными недостатками).

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

ℹ️ Например, на мобиусе несколько назад был рад послушать в офлайне замечательный доклад Евгения Ртищева об эффективной работе с сетью (если кто-то не видел, посмотрите обязательно).

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

Поэтому делюсь полезным опросом от Максима Гришутина на счёт самых используемых фреймворков, связанных с iOS-разработкой:

🔗Пройти опрос можно здесь.

😃 iOS Dev

iOS Dev

23 Dec, 13:30


UICollectionView — кастомизация, лучшие практики и необычные советы

UICollectionView по праву мощнейший инструмент для верстки, который используют 99.99% приложений.

👨‍💻 Я решил поделиться набором советов и практик в iOS IQ, среди которых, например, способы создания кастомных заголовков, перетаскивание ячеек, кастомные лэйауты и многое, многое другое.

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

Безусловно, как и остальные секции, раздел будет постоянно пополняться.

💰 Получить доступ можно тут и ⭐️ тут.

iOS Dev

20 Dec, 12:26


Реализация кликабельных ссылок в SwiftUI

Благодаря Markdown в SwiftUI довольно легко можно реализовать такую возможность.

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

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

😃 iOS Dev

iOS Dev

19 Dec, 07:53


Большое руководство для проверки пользовательских данных в SwiftUI

Валидация не должна быть слишком сложной, так как основная цель в том, чтобы сигнализировать пользователю о некорректности вводимой инфы.
Этого можно добиться, показывая сообщения об ошибках, подсвечивая поля или включая/отключая определенные действия.

ℹ️ Распространённый подход к реализации — создание кастомных компонентов, но и у этого варианта есть свои минусы.

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

😃 iOS Dev

iOS Dev

17 Dec, 11:43


SwiftUI Button: кастомные стили и лучшие практики

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

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

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

📖 В этой статье разбираются разные подходы к созданию таких элементов для дальнейшего переиспользования.

Больше про подходы к кастомизации можно почитать в нашем канале:

🔗 Создание переиспользуемых компонентов в SwiftUI
🔗 Разбор кнопок SwiftUI: создание и возможности кастомизации
🔗 Настраиваемая кнопка с разными состояниями в SwiftUI

😃 iOS Dev

iOS Dev

16 Dec, 12:00


Matt Massicotte о строгом параллелизме в Swift 6

Внедрение Swift 6 может быть непростым и вызывать большое количество проблем. Не помогает и количество ключевых слов: tasks, sendability, isolation domains и boundaries, actors, preconcurrency (и многое другое).

📺 В этом выпуске Dev Conversations Мэтт рассказывает не только об этом, но ещё о своём опыте работы с платформами Apple еще до появления OS X (а также о работе с батареей iPhone в конце 2000-х, и о первых днях работы в Crashlytics).

📖 Доступен и текстовый вариант беседы: вот здесь.

Вы также можете знать Мэтта по его блогу (некоторые решения и советы появляются и в нашем канале) и репозиторию:
🔗 Практические решения проблем с использованием Swift Concurrency на Github.

😃 iOS Dev

iOS Dev

13 Dec, 07:49


Подборка докладов с конференции Swift Connection 2024

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

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

📺 Данные? Данные! Они повсюду!
В докладе рассмотрены несколько опций и их производительность (Plist/SQLite/CoreData/Swift Data на примере работы с 1 ГБ данных).

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

📺 Swift 6 + Concurrency
Автор делится советами, которые позволят решать асинхронные задачи элегантно и эффективно.

📺 SwiftUI-анимации
В этом видео рассказано о различных способах создания анимации в SwiftUI.

📺 Полностью плейлист конференции доступен здесь.

Другие интересные подборки докладов:

🔗 Подборка докладов с iOS Conf SG 2024
🔗 Подборка докладов с конференции Swift Craft
🔗 Доклады с конференции try! Swift Tokyo 2024

😃 iOS Dev

iOS Dev

12 Dec, 09:13


Создание экрана настроек в SwiftUI с помощью AppStorage

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

📖 В этой статье, особенно полезной новичкам, рассматривается создание такого экрана, а ещё автор напоминает, для чего нужно использовать suiteName.

😃 iOS Dev

iOS Dev

11 Dec, 10:23


Разбор Apple Intelligence: генерация изображений

🔗 Image Playground, работающий на базе Apple Intelligence это новый инструмент, который позволяет легко переводить текстовые и визуальные запросы в изображения.

Он доступен в macOS 15.2 beta, iOS 18.2 beta и iPadOS 18.2 beta и расширяет творческие возможности не только для пользователей, но и для нас, разработчиков.

📖 С возможностями работы с Image Playground можно ознакомиться здесь.

😃 iOS Dev

iOS Dev

10 Dec, 08:34


Прокачиваем использование ScrollView: создание коллекций с вертикальной и горизонтальной прокруткой

📖 В этом материале рассказывается об особенностях использования ScrollView при внедрении пагинации, свойствах containerRelativeFrame, работе с позицией прокрутки и анимациях.

🔗А вот тут в канале можно почитать про реализацию эффектов ScrollView.

😃 iOS Dev

iOS Dev

09 Dec, 09:41


Как Apple использует Swift и SwiftUI в iOS 18

📖 Александре Колуччи в ежегодном исследовании (как и для прошлых версиях iOS) ответил на несколько вопросов:

1️⃣ Сколько бинарников содержит iOS 18?
2️⃣ Какие языки программирования использовались для разработки системных приложений?
3️⃣ Сколько приложений написано на чистом Swift?
4️⃣ Какой процент приложений использует SwiftUI по сравнению с UIKit?

Очевидный спойлер: количество приложений на Swift и SwiftUI растёт.

Но в iOS 18 Apple также начинает или по крайней мере планирует использовать Swift в низкоуровневой подсистеме Secure Enclave.

😃 iOS Dev

iOS Dev

06 Dec, 10:22


Создание клона приложения Messages с помощью SwiftUI

📖
В статье автор делится своим подходом к вёрстке списка чатов, выборе аттачей и затрагивает особенности реализации баббла сообщений с помощью Path.

А посмотреть на реализацию эффекта отклеивания, как в нативном приложении, можно в этом посте.

😃 iOS Dev

iOS Dev

05 Dec, 10:20


Бесплатные курсы по мобильной разработке и аналитике для студентов

Узнайте про Python, мобильную разработку и анализ данных.

Просто подайте заявку на сайте Т-Образования.

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

🔗 Выберите курс и проходите его в удобном темпе

iOS Dev

05 Dec, 08:41


Растягивание аудиофайла до нужной длины в Swift

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

📖 Том Локхорст и Матейс Кадейк рассказывают, почему комбинации AVMutableComposition и AVAudioUnitTimePitch недостаточно. И описывают способ с дублированием конкретных фрагментов аудио в рассчитанных точках.

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

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

😃 iOS Dev

iOS Dev

04 Dec, 09:28


Создание кастомного Segmented Control в SwiftUI

Хотя многие примеры модификатора matchedGeometryEffect() посвящены анимации, он может применяться и в других контекстах, например для создания своих контролов.

📖 Наталья Панферова в своем блоге рассказывает о простом способе использования этого модификатора для создания собственного компонента со слайд-анимацией.

😃 iOS Dev

iOS Dev

03 Dec, 07:58


Полезные советы для Advent of Code на Swift

Каждый декабрь Эрик Вастл публикует Advent of Code — увлекательный набор заданий по написанию алгоритмов.

Каждый день с 1 по 25 декабря публикуется по одной задаче.

Задачи появляются постепенно, начиная с самых простых и постепенно усложняются.

🔗 Здесь есть несложная инструкция, как присоединиться к Swift-лидерборду.

А на скриншоте несколько советов, как упростить решение задач, используя Swift Algorithms.

😃 iOS Dev

iOS Dev

02 Dec, 08:40


Новогодняя анимация на SwiftUI+AppKit

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

🤩 Оказывается, что такой эффект можно создать для мака, что и доказывает Simon B. Støvring.

Интересно, кто-то из читателей нашего канала сможет повторить такой эффект?

😃 iOS Dev

iOS Dev

29 Nov, 10:18


Реализация поисковых подсказок в SwiftUI

🔎 Модификатор searchSuggestions(_:) - это полезная фича, которая улучшает работу поиска в приложениях для iOS.

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

📖 В этом материале рассказано, как внедрить такую фичу в своё приложение поэтапно:

1️⃣ Реализация фильтрации поиска в режиме реального времени.
2️⃣ Внедрение подсказок.
3️⃣ Отслеживание истории поиска.
4️⃣ Создание удобной навигации.

😃 iOS Dev

iOS Dev

28 Nov, 09:09


Пример интеграции Natural Language: анализ текста и генерация градиента на основе результата

ℹ️ Natural Language — это фреймворк, предоставляющий набор инструментов для анализа и обработки текста.

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

📖 В своей статье Артем Новичков рассматривает особенности использования фреймворка, приводит примеры и показывает возможное применение с использованием MeshGradient (в канале есть несколько разборов).

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

😃 iOS Dev

iOS Dev

27 Nov, 10:07


Оптимизация процесса компиляции и выполнения тестов в Xcode

Компиляция проектов Xcode может занимать много времени (особенно после очистки кэша).

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

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

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

😃 iOS Dev

iOS Dev

26 Nov, 09:52


Подборка экспериментальных анимаций на SwiftUI с кодом

😎 Майкл Ли - дизайнер, который любит делать прототипы с необычными подходами.

Недавно он заопенсорсил всю коллекцию (и обещает продолжать её наполнять).

🛠 Ознакомиться с примерами можно на Github.

😃 iOS Dev

iOS Dev

25 Nov, 10:52


Об анатомии крэшей на iOS «по-взрослому»

Давид Чупреев из команды Core iOS ОК на хабре постарался раскрыть тему крашей, и в фундаментальной статье описал, откуда они берутся и, что самое главное, как с ними взаимодействовать.

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

🔗 А в нашем канале недавно был ещё один разбор «9 уровней зла» от падения фрейм-рейта до компрометации системы в целом.

😃 iOS Dev

iOS Dev

21 Nov, 10:43


Интеграция Live Activity и Dynamic Island в iOS: подробное руководство

📖 В масштабной статье описаны этапы, позволяющие, эффективно интегрировать Live Activities и Dynamic Island в приложение для iOS.

Плюс в том, что рассмотрен каждый шаг: от ограничений дизайна до обработки обновлений.

📺 Также материал доступен и в формате видео.

😃 iOS Dev

iOS Dev

20 Nov, 08:23


Есть ли место творчеству в разработке?

Многие романтизируют нашу профессию, но так ли это на самом деле, большой вопрос.

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

Чаще всего разработка — это совокупность многих ограничений: ТЗ, дизайн, жёсткая архитектура, процесс код-ревью и тестирование — повторить несколько раз. В зависимости от уровня компании между каждым этапом могут быть свои прослойки, в том числе согласования, многократные изменения и смещения приоритетов.

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

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

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

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

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

Творческая ли наша профессия?

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

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

Если вы не боитесь сложных вызовов, когда на Stackoverflow отсутствуют ответы, а ChatGPT ещё не обучился, конечно.

Но когда вы в очередной раз столкнётесь с багом, который не воспроизводится или ваше приложение зареджектят потому что луна опять не в той фазе, или же проект надо будет перевести на Swift 7 спустя несколько лет, а для этого надо будет обновить треть кодовой базы — перечитайте этот пост.

😃 iOS Dev

iOS Dev

19 Nov, 08:47


Подробное объяснение работы с Environment в SwiftUI

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

В основе фреймворка лежит обертка свойств @Environment (и связанные с этим инструменты).

📖 В статье подробно описаны различные механизмы от классических протоколов @EnvironmentObject и ObservableObject до относительно новых макросов @Observable и @Bindable.

А ещё уделено внимание производительности и сложным иерархиям вью в приложении.

😃 iOS Dev

iOS Dev

18 Nov, 07:59


TextEditor в SwiftUI: возможности, ограничения и советы

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

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

В SwiftUI есть возможность использования TextEditor. И пусть он не такой мощный, как UITextView, его вполне достаточно для большинства случаев использования.

📖 В этом материале разбираются не только примеры использования (например, как сделать свою функцию find/replace), но и приводится простой пример реализации.

😃 iOS Dev

iOS Dev

15 Nov, 09:13


Эффект переливающегося стикера на Metal+Swift

Крутые анимации всегда сложны, а довести задуманное до конца уже неплохо.

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

Использовано сразу несколько шейдеров и модификаций внутри.

📖 Бонусом идёт репозиторий с кодом (из коробки доступно для настройки несколько параметров).

А здесь ещё больше сложных анимаций и эффектов.

😃 iOS Dev

iOS Dev

14 Nov, 08:10


Обнаружение лиц на изображениях с помощью фреймворка Vision

Распознавание лиц может оказаться полезным инструментом для многих приложений.

Например в системном «Фото» от Apple это используется для организации специальной коллекции.

В 18 оси для разработчиков появилась возможность использовать новый запрос FaceObservation, который упрощает работу с такими задачами.

📖 Доступное объяснение и пример использования есть в этой статье.

😃 iOS Dev

iOS Dev

13 Nov, 07:28


Большое обновление App Store Connect — версия 2.0

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

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

📖 Узнать больше о номинациях и новых доступных ресурсах можно здесь.

😃 iOS Dev

iOS Dev

12 Nov, 13:24


Что такое краш в iOS: детальный разбор

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

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

📖 Делюсь отличной статьёй, в которой сложная тема рассмотрена с юмором (и даже приведены 9 уровней зла от падения фрейм-рейта до компрометации системы в целом).

Рассмотрены сбои не только в рантайме, но и в ядре XNU, а ещё указано, почему краши - далеко не самое худшее, что может произойти с девайсом.

😃 iOS Dev

iOS Dev

11 Nov, 15:09


Вакансия iOS-разработчика в VK Видео

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

Задачи, которые нужно будет решать:

🔘Разработка приложения ВКонтакте и VK Видео для iOS и tvOS.
🔘Создание важных инструментов: загрузчик и редактор видео.
🔘Участие во всех этапах разработки — от проектирования до запуска.

Что ждут от кандидата:

🔘Отличное знание Swift и платформы iOS в целом, уровня middle+ и выше.
🔘Опыт работы с Objective-C или готовность его изучить.
🔘Знание классических алгоритмов и структур данных.

🔗 Откликнуться можно здесь.

iOS Dev

11 Nov, 13:45


Реализация приложения для игры в шахматы на SwiftUI

David v.Knobelsdorff недавно создал шахматное приложение от начала до конца с помощью SwiftUI и задокументировал весь процесс в своем блоге.

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

1️⃣ Мотивация и терминология.
2️⃣ Зачем нужны pgn-файлы и как с ними работать.
3️⃣ Реализация логики.
4️⃣ Создание набора компонентов.
5️⃣ База данных и кодирование ходов.
6️⃣ FSRS-алгоритм (тут можно почитать про него дополнительно).
7️⃣ Шахматные головоломки.
8️⃣ Использование локального шахматного движка.
9️⃣ Тестирование и выводы.

😃 iOS Dev

iOS Dev

08 Nov, 07:39


Невозможно всё знать

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

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

В разработке также, особенно когда мы сталкиваемся с широким полем неизвестности.

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

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

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

Что-то всегда будет ломаться. Объём, нагрузка, требования, новые SDK, новые технологии будут заставлять настраивать проект напильником (по этой причине стоит помнить о подводных камнях сторонних зависимостей).

Знать всё невозможно.

Но хочется вспомнить о словах человека, который придумал соцсеть с миллиардом (уже двумя) человек:

«Move fast and break things» (двигайтесь быстро и ломайте вещи)

И если у вас ничего не ломается, то возможно, ваш проект развивается недостаточно быстро?

😃 iOS Dev

iOS Dev

07 Nov, 09:21


Создание адаптивной верстки в SwiftUI с использованим Layout-протокола

Комбинация UICollectionView и UICollectionViewFlowLayout в UIKit дает много гибкости и контроля для создания любых нужных нам макетов, но вот в SwiftUI с этим могут быть сложности.

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

📖 В этом материале разбирается подход с использованием протокола Layout (доступного с 16 iOS).

😃 iOS Dev

iOS Dev

06 Nov, 08:34


Как запретить создание скриншотов для важных экранов в Swift

Для этого пригодится элегантное решение с применением свойства isSecureTextEntry с помощью кастомного модификатора.

📖 В этой статье автор делится необходимыми шагами с примером кода.

😎 Кстати, способ актуален и для записи видео с экрана девайса.

⭐️ Больше примеров и необычных решений здесь.

😃 iOS Dev

iOS Dev

05 Nov, 08:32


Шифр Виженера или приключение на одну минуту

Наверняка вы знаете про шифр Цезаря (даже если никогда не думали про Римскую империю).

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

Для шифрования нужню юзать таблицу алфавитов (она же tabula recta или квадрат Виженера).

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

Таким образом, в таблице получится 26 различных шифров Цезаря.

🚀 Но давайте к делу!

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

В канале я спрятал ключевое слово, подсказка — этот пост.

Используйте ключевое слово к этой строке: qck_fvzy_14_UYxpuF и вы получите код билета на конференцию.

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

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

😃 iOS Dev

iOS Dev

31 Oct, 09:22


🔥 Огненный шейдер на Swift (нативное решение на Metal)

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

В этом году под 31 октября я решил повторить опыт, уже с использованием Metal, и вышло, как мне кажется, гораздо лучше.

На видео не используются никакие текстуры, только натив.

Описал весь опыт, источники и привёл пример кода на Swift эксклюзивно здесь.

😃 iOS Dev

iOS Dev

30 Oct, 09:46


Реализация размытия экрана в режиме многозадачности

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

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

😃 iOS Dev

iOS Dev

29 Oct, 10:36


Работа с таймерами в Swift

Таймеры в Swift используются постоянно: для планирования отложенных или повторяющихся задач.

В статье, затрагивающей моменты создания и работы с таймерами, автор напоминает несколько важных моментов:

🔘 Зачем вообще нужны таймеры в Swift.
🔘 Повторяющиеся (и не повторяющиеся) таймеры.
🔘 Как запланировать повторяющиеся задачи.
🔘 Что такое tolerance и как runloop modes влияют на работу таймера.

📖 В канале есть ещё один неплохой разбор таймеров (ведь как известно, даже Apple допускает ошибки).

😃 iOS Dev

iOS Dev

28 Oct, 09:49


Комплексное руководство по работе с KeyPath в Swift

В мире Swift KeyPath - это мощная, но часто недооцениваемая функция.

Цель этой статьи — глубоко изучить функциональные особенности KeyPath, раскрыть возможности и помочь использовать её в процессе разработки.

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

5 вещей, которые вы могли не знать о KeyPaths можно проверить в этом посте.

😃 iOS Dev

iOS Dev

25 Oct, 07:26


Анимация переходов между view в SwiftUI

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

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

В качестве примеров, где используются такие анимации, можно привести:

🔘Навигация между экранами.
🔘Добавление (или удаление) элементов из списка.
🔘Показ модальных вьюх.

📖 Разбор создания таких эффектов (и их комбинаций) можно почитать в этой статье.

🔗В канале есть ещё и пример таких переходов с использованием Metal.

😃 iOS Dev

iOS Dev

24 Oct, 08:35


🤩 Image Playground в действии

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

Похвалитесь, кто был в листе ожидания, получили ли доступ? В Европе пока все эти фичи (даже в бете) недоступны.

😃 iOS Dev

iOS Dev

23 Oct, 10:04


Как создавать привлекательные анимации

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

Приложение, которое делает то, что вы ждёте и так, как вы хотели бы видеть — вот что выделяет продукт.

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

Умение создавать приятные анимации — сложная задача (для которой нужен опыт и знания).

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

В свою очередь, самыми интересными примерами я делюсь здесь.

😃 iOS Dev

iOS Dev

22 Oct, 09:16


Как начать использовать Swift Testing

📖 В этой статье автор делится своим взглядом на то, что нужно знать для начала работы с новым фреймворком Swift Testing.

Рассмотрены основные возможности Swift Testing (а ещё его отличия и улучшения по сравнению с XCTest).

📺 А вот здесь этот материал представлен в формате видео.

📖 Кстати, в канале есть ещё один вариант разбора отличий и преимуществ по сравнению с XCTest.

😃 iOS Dev

iOS Dev

18 Oct, 07:31


И ещё одно нововведение (более приятное) в App Store Connect

Будет полезным для инди-разработчиков (и для команд маркетинга/оптимизации и так далее).

В sales и trends всегда была опция для статистики по приложениям за все время (lifetime), а вот в аналитике добавили только сегодня.

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

🤩 Посмотреть можно на вкладке аналитики в списке пресетов.

😃 iOS Dev

iOS Dev

18 Oct, 07:18


ℹ️ Новое требование к обновлениям приложений в ЕС

Начиная с сегодняшнего дня, для отправки обновлений приложений в App Store на территории Европейского Союза (ЕС) владельцам аккаунтов или администраторам программы Apple Developer Program необходимо ввести статус трейдера в App Store Connect.

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

Начиная с 17 февраля 2025 года, приложения без статуса трейдера будут удаляться из App Store в ЕС до тех пор, пока статус трейдера не будет предоставлен и проверен в целях соблюдения Закона о цифровых услугах.

Несколько рекомендаций по заполнению статуса - здесь.

😃 iOS Dev

iOS Dev

16 Oct, 08:03


Отрисовка графики на Apple Vision с помощью Metal Rendering API

Материалов по Apple Vision Pro очень мало (а приложений чуть больше, но если вы что-то делали, поделитесь в комментариях, очень интересно).

Когда дело доходит до рендеринга, большинство разработчиков выбирают уже известные игровые движки вроде Unity или высокоуровневые API Apple (чекайте RealityKit).

Однако есть и другой вариант, который был доступен с самого начала: создание собственного движка рендеринга с помощью Metal API.

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

Нашёл любопытную статью (которую сохранил и себе для будущих экспериментов), в которой рассматривается множество интересных моментов:

📖 Создание и настройка LayerRenderer.

📖 Vertex Amplification (и описание примеров с Vertex/Fragment шейдерами).

📖 Обновление и энкодинг для кадров.

📖 Поддержка стереоскопического и не-VR рендеринга дисплея.

📖 Рекомендации и советы.

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

😃 iOS Dev

iOS Dev

15 Oct, 10:01


Проектирование сетевого слоя в iOS

Конечно, идеального решения не существует.

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

В двух больших статьях автор рассказывает о своём подходе к реализации на примерах:

📖 Проектирование API-клиента (создание запросов, пример реального варианта использования, авторизация + логирование).

📖 Вторая часть посвящена модульным и интеграционным тестам.

😃 iOS Dev

iOS Dev

14 Oct, 08:36


Как работать с passkeys в iOS-приложении

Passkeys используются для аутентификации пользователей без использования пароля (после WWDC 23 Apple даже добавила фразу: При использовании passkey с сервера нечего красть).

Сама пара public + private ключ создается каждый раз при генерации новой учетки.

Чтобы получить доступ к контенту пользователи могут использовать PIN-код или биометрию.

📖 Здесь есть полезный материал о том, как настроить passkeys в вашем приложении и пример реализации на github.

😃 iOS Dev

iOS Dev

11 Oct, 08:28


Рисование кастомных фигур в SwiftUI: примеры и код

В SwiftUI Shape-протокол опредеяет контур нашей вью.

Он используется для рисования и проектирования своих собственных фигур или контролов разной сложности

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

😃 iOS Dev

iOS Dev

10 Oct, 09:43


Как работать со Swift Data и Core Data в фоновом режиме

Хотя SwiftData намного проще в настройке, фреймворк унаследовал многие проблемы Core Data (включая те, которые останавливали многих разработчиков от использования Core Data в своих приложениях).

Одна из самых больших проблем — управление моделями в различных контекстах. Модели Swift Data и Core Data небезопасно использовать совместно в разных потоках (они не Sendable и не thread-safe). Apple даже указывает на это в своем руководстве.

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

Большой гайд по работе со Swift Data есть в нашем канале и вот тут.

😃 iOS Dev

iOS Dev

08 Oct, 12:52


Исследование причин зависаний приложений — серия уроков от Apple

📖
Вышла новая серия туториалов от Apple, в которой новички могут узнать, как использовать Instruments для анализа производительности, ресурсов и поведения приложений.

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

Для удобства отметил главы в формате теории (📖) и практики (🛠)

Первая часть
📖 Начало работы с инструментами
🛠 Идентификация причины зависания

Вторая часть
🛠 Анализ активности главного потока
📖 Определение частоты выполнения
🛠 Сокращение нагрузки на основной поток
🛠 Выполнение работы асинхронно
📖 Понимание синхронных (и асинхронных зависаний)
🛠 Обеспечение выполнения работы в фоновом потоке

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

😃 iOS Dev

iOS Dev

07 Oct, 07:20


Будьте внимательны к UserDefaults: история о труднодоступных ошибках и потерянных данных

Хотя UserDefaults и удобный инструмент (и стандарт, который использует все или почти все) с массой удобных фич (просто обмениваться данными, автоматическая сериализация/десериализация и так далее), есть кейсы, когда стоит использовать что-то ещё.

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

🔘 Не нужно хранить конфиденциальные данные в UserDefaults (для этого есть кейчейн).
🔘 Следует избегать больших объемов данных в UserDefaults (правильнее юзать Core Data или Swift Data, или Realm, хотя поддержка большей части экосистемы остановлена).

📖 Вышла отличная статья от Кристиана Селига с разбором таких примеров, а ещё там есть интересные ситуации, когда данные могут быть недоступны (и при чём тут prewarming), и как предотвратить потерю вашей информации в UserDefaults.

😃 iOS Dev

iOS Dev

04 Oct, 07:06


ReviewBuddy — приложение для трекинга оценок в AppStore или как сменить регион, не внося изменения в Apple ID

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

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

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

Наверняка, многие знают про опцию поиска приложений (и способ для проверки доступности новой версии через https://itunes.apple.com/search). Но ведь её можно использовать и для поиска оценок/формирования средневзвешенной.

Поэтому я внедрил несложный механизм запросов с помощью уже не такого новомодного async/await и написал алгоритм трекинга оценок для любого приложения в аппсторе. Бонусом впилил историю, просмотр отзывов (а отвечать на них можно в Starly), копирование айдишников и урлов и возможность шаринга оценок по любому приложению.

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

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

🔗Скачать приложение можно здесь.
🎆 Поддержать — вот тут.

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

😃 iOS Dev

iOS Dev

03 Oct, 10:50


Расширенный поиск с помощью AI по сессиям WWDC

🤩 Неплохая идея (автор - Мэтт Спир), с помощью которой можно сразу получить саммари по фичам и посмотреть доступные сессии по теме.

📖 А вот тут можно посмотреть на подборку лучших сессий с WWDC24 (Swift, Perfomance, Debugging).

😃 iOS Dev

iOS Dev

02 Oct, 08:42


Утечка памяти: детектив в Xcode

Недавно Джейкоб Бартлетт столкнулся с забавной ошибкой, связанной с диплинками.

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

📖 В итоге разработчик провел целое расследование, а к чему оно привело, можно прочитать тут.

Спойлер: для поиска пригодится этот пост.

😃 iOS Dev

iOS Dev

01 Oct, 08:21


Подборка докладов с iOS Conf SG 2024

🤩 Наш читатель посетил iOS-конференцию в Сингапуре и поделился своим топом лучших докладов:

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

📺 Swift beyond Apple platforms — о возможностях и проблемах использования Swift от веб-разработки до работы во embedded-системах.

📺 The Swift Actor Pitfall: Understanding and Managing Reentrancy – разбор неочевидной и простой ошибки, связанной со swift concurrency.

Нельзя пройти стороной и миграцию кодовой базы на async/await.

🔗 А весь плейлист с докладами доступен вот тут.

Кстати, в канале есть обзоры и других конференций:
🔗 Подборка докладов с конференции Swift Craft
🔗 Доклады с конференции try! Swift Tokyo 2024

😃 iOS Dev

iOS Dev

30 Sep, 08:59


Реализация загрузчика файлов в SwiftUI

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

📖 Маттео Манфердини в своём блоге написал огромный материал о своём подходе к созданию загрузчика файлов (и дополнил свою прошлую реализацию).

Статья разбита на несколько частей:

1️⃣ Загрузка файлов и как трекать прогресс скачивания.
2️⃣ Реализация архитектуры для загрузки нескольких файлов.
3️⃣ Трекаем прогресс с помощью Swift Concurrency.
4️⃣ Создание интерфейса SwiftUI для управления загрузкой.

🛠 Код проекта доступен на github

😃 iOS Dev

iOS Dev

27 Sep, 09:16


Как работать с MeshGradient в iOS 18

В iOS 18 появилась возможность создавать mesh-градиенты.

В целом, это лёгкий в использовании способ создания необычных эффектов.

Например, вы можете посмотреть на мою реализацию или на вариант создания анимации в стиле Siri.

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

😃 iOS Dev

iOS Dev

26 Sep, 09:44


Как делать великолепные приложения

Я очень редко делюсь роликами c интервью (только если речь не про персон калибра Барбары Лисков).

В канале очень много примеров анимаций, поэтому пройти мимо автора вот этого протипа (и этого, и многих других) нельзя.

📺 В этом видео Джанум делится многими деталями (и своим опытом в Apple, Netflix, Airbnb), в том числе:

- Уровни анимации.
- Почему шейдеры имеют большое значение (и как они работают)
- Как реализована анимация загрузки для Arc.
- Про собственный анимационный движок Wave (есть обзорный пост в канале).
- Изучение принципов флюидного дизайна при работе на iPad и многим другим.

Рекомендую посмотреть не только разработчикам, но и поделиться с дизайнерами подходами Джанума к созданию по-настоящему уникальных анимаций.

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

😃 iOS Dev

iOS Dev

25 Sep, 10:58


Реализация перетаскивания элементов с помощью жестов в SwiftUI

📖 Несложный пример, в котором показан один из возможных подходов, как работать с перетаскиванием элементов интерфейса с помощью жестов в SwiftUI.

🛠 Само решение доступно на github.

😃 iOS Dev