es
Feedback
iOS Dev

iOS Dev

Ir al canal en Telegram

👨‍💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift

Mostrar más
7 877
Suscriptores
+124 horas
-17 días
-5130 días
Archivo de publicaciones
iOS Dev
7 877
Подборка крупных iOS-приложений с открытым кодом Большинство приложений с многомиллионной аудиторией не публикуют свои решения (по очевидным причинам, ведь это может помочь не только конкурентам, но и тем, кто хотел бы ими стать). Несмотря на это, некоторые по-настоящему масштабные проекты всё-таки выкладывают код. И это неплохой способ улучшить свои навыки (чтения кода, выбора архитектуры, поиска ответов на непростые вопросы). Вот несколько приложений в опенсорсе: 1️⃣ ProtonMail — популярный почтовый клиент для зашифрованных писем. 2️⃣ Signal — если вам нужно реализовать в своем приложении какие-то фичи для чата, этот проект может стать отличным источником вдохновения. 3️⃣ VLC — едва ли не самый популярный кроссплатформенный медиаплеер с открытым исходным кодом. 4️⃣ Kickstarter — платформа для краудфандинговых проектов. В этом приложении сделан выбор в пользу функционального подхода к программированию, который поддерживается за счет внедрения нескольких кастомных операторов. Возможно, вам будет интересно, как такой подход сработает на примере настолько масштабного приложения. 5️⃣ Telegram iOS — далеко не всегда очевидные подходы (и иногда сложночитаемые), но при этом сложно отрицать, что телеграм остаётся невероятно быстрым при большой нагрузке. А ещё здесь можно вдохновиться эффектами и решениями сложнейших задач. ✅Впрочем, это можно сделать ещё и в базе знаний и в боте. 😃 iOS Dev

iOS Dev
7 877
Swift Argument Parser Guide — создание собственных инструментов Руководство на данный момент состоит из трёх больших частей,
Swift Argument Parser Guide — создание собственных инструментов Руководство на данный момент состоит из трёх больших частей, которые позволят создать собственные утилиты (с разбором команд, аргументов и примерами). 1️⃣ Основы и аргументы. В первой части рассмотрены основы анализатора аргументов, способы подготовки инструментов, команды и подкоманды. 2️⃣ Флаги. В этой части вы узнаете о флагах и спецификациях имен на интерактивном примере. 3️⃣ Опции, проверка ввода и варианты завершения. В этой части описаны параметры (и их группы), проверка ввода и, наконец, варианты завершения работы (с кастомизацией текста ошибок и разбором ситуацией, когда что-то пошло не по плану). 😃 iOS Dev

iOS Dev
7 877
Сервис для тестирования универсальных ссылок в iOS Появилась специальная утилита для разработчиков, которая упрощает процесс
Сервис для тестирования универсальных ссылок в iOS Появилась специальная утилита для разработчиков, которая упрощает процесс тестирования универсальных ссылок (специальных URL-адресов, которые ведут на определенный контент в вашем приложении). Платформа запрашивает последнюю AASA-файла с серверов Apple и генерирует простую панель управления для тестирования. Например, можно увидеть, как ведет себя каждая ссылка, проверить настройку и выявить регрессии. А ещё неважно, сколько приложений поддерживает ваш AASA-файл (протестить можно их все). Бонус: платформа также сообщит, когда обновится кэшированная версия AASA-файла. 🔗 Проверить сервис можно здесь (я проверил, как фетчится для озона, авито, авиасейлс и ещё пары приложений). 📖 А документацию можно найти тут. Ранее в канале я писал, как проверять такие ссылки с помощью симулятора. 😃 iOS Dev

iOS Dev
7 877
Доклады с конференции try! Swift Tokyo 2024 try! Swift Tokyo — пожалуй, одна из самых популярных конференций по iOS в мире. Н
Доклады с конференции try! Swift Tokyo 2024 try! Swift Tokyo — пожалуй, одна из самых популярных конференций по iOS в мире. Надеюсь, однажды получится целенаправленно попасть и на неё, хотя и так в Японии есть что посмотреть. Среди представленных 20+ докладов я бы рекомендовал обратить внимание как минимум на эти: 📺 Type Inference в Swift (приоритет перегрузки, проблемы соответствия протоколу и почему компиляция кода может стать затратной) 📺 Code signing — разбор проблем. Кстати, в бусти я писал, что скрывают в себе сертификаты. 📺 File Provider на iOS и macOS и все связанные с ним возможности: 📺 Будущее совместимости C++: опыт переноса игры на Swift. 📺 Взаимодействие с сокетами и параллельная обработка в Swift (у меня это видео уже в избранном). 🔗 А весь плейлист доступен по этой ссылке. 🎆 Кстати, про интересные статьи — напоминаю, что есть ещё и доступ к премиум-контенту с помощью бота. 😃 iOS Dev

iOS Dev
7 877
Sticker Wall - Создание голографического эффекта в SwiftUI 🤩 Эффект на видео — линейный градиентный слой, который меняет свои значения в зависимости от относительного положения наклона и вращения девайса. В этом прототипе каждый стикер — это View (и для каждого свои значения угла наклона, поворота, CMMotionManager и таймеры), что приводило к перегреву девайса при 99%-ной загрузке процессора. Поэтому были приняты решения для оптимизации: 1️⃣ Перенести весь код, связанный с движением, в единственный объект ObservableObject. 2️⃣ Использовать один таймер для всех изменений значений. 3️⃣ Запускать все изменения только один раз за цикл таймера. И хотя процессор всё равно показывает нагрузку в 45%, это уже лучше первоначальных результатов. 📖 Всю историю создания можно посмотреть тут. ✅А ещё больше эффектов - здесь. 😃 iOS Dev

iOS Dev
7 877
Небольшие изменения в iOS IQ Уже несколько месяцев я развиваю дополнительный источник знаний с необычными способами решения з
Небольшие изменения в iOS IQ Уже несколько месяцев я развиваю дополнительный источник знаний с необычными способами решения задач, алгоритмами, эффектами (🕺 ) и не только. За последнее время вы могли видеть эти посты: 🔗 Dispatch Barrier, потокобезопасность и почему слишком много очередей это плохо 🔗 Поведенческие паттерны в Swift: определение, использование, недостатки 🔗 Блок вопросов: многопоточность (и бонус) 🔗 Структурные паттерны проектирования в Swift 🔗 SwiftUI Layout Protocol: как работать с версткой в SwiftUI 🔗 Порождающие паттерны проектирования (с примерами на Swift) 🔗 Собеседования: вопросы на понимание кода И многое, многое другое. Сегодня я анонсирую новую возможность подписки с помощью бота, и в честь этого делюсь бонусом для новых подписчиков не только в нём, но и на бусти. 🍏 Воспользоваться скидкой можно здесь. А вот и обещанная подписка в боте (список того, что вы получите — тут). ✅ На месяц. ✅ На год (с большей выгодой). 😃 iOS IQ

iOS Dev
7 877
Вы, случайно, не мобильный разработчик? Тогда откуда для вас такой оффер? 18 и 19 мая пройдет Mobile Weekend Offer в Тинькофф
Вы, случайно, не мобильный разработчик? Тогда откуда для вас такой оффер? 18 и 19 мая пройдет Mobile Weekend Offer в Тинькофф. Для iOS- и Android-разработчиков с опытом от 3 лет. Вот что будет: — пройдете все этапы собеседования за выходные; — познакомитесь с командой; — если все хорошо, получите оффер на неделе. Дальше — будете решать масштабные финтех-задачи, развивать продукты для миллионов, пользоваться бенефитами и расти. Оставьте заявку до 15 мая Реклама. АО «Тинькофф Банк», ИНН 7710140679

iOS Dev
7 877
Эффект 3D-карусели в iOS 🎆 Джанум Триведи показал, как можно реализовать такое отображение в своём приложении. Чтобы показать физически точное искривление перспективы, он создал 3D-цилиндр и наложил изображения на его поверхность. Но если сами картинки не находятся на ScrollView, то как тогда получается такой эффект физики? На самом деле есть суперширокий, невидимый scrollview, который ловит жест прокрутки и сопоставляет его contentOffset с вращением 3D-модели. И уже после модель освещается рассеянным светом, что и создаёт естественным тени на краях диска (можно посмотреть в комментариях как это выглядит). 👨‍💻 Возможно, кто-то должен придумывать новые подходы для карусели раз в 10 лет. ➡️ Подпишитесь, чтобы увидеть более десятка крутых и необычных эффектов (вместе с реализацией). 😃 iOS IQ

iOS Dev
7 877
Xcode удалил весь список симуляторов, что случилось? Вчера (и возможно, позавчера) я вместе с коллегами столкнулись с интерес
Xcode удалил весь список симуляторов, что случилось? Вчера (и возможно, позавчера) я вместе с коллегами столкнулись с интересным поведением внутри нашей среды разработки. Скорее всего и многие из вас тоже. При этом перезапуск Xcode вряд ли помог, а вот полный ребут - да, так что же случилось? Я провёл небольшое расследование. Пару дней назад система защиты macOS от вредоносного ПО XProtect получила обновление 132, которое обнаружило ложное срабатывание в образе диска с симулятором и пыталось его устранить, и именно это вызывало дроп всего списка симуляторов. Вышло silent-обновление 133 (скорее всего оно уже применилось, но если нет - проверьте обновления в системе). Ошибку можно было заметить и без обновления Xcode, и даже при скачивании симулятора ничего бы не поменялось (хотя одним из решений было юзать команду sudo killall -9 http://com.apple.CoreSimulator.CoreSimulatorService). Так что и Apple иногда тестируют на проде 📞. Подробнее, если вас зацепило, и вам тоже интересно, можно прочитать вот тут, тут и здесь. 😃 iOS Dev

iOS Dev
7 877
Полезная информация по добавлению Privacy Manifests 👨‍💻 Май уже начался, и это означает, что теперь все билды приложений, которые мы отправляем на проверку, должны содержать новые манифесты (при условии использования соответствующих API). В этом посте постарался объединить доступную инфу, которая минимизирует траты времени на внедрение новых требований Apple: 1️⃣ Официальная документация по использованию манифестов. 2️⃣ Скрипты для поиска возможного использования такого API на github. 3️⃣ Онлайн-помощник для создания манифестов. 4️⃣ Две больших русскоязычных статьи с разбором (на хабре и на sparrowcode). 😃 iOS Dev

iOS Dev
7 877
Dispatch Barrier, потокобезопасность и почему слишком много очередей это плохо Параллельные и последовательные очереди помога
Dispatch Barrier, потокобезопасность и почему слишком много очередей это плохо Параллельные и последовательные очереди помогают нам управлять выполнением задач, а вместе с этим позволяют нашим приложениям работать быстрее, эффективнее и с улучшенной отзывчивостью. Мы можем легко создавать очереди, используя класс DispatchQueue, который построен на основе GCD. 🔒 Dispatch Barrier представляет собой механизм синхронизации задач в очереди. Если по дефолту очередь работает параллельно, то после добавления флага .barrier такая задача будет отложена, пока не выполнятся все остальные. Уже после этого очередь выполнит нашу задачу, помеченную барьером, самостоятельно, и вернётся к обычному режиму работы. 🍏 В iOS IQ я добавил мощный материал, который поможет разобраться с барьерами на примерах. Постарался вынести не только плюсы, но и возможные минусы чрезмерного использования, и почему оптимизация может оказаться обманчивой. А ещё там есть несколько десятков вопросов, доступных уже сейчас. ➡️ Подписаться можно здесь. 😃 iOS Dev

iOS Dev
7 877
Создание приложения-чата, используя StreamChat SDK и SwiftUI 🛠 SDK на Github включает в себя приличный набор высокопроизводи
Создание приложения-чата, используя StreamChat SDK и SwiftUI 🛠 SDK на Github включает в себя приличный набор высокопроизводительных и настраиваемых компонентов интерфейса. 📖 А в этой статье приводится пример настройки (около 100 строк кода на полностью рабочее приложение). Добавлю, что SDK и пример приложения позволят познакомиться с чатом, но при собственной реализации будут ожидать совсем другие сложности. Например, как приложение будет справляться с сотнями сообщений в секунду (поверьте, бывает и такое), и как при этом будет себя вести интерфейс. Впрочем, это совсем другая история😎 😃 iOS Dev

iOS Dev
7 877
Эффективный способ загрузки больших изображений в основном потоке В подавляющем большинстве случаев нам подойдёт вариант: let
Эффективный способ загрузки больших изображений в основном потоке В подавляющем большинстве случаев нам подойдёт вариант: let image = UIImage(named: "big-image") imageView.image = image Но вот если картинка действительно крупная, то это может визуально подвесить приложуху на какое-то время. Особеннно это проявится, например, при работе с коллекциями. В таком случае можно справедливо обратиться к документации (и к совету Винсента), в которых говорится о том, что всё-таки есть ещё один способ. 🐱 prepareForDisplay декодирует нашу картинку в фоновом потоке, и уже после этого можно использовать результат из completionHandler. Важно не забыть вернуться в основной поток, конечно же. Или использовать Task, если вы уже перевели (или переводите проект для Swift Concurrency). 🍏 Кстати, большое количество материалов в базе знаний поможет быстрее разобраться со Swift Concurrency. 😃 iOS Dev

iOS Dev
7 877
Подробный разбор модификаторов Overlay и Background в SwiftUI В инструментарии SwiftUI overlay и background играют незамениму
Подробный разбор модификаторов Overlay и Background в SwiftUI В инструментарии SwiftUI overlay и background играют незаменимую роль в различных сценариях разработки. 📖 В этой статье рассмотрены не только их уникальные атрибуты, но и разбираются фундаментальные отличия от ZStack, а также показаны примеры сценариев, для которых они предназначены. 🤩 А вот тут есть интерактивный помощник, в котором можно посмотреть отличия прямо в браузере. 😃 iOS Dev

iOS Dev
7 877
Погружение в макросы Swift Макросы Swift впервые были представлены на WWDC 23, и хотя это не новая концепция в программирован
Погружение в макросы Swift Макросы Swift впервые были представлены на WWDC 23, и хотя это не новая концепция в программировании в целом, она привнесла полезные опции для Swift-разработчиков. Они позволяют настраивать язык Swift в соответствии с нашими потребностями и распространять их среди других разработчиков без изменения кода компилятора. 📖 В этом разборе показаны принципы работы макросов, а также настройка и использование на простом примере. 🔗 Кстати, в канале есть и ещё несколько примеров создания. 😃 iOS Dev

iOS Dev
7 877
Так ли нужен MVVM для разработки SwiftUI-приложений? Автор следующей статьи показывает свою точку зрения, отличную от общепри
Так ли нужен MVVM для разработки SwiftUI-приложений? Автор следующей статьи показывает свою точку зрения, отличную от общепринятой. Но, конечно, на самом деле ни один паттерн или архитектура не может покрыть все потребности — всегда есть компромиссы. Именно поэтому важно знать и об альтернативных вариантах, чтобы принять правильное решение при разработке. 📖 В частности, в своем рассуждении он отвечает на следующие вопросы: 1️⃣ Что делать с тем, что логика будет во Views, ведь это плохая практика? 2️⃣ Как быть с тестированием без View Model? 3️⃣ Если это сработает с маленькими приложениями, то как быть с более крупными проектами? 🛠 Кстати, вот тут есть коллекция самых разных архитектур на Github. 🍏 А вот здесь есть множество примеров и разборов реализаций, их преимуществ и недостатков. 😃 iOS Dev

iOS Dev
7 877
Полезные материалы для подготовки к секции System Design В отличие от частей, затрагивающих алгоритмы и лайвкодинг, на секции проектирования нет понятия решил/не решил задачу. В канале вы можете найти пост, что именно этот раздел собеседований помогает определить более опытного разработчика. В iOS IQ я не только структурирую источники знаний, но и получаю ценнейшие комментарии от коллег, в том числе помогающие углубить некоторые направления. Сегодня я хотел бы поделиться частью источников для подготовки к System Design: 🔗 Пять видео по системному дизайну от разработчика, проходившего собесы в MANGA. 🔗 Собеседование на Senior-разработчика с Александром Зиминым, основной упор на System Design (открытое видео с канала Podlodka). 🔗 Разбор архитектурной секции с Mobius (в тегах не iOS, но это не главное). 🔗 Разбор собеседований по System Design от человека с опытом 300+ интервью с кандидатами на хабре. 🔗 Разбор проблем проектирования iOS-приложения на реальных примерах. ✅ Подписывайтесь на iOS IQ, чтобы посмотреть на сложности проектирования с разных точек зрения и узнать больше (а ещё там есть разбор других важных секций). 😃 iOS IQ

iOS Dev
7 877
Как использовать экспериментальные версии (и функции) Swift в Xcode? Если вы любите читать о том, что нового появилось в Swif
Как использовать экспериментальные версии (и функции) Swift в Xcode? Если вы любите читать о том, что нового появилось в Swift, или узнавать обо всех грядущих крутых новинках, часто хочется попробовать эти фичи самостоятельно. Иногда действительно придётся подождать, но часто в пропозалах можно встретить следующее: -enable-experimental-feature Это говорит нам о том, что если зайти в Swift непосредственно из main-ветки, можно протестить эту фичу, установив нужный флаг компилятора. Например, release/5.10 or release/6.0 показывает, что функция будет доступна только при использовании Swift из этой ветки. 📖 В этом материале можно почитать не только об установке альтернативного тулчейна для Xcode, но и об использовании экспериментальных фич. 😃 iOS Dev

iOS Dev
7 877
Поведенческие паттерны в Swift: определение, использование, недостатки В них включают паттерны проектирования, определяющие а
Поведенческие паттерны в Swift: определение, использование, недостатки В них включают паттерны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов. Например, с помощью паттерна Chain of Responsibility можно передавать запросы последовательно по цепочке (отсюда и название). А вот дальше каждый последующий обработчик решит, может ли он обработать запрос (или его нужно передать дальше). Паттерн Command превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций (так что популярные действий Undo во многих приложениях использует именно этот паттерн). Вообще, согласно банде четырёх к таким паттернам относятся: - Цепочка обязанностей. - Команда. - Интерпретатор. - Итератор. - Посредник. - Хранитель (он же memento). - Наблюдатель. - Состояние. - Стратегия. - Шаблонный метод. - Посетитель. Каждый их них представляет собой решение общей проблемы проектирования и может быть использован для создания более эффективных, удобные в обслуживании и масштабируемых приложений. 🍏 В iOS IQ уже разобраны некоторые из паттернов (с кодом, примерами использования, и полезными репозиториями, и пока что действует промо). ⬆️О структурных паттернах проектирования можно почитать тут. 😃 iOS IQ

iOS Dev
7 877
Четыре полезных сервиса для работы с JSON в Swift 1️⃣ quicktype.io — удобный сервис для создания моделей и сериализации JSON
Четыре полезных сервиса для работы с JSON в Swift 1️⃣ quicktype.io — удобный сервис для создания моделей и сериализации JSON (не только на Swift) с кучей опций и параметров. 2️⃣ SwiftyJSON — популярнейший репозиторий на GitHub для упрощения работы с JSON (22 000 звёзд). 3️⃣ jsonformatter.org — валидатор и конвертер для JSON. 4️⃣ jsoncrack.com — наглядная визуализация структуры json (есть ещё вот сервис, но он временно недоступен). 😃 iOS Dev