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

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

#ios #mobile #swift
加入频道
Поведенческие паттерны в Swift: определение, использование, недостатки

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

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

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

Вообще, согласно банде четырёх к таким паттернам относятся:

- Цепочка обязанностей.
- Команда.
- Интерпретатор.
- Итератор.
- Посредник.
- Хранитель (он же memento).
- Наблюдатель.
- Состояние.
- Стратегия.
- Шаблонный метод.
- Посетитель.

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

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

⬆️О структурных паттернах проектирования можно почитать тут.

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
Как использовать экспериментальные версии (и функции) Swift в Xcode?

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

Иногда действительно придётся подождать, но часто в пропозалах можно встретить следующее:
-enable-experimental-feature

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

Например, release/5.10 or release/6.0 показывает, что функция будет доступна только при использовании Swift из этой ветки.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезные материалы для подготовки к секции System Design

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

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

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

Сегодня я хотел бы поделиться частью источников для подготовки к System Design:

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

🔗 Собеседование на Senior-разработчика с Александром Зиминым, основной упор на System Design (открытое видео с канала Podlodka).

🔗 Разбор архитектурной секции с Mobius (в тегах не iOS, но это не главное).

🔗 Разбор собеседований по System Design от человека с опытом 300+ интервью с кандидатами на хабре.

🔗 Разбор проблем проектирования iOS-приложения на реальных примерах.

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

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
Так ли нужен MVVM для разработки SwiftUI-приложений?

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

Именно поэтому важно знать и об альтернативных вариантах, чтобы принять правильное решение при разработке.

📖 В частности, в своем рассуждении он отвечает на следующие вопросы:

1️⃣ Что делать с тем, что логика будет во Views, ведь это плохая практика?

2️⃣ Как быть с тестированием без View Model?

3️⃣ Если это сработает с маленькими приложениями, то как быть с более крупными проектами?

🛠 Кстати, вот тут есть коллекция самых разных архитектур на Github.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Погружение в макросы Swift

Макросы Swift впервые были представлены на WWDC 23, и хотя это не новая концепция в программировании в целом, она привнесла полезные опции для Swift-разработчиков.

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

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

🔗 Кстати, в канале есть и ещё несколько примеров создания.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Подробный разбор модификаторов Overlay и Background в SwiftUI

В инструментарии SwiftUI overlay и background играют незаменимую роль в различных сценариях разработки.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Эффективный способ загрузки больших изображений в основном потоке

В подавляющем большинстве случаев нам подойдёт вариант:

let image = UIImage(named: "big-image")
imageView.image = image


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

Особеннно это проявится, например, при работе с коллекциями.

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

🐱 prepareForDisplay декодирует нашу картинку в фоновом потоке, и уже после этого можно использовать результат из completionHandler.

Важно не забыть вернуться в основной поток, конечно же.

Или использовать Task, если вы уже перевели (или переводите проект для Swift Concurrency).

🍏 Кстати, большое количество материалов в базе знаний поможет быстрее разобраться со Swift Concurrency.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание приложения-чата, используя StreamChat SDK и SwiftUI

🛠 SDK на Github включает в себя приличный набор высокопроизводительных и настраиваемых компонентов интерфейса.

📖 А в этой статье приводится пример настройки (около 100 строк кода на полностью рабочее приложение).

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Dispatch Barrier, потокобезопасность и почему слишком много очередей это плохо

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

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

🔒 Dispatch Barrier представляет собой механизм синхронизации задач в очереди.

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

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

А ещё там есть несколько десятков вопросов, доступных уже сейчас.

➡️ Подписаться можно здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезная информация по добавлению Privacy Manifests

👨‍💻 Май уже начался, и это означает, что теперь все билды приложений, которые мы отправляем на проверку, должны содержать новые манифесты (при условии использования соответствующих API).

В этом посте постарался объединить доступную инфу, которая минимизирует траты времени на внедрение новых требований Apple:

1️⃣ Официальная документация по использованию манифестов.

2️⃣ Скрипты для поиска возможного использования такого API на github.

3️⃣ Онлайн-помощник для создания манифестов.

4️⃣ Две больших русскоязычных статьи с разбором (на хабре и на sparrowcode).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Xcode удалил весь список симуляторов, что случилось?

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

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

Я провёл небольшое расследование.

Пару дней назад система защиты macOS от вредоносного ПО XProtect получила обновление 132, которое обнаружило ложное срабатывание в образе диска с симулятором и пыталось его устранить, и именно это вызывало дроп всего списка симуляторов.

Вышло silent-обновление 133 (скорее всего оно уже применилось, но если нет - проверьте обновления в системе).

Ошибку можно было заметить и без обновления Xcode, и даже при скачивании симулятора ничего бы не поменялось (хотя одним из решений было юзать команду sudo killall -9 http://com.apple.CoreSimulator.CoreSimulatorService).

Так что и Apple иногда тестируют на проде 📞.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект 3D-карусели в iOS

🎆 Джанум Триведи показал, как можно реализовать такое отображение в своём приложении.

Чтобы показать физически точное искривление перспективы, он создал 3D-цилиндр и наложил изображения на его поверхность.

Но если сами картинки не находятся на ScrollView, то как тогда получается такой эффект физики?

На самом деле есть суперширокий, невидимый scrollview, который ловит жест прокрутки и сопоставляет его contentOffset с вращением 3D-модели.

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

👨‍💻 Возможно, кто-то должен придумывать новые подходы для карусели раз в 10 лет.

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

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS IQ — новый способ получения премиум-контента

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

За последнее время вы могли видеть эти посты:

🔗 Dispatch Barrier, потокобезопасность и почему слишком много очередей это плохо
🔗 Поведенческие паттерны в Swift: определение, использование, недостатки
🔗 Блок вопросов: многопоточность (и бонус)
🔗 Структурные паттерны проектирования в Swift
🔗 SwiftUI Layout Protocol: как работать с версткой в SwiftUI
🔗 Порождающие паттерны проектирования (с примерами на Swift)
🔗 Собеседования: вопросы на понимание кода

И многое, многое другое.

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

🍏 Воспользоваться скидкой можно здесь.

А вот и обещанная подписка в боте (список того, что вы получите — тут).

На месяц.
На год (с большей выгодой).

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Sticker Wall - Создание голографического эффекта в SwiftUI

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

В этом прототипе каждый стикер — это View (и для каждого свои значения угла наклона, поворота, CMMotionManager и таймеры), что приводило к перегреву девайса при 99%-ной загрузке процессора.

Поэтому были приняты решения для оптимизации:

1️⃣ Перенести весь код, связанный с движением, в единственный объект ObservableObject.

2️⃣ Использовать один таймер для всех изменений значений.

3️⃣ Запускать все изменения только один раз за цикл таймера.

И хотя процессор всё равно показывает нагрузку в 45%, это уже лучше первоначальных результатов.

📖 Всю историю создания можно посмотреть тут.

А ещё больше эффектов - здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Доклады с конференции try! Swift Tokyo 2024

try! Swift Tokyo — пожалуй, одна из самых популярных конференций по iOS в мире. Надеюсь, однажды получится целенаправленно попасть и на неё, хотя и так в Японии есть что посмотреть.

Среди представленных 20+ докладов я бы рекомендовал обратить внимание как минимум на эти:

📺 Type Inference в Swift (приоритет перегрузки, проблемы соответствия протоколу и почему компиляция кода может стать затратной)

📺 Code signing — разбор проблем. Кстати, в бусти я писал, что скрывают в себе сертификаты.

📺 File Provider на iOS и macOS и все связанные с ним возможности.

📺 Будущее совместимости C++: опыт переноса игры на Swift.

📺 Взаимодействие с сокетами и параллельная обработка в Swift (у меня это видео уже в избранном).

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

🎆 Кстати, про интересные статьи — напоминаю, что есть ещё и доступ к премиум-контенту с помощью бота.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Сервис для тестирования универсальных ссылок в iOS

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

Платформа запрашивает последнюю AASA-файла с серверов Apple и генерирует простую панель управления для тестирования.

Например, можно увидеть, как ведет себя каждая ссылка, проверить настройку и выявить регрессии. А ещё неважно, сколько приложений поддерживает ваш AASA-файл (протестить можно их все).

Бонус: платформа также сообщит, когда обновится кэшированная версия AASA-файла.

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

📖 А документацию можно найти тут.

Ранее в канале я писал, как проверять такие ссылки с помощью симулятора.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift Argument Parser Guide — создание собственных инструментов

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

1️⃣ Основы и аргументы.
В первой части рассмотрены основы анализатора аргументов, способы подготовки инструментов, команды и подкоманды.

2️⃣ Флаги.
В этой части вы узнаете о флагах и спецификациях имен на интерактивном примере.

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

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

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

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

Вот несколько приложений в опенсорсе:

1️⃣ ProtonMail — популярный почтовый клиент для зашифрованных писем.

2️⃣ Signal — если вам нужно реализовать в своем приложении какие-то фичи для чата, этот проект может стать отличным источником вдохновения.

3️⃣ VLC — едва ли не самый популярный кроссплатформенный медиаплеер с открытым исходным кодом.

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

5️⃣ Telegram iOS — далеко не всегда очевидные подходы (и иногда сложночитаемые), но при этом сложно отрицать, что телеграм остаётся невероятно быстрым при большой нагрузке. А ещё здесь можно вдохновиться эффектами и решениями сложнейших задач.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
В Apple удалили 118 000 аккаунтов разработчиков

📎 В большом отчёте Apple опубликовали целый ряд интересных статистических фактов.

🛑 За 2023 год более 100к аккаунтов были закрыты, при этом 91 000 соглашений были отклонены по причине мошенничества.

👨‍💻 Команда App Review (более 500 сотрудников) просматривает около 132 500 приложений в неделю, при этом 192 000 разработчиков впервые выпустили хотя бы один продукт за прошлый год.

😑 Каждый 10-й отзыв в сторе оказался фейковым (было удалено более 100 миллионов рейтингов из миллиарда).

Также за последние 4 года в Apple остановили потенциально мошеннические операции на сумму более $7 млрд (заблокировали 14 миллионов украденных кредитных карт).

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
DispatchQueue: практические вопросы

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

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

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

Заодно можно проверить и знания и по Dispatch Barrier.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM