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

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

#ios #mobile #swift
加入频道
Понимание и повторение

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

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

Поэтому мне импонирует стиль профессионалов, стремящихся к practice first: стоит отталкиваться от задачи, от целей, от необходимости оптимизации, и только после этого следовать за алгоритмической составляющей.

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

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

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

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

Главное помнить, что правильно заданный вопрос это уже половина решения задачи.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
32🔥20💯137👍6❤‍🔥3🤝21👏1🎉1
А поделитесь книгами в комментариях, которые на ваш взгляд, необходимы для разработчика 🧠

Не только же банду четырёх читать.

При этом совсем необязательно это должна быть книга, напрямую связанная с IT (кругозор формируется благодаря широте взглядов).
8❤‍🔥12💯963👍2🔥1👏1🎉1
SwiftUI и Firebase: создание приложения «Напоминания»

📖
В этом пошаговом туториале показано, как с нуля можно создать to-do приложение, используя SwiftUI и возможности Firebase.

Обучение разбито на следующие разделы:

1️⃣
Создание простого интерфейса (и пример MVVM-архитектуры)

2️⃣
Создание кастомизируемых компонентов

3️⃣
Подключение и работа с Firebase (настройка проекта и локальное тестирование)

4️⃣
Хранение данных в Cloud (настройка, обновление и удаление данных)

5️⃣
Dependency Injection (для разных частей приложения)

6️⃣
Аутентификация пользователей (анонимные аккаунты, регистрация через Apple и линк аккаунтов)

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
111912👍9🔥3💯2👏1🎄1
The System Design Primer — огромная коллекция ресурсов для создания сложных систем

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

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

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

🛠 Фантастический ресурс на GitHub.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
619👍124💯32❤‍🔥2🔥2🎄2👏1
🎉 Apple только что заопенсорсили свою билд-систему

📖 Apple открыла исходный код swift-build — движка, используемого в Xcode! По сути, с его помощью выполняется сборка проектов и пакетов Swift, а также работает Swift Playground.

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

Ждём возобновления разработки AppCode?

P.S. Уже выкатили анонс roadmap (и приглашение поучаствовать в развитии) на официальном сайте.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
41🔥110👍1712🎉5👏4💯21🤩1
Value type и Reference type в Swift

Вопросы о value type/reference type могут быть, пожалуй, в 90% собеседований. Несмотря на то, что на уровне senior-разработчика я их не встречал, но в разных компаниях как известно разные подходы.

Типы в Swift можно разделить на две категории: первая - «value type», где каждый экземпляр хранит уникальную копию своих данных, обычно определяемую как struct, enum или tuple.

Вторая - «reference type», где экземпляры разделяют одну копию данных, а сам тип обычно определяется как класс.

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

Посмотреть на вопросы можно 💰 тут и ⭐️ тут.

А ещё вас ожидает:
➡️Вопросы на чтение кода
➡️Многопоточность
➡️DispatchQueue: практические вопросы
➡️Swift Concurrency
➡️Алгоритмы: терминология и примеры
➡️Память: ARC, side table, флаги, утечки


😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
915👍93🔥2💯21🏆1🤗1🎄1🆒1
Для чего нужны Preferences в SwiftUI — разбор примеров

Чаще всего для реализации двусторонней привязки используется @State и @Binding (для родительской и дочерней вью).

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

ℹ️ Например, если нужно передать состояние глубоко вниз по иерархии, может возникнуть антипаттерн prop drilling.

В таком случае могут помочь Preferences.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
810👍74💯3❤‍🔥11🔥1👏1
Основы работы с Core Image

Core Image это мощный фреймворк для анализа изображений и их дальнейшей обработки.

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

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

Кстати, в канале можно почитать про 5 способов изменить размер изображения (в том числе с помощью Core Image).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6127👍5💯4🔥3👏1🎉1
Реализация динамического градиента на основе среднего цвета изображения

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

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

🛠 Код проекта доступен здесь.

А ранее в канале можно было увидеть ещё один пример для плавного перехода между цветами.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1017👍94🔥4💯2🎄21👏1🤯1🏆1
Локализация iOS-приложения: советы, хитрости и лучшие практики

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

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

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

Напомню, что здесь можно почитать про механику работы со String Catalogs.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
916👍11🔥4👌43👏1💯1🤝1🆒1😎1
This media is not supported in your browser
VIEW IN TELEGRAM
Создаём эффекты как в Apple Invites

Буквально неделю назад вышло новое приложение от Apple. Если вы задумывались, как можно реализовать анимацию с параллаксом при скролле (или вновь узнать немного больше о шейдерах), то с радостью делюсь проектом с официального сайта.

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

📺 Реализация вдохновлена этой сессией с WWDC24.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
929👍17🔥11❤‍🔥3👌2🎄211🎉1
Умение доносить свои мысли

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

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

Поверьте, всегда можно отличить практика от того, кто это имитирует.

Всегда можно отличить знание от повторения.

Практикуйтесь в технической части. Решайте сложные задачи.

Формируйте собственное мнение.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
39❤‍🔥32🔥15💯10👍96🤝4
🎆 Вышло новое расширение Visual Studio Code для Swift

📖 В официальном блоге Apple написали о ещё одном важнейшем шаге по экспансии Swift.

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

Для тех, кто уже юзает VS Code, переход должен быть плавным.

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

We believe this is an important step in continuing to enable a healthy package ecosystem where developers can rely on a consistent, polished development experience — no matter what IDE they’re using or platform they’re targeting. We’ll be sharing more details about this work on the Swift forums, and we’re looking forward to hearing others’ feedback!


😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1833👍155❤‍🔥32🔥2🎉2👌1💯1🎄1
This media is not supported in your browser
VIEW IN TELEGRAM
Игра «Жизнь» Конвея: реализация c использованием MetalKit

📖 Пост про автомат Конвея (и даже пример реализации на Swift) уже был в нашем канале.

Эндрю Глейв показал, как можно сделать визуализацию с использованием vertex & fragment шейдеров.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1820👍137🔥4👏2👌2🎄2🎉1
🎉iOS IQ год, и вот что там доступно уже сейчас

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

🧠 Что вы получите, подписавшись сегодня:
➡️Вопросы на чтение кода
➡️Многопоточность
➡️DispatchQueue: практические вопросы
➡️Swift Concurrency
➡️Алгоритмы: терминология и примеры
➡️Память: ARC, side table, флаги, утечки


Кроме этого, читатели, которые давно читают канал, знают, что есть ещё и приложение-компаньон.

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

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

Все, кто подписан на любой уровень, уже получили доступ к обновлению в тестфлайте.

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

Специальное предложение уже доступно 💰 в бусти и ⭐️ прямо здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2121🎉86👍5🔥2🤩2🎄21🆒1
💸Динамика зарплат разработчиков во второй половине 2024 года

Objective-C всё ещё сохраняет лидирующую позицию с уровнем в 350к, Swift вплотную подобрался к 300 000.

🚀 Среди компаний лидеры: Авито, Иннотех, Раффайзен Банк и VK.

Медианная зарплата в IT — 180 000 ₽, это на 19% больше первого полугодия 2024.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1528👍7🔥63👏2💯2🎉1👌1
NSAttributedString: создание, редактирование и управление атрибутами

UILabel стоит больше, чем вы думаете — это не просто утверждение, а факт. Если вы работали с большим количеством стилей, то эта тема может быть очень близка. А когда мы говорим про что-то более производительное, нет иного варианта, кроме как уйти к Core Text.

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1721👍10🔥6💯32❤‍🔥2👏1🎉1🎄1
Жёсткие рамки или при чём тут бесконечный скролл

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

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

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

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

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

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
17💯1513👏6👍31❤‍🔥11🔥1🎉1🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
Реализация шейдера с презентации Apple для iPhone 16e

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

📖 Реализация доступна на GitHub.

📱 Оригинальный пост Стивена Хейни.

Кстати, вот тут, например, можно посмотреть на реализацию эффекта для Siri в iOS 18.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1121👍9🔥7💯2111👏1🎉1🎄1
Обновление вопросной секции для подготовки и проведения собеседований

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

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

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

🧠 Что вы получите, подписавшись сегодня:
➡️Вопросы на чтение кода
➡️Многопоточность
➡️DispatchQueue: практические вопросы
➡️Swift Concurrency
➡️Алгоритмы: терминология и примеры
➡️Память: ARC, side table, флаги, утечки
А также доступ в закрытый чат, ранние релизы приложения iOS IQ, тонну теории и многое другое.


Специальное предложение уже доступно 💰 в бусти и ⭐️ прямо здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2819👍12🏆7🔥311👌1💯1🆒1
Что происходит, когда вы перемещаете файл в git?

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1514❤‍🔥8👍53👌3🔥2👏1🎉1💯1