en
Feedback
iOS Dev

iOS Dev

Open in Telegram

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

Show more
7 877
Subscribers
-424 hours
+27 days
-5430 days
Posts Archive
iOS Dev
7 877
Игра «Жизнь» Конвея: реализация на Swift Вообще, автомат Конвея, пожалуй, самый известный клеточный автомат первого порядка. Когда я был студентом при изучении плюсов одной из возможных курсовых была её реализация (вряд ли сейчас что-то кардинально изменилось при выборе тем). 👩‍🎓 Впервые она была описана в 1970 году британским математиком Джоном Конвеем и обладала следующими правилами: 1️⃣ Любая живая клетка с менее чем двумя живыми соседями погибает, как при недонаселении. 2️⃣ Любая живая клетка с двумя или тремя живыми соседями продолжает жить в следующем поколении. 3️⃣ Любая живая клетка с более чем тремя живыми соседями умирает, как при перенаселении. 4️⃣ Любая мертвая клетка с ровно тремя живыми соседями становится живой клеткой, как при размножении. Как видите, правила довольно понятны и логичны. 📖 А вот тут автор даже реализовал этот алгоритм на Swift. И хотя он сам сообщает, что можно прокачать игру, например, добавив стартовые шаблоны или механизм для изменения скорости, посмотреть точно есть на что. 📖 И, к слову, если вы хотите узнать больше, и углубиться в вариации, то в мощнейшей статье с хабра можно почитать, что будет, если соединить клеточные автоматы с генетическим алгоритмом. 😃 iOS Dev

iOS Dev
7 877
Удаление данных в SwiftData Существует как минимум три способа удалить данные при использовании SwiftData. 📖 В этом обзоре р
Удаление данных в SwiftData Существует как минимум три способа удалить данные при использовании SwiftData. 📖 В этом обзоре рассматриваются эти варианты и неочевидные моменты. Другие посты на тему: 1️⃣ Отслеживание изменений данных в SwiftData. 2️⃣ Архитектурный дизайн SwiftData и возможности миграции. 3️⃣ Вопросы и ответы про SwiftData и CoreData. 😃 iOS Dev

iOS Dev
7 877
Создание прогресс-бара в ретро-стиле с использованием CALayers Создание своих компонентов может быть увлекательно, но практически всегда сопряжено с рядом сложностей. 😎Наверняка, каждый из нас проектировал и внедрял в проекты те или иные контролы, а некоторые и десятки раз. Если вам нравится использовать UIKit, но вы все еще не знаете, как работать с CALayers, эта статья будет вам полезна. 📖 В ней автор указывает на типичные проблемы, связанные с версткой, анимацией и рисованием, а также предлагает ряд интересных идей, которые могут помочь. 🛠 Окончательный вид и код проекта можно посмотреть здесь. 😃 iOS Dev

iOS Dev
7 877
AsyncStream на реальных примерах: работа с Apple Photos 🧑‍💻 AsyncStream позволяет ожидать последовательность элементов, воз
AsyncStream на реальных примерах: работа с Apple Photos 🧑‍💻 AsyncStream позволяет ожидать последовательность элементов, возвращая их, когда они будут готовы. Apple обычно показывает хорошие способы работы с асинхронным API, но иногда бывают моменты, которые моно улучшить. Например, автор следующей статьи переосмыслил использование PHAsset.fetchAssets с помощью AsyncStream. 📖 Вот тут можно посмотреть на этот подход и граничные кейсы. 😃 iOS Dev

iOS Dev
7 877
На следующей неделе я ухожу в отпуск, и поэтому приготовил для вас сюрприз ❤️ 🔨 Что, если бы Xcode показывал нам статистику
+9
На следующей неделе я ухожу в отпуск, и поэтому приготовил для вас сюрприз ❤️ 🔨 Что, если бы Xcode показывал нам статистику по итогам года? Или, например, мы знали, сколько крашей пофиксили? ☕️ А сколько минут собирались наши проекты? 🤩 Я представил эту альтернативную реальность в стиле Spotify (или других сервисов, как вам удобнее), и делюсь итогами года iOS-разработчика с вами! 😃 iOS Dev

iOS Dev
7 877
Как и когда использовать Lazy Collections в Swift ➡️ Такие коллекции откладывает вычисления до тех пор, пока они действительн
Как и когда использовать Lazy Collections в Swift ➡️ Такие коллекции откладывает вычисления до тех пор, пока они действительно не понадобятся. И хотя это может быть полезно (например, можно предотвратить выполнение ненужной работы, если элементы в итоге так и не будут запрошены), но у них есть и недостатки. Условно, если у нас 5 элементов, вряд ли мы получим существенный выигрыш в производительности. Поэтому решение об использовании таких коллекций должно приниматься индивидуально в каждом случае. 📖 А о преимуществах и недостатках можно прочесть здесь. 😃 iOS Dev

iOS Dev
7 877
Скрытая особенность typealias ⭐️ Скорее всего, при разработке вы периодически используете typealias. Также как при работе со структурами или классами, мы можем объявлять дженерик-аргументы в typealias (и даже можем ограничить использование только числовых типов, например, с использованием Numeric). 📖 В этой статье разбираются возможности typealias на реальных примерах. 😃 iOS Dev

iOS Dev
7 877
❄️ Невероятно красивый зимний эффект в iOS-приложении 📖 Marcus Eckert пишет, что для реализации использовал кастомизацию всего по чуть-чуть, но основная логика написана с использованием на cpp+metal. 😃 iOS Dev

iOS Dev
7 877
AsyncPhoto и пример использования для отображения больших фотографий ℹ️ AsyncImage нужен, как и следует из названия, для того
AsyncPhoto и пример использования для отображения больших фотографий ℹ️ AsyncImage нужен, как и следует из названия, для того, чтобы асинхронно грузить и отображать изображения. Можно, например, создать кастомный плейсхолдер и управлять загруженной картинкой с помощью параметра content. 📖 В этом материале приводится пример использования AsyncImage в случаях, когда нужно уменьшить изображение (в том числе и для экономии памяти). 😃 iOS Dev

iOS Dev
7 877
❗️Новые требования Apple к сторонним SDK и Privacy Manifests Начиная с весны 2024 года, разработчики будут обязаны включать в
❗️Новые требования Apple к сторонним SDK и Privacy Manifests Начиная с весны 2024 года, разработчики будут обязаны включать в приложения новые манифесты и подписи для SDK, которые могут влиять на конфиденциальность пользователей. Подписи будут нужны, даже если SDK (пока список от Apple как на скриншоте выше) включены в качестве зависимостей. Любая версия и SDK, которые переупаковывают вышеуказанные, также включены в требования. Для каждого вида данных понадобится словарь NSPrivacyCollectedDataType с ключами: NSPrivacyCollectedDataType, NSPrivacyCollectedDataTypeLinked, NSPrivacyCollectedDataTypeTracking и NSPrivacyCollectedDataTypePurposes. Все значения должны соответствовать этому списку. Если будут указаны иные варианты, то Xcode не сможет корректно генерить отчёт о конфиденциальности. 😃 iOS Dev

iOS Dev
7 877
Искусство работы с Corner Radius: пара трюков и хитростей ℹ️ Работа со скруглениями едва ли не самая распространенная штука п
Искусство работы с Corner Radius: пара трюков и хитростей ℹ️ Работа со скруглениями едва ли не самая распространенная штука при работе над дизайном приложений. Базовых скруглений легко добиться, но при работе с несколькими составляющими могут возникнуть трудности. 📖 В этой статье David Yang делится некоторыми несложными шагами при работе с таким дизайном. 😃 iOS Dev

iOS Dev
7 877
От viewWillAppear к viewIsAppearing: адаптация пользовательского интерфейса На WWDC23 Apple представила важное дополнение к ж
От viewWillAppear к viewIsAppearing: адаптация пользовательского интерфейса На WWDC23 Apple представила важное дополнение к жизненному циклу UIViewController: viewIsAppearing. По факту это революционное решение помогает создавать более отзывчивые и динамичные интерфейсы. 📖 На этих несложных примерах можно понять, почему этот момент стратегически важен, и как именно можно использовать его в приложениях. 😃 iOS Dev

iOS Dev
7 877
Pow - библиотека для создания эффектов в iOS-приложениях теперь в открытом доступе Moving Parts совместно с Emergetools (создателями и других крутых продуктов) приняли решение открыть исходный код библиотеки эффектов Pow. 🤩 К слову, уже 2 100 звёзд на GitHub. 🛠 Посмотреть на доступные эффекты и примеры использования в проектах можно здесь. 😃 iOS Dev

iOS Dev
7 877
Formatters в Swift: их больше, чем вы думаете! Если у вас есть небольшой опыт работы с iOS, то вы наверняка использовали и Da
Formatters в Swift: их больше, чем вы думаете! Если у вас есть небольшой опыт работы с iOS, то вы наверняка использовали и DateFormatter, и NumberFormatter. Но пул форматтеров намного шире. Например, при работе с файлами (особенно, когда требуется красиво показать размер) сложно обойтись без ByteCountFormatter 📖 А в этом материале Винсент делится и другими видами, которые могут пригодиться в нашей работе. 😃 iOS Dev

iOS Dev
7 877
Шаринг токенов между iOS/macOS/watchOS с помощью iCloud Keychain Конечно, для этого нужно включить саму опцию Keychain Sharin
Шаринг токенов между iOS/macOS/watchOS с помощью iCloud Keychain Конечно, для этого нужно включить саму опцию Keychain Sharing, при этом не забыв о важности одной и той же Keychain Group. 📖 А вот тут можно узнать о дополнительных шагах в коде и необходимости дополнительных ключей kSecAttrAccessGroup и kSecAttrSynchronizable. Кстати, в канале есть пост и о способах обмена данными между своими приложениями. 😃 iOS Dev

iOS Dev
7 877
Оператор guard в Swift, примеры кода и варианты использования При написании кода мы постоянно задаем различные условия, необх
Оператор guard в Swift, примеры кода и варианты использования При написании кода мы постоянно задаем различные условия, необходимые для продолжения работы того или иного метода. ⭐️ Необходимыми условиями могут быть либо булево значение (и проверка его на true), либо работа с опциональными значениями (они не должны быть nil). И конечно, для этого нам всегда поможет guard, однако у нас в арсенале существует и if let. 📖 В этой статье разбираются такие ситуации и даётся ответ, когда без guard не обойтись. Кстати, в обновлении телеги появились кастомные реакции у канала, и если вы хотите увидеть какие-то необычные, то вы знаете, как помочь. 😃 iOS Dev

iOS Dev
7 877
Импорт макросов Swift без использования Swift Package Manager ➡️ Макросы Swift, которые появились в Swift 5.9 — отличный спос
Импорт макросов Swift без использования Swift Package Manager ➡️ Макросы Swift, которые появились в Swift 5.9 — отличный способ сократить количество бойлерплейт-кода. В подавляющем большинстве случаев для поддержки макросов используется SPM, но существуют и другие сценарии. Например, когда макросы требуются в либах CocoaPods или нужно обфусцировать сорсы приложения (хотя это бывает редко). 📖 Как раз для таких случаев существует опция импорта макросов в проект Xcode в виде бинарника. 😃 iOS Dev

iOS Dev
7 877
Работа с UIGestureRecognizer: создание, обработка состояний и работа с несколькими одновременно 🗒 Обработка жестов в приложе
Работа с UIGestureRecognizer: создание, обработка состояний и работа с несколькими одновременно 🗒 Обработка жестов в приложениях на iOS — важнейшая часть разработки. Касания, повороты или вращения, безусловно, предоставляют важнейший опыт взаимодействия с нашими продуктами для пользователей. Конечно, иногда нам достаточно только нажатий кнопок (без каких-то размышлений, что распознавать и без учета потенциальных конфликтов). Но для всех сколь угодно сложных случаев (которых у нас обычно 99% при реализации) поможет UIGestureRecognizer. 📖 В этом вводном материале можно познакомиться с наиболее частыми ситуациями, касающихся (как вам такая игра слов) обработки жестов пользователей. 😃 iOS Dev