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

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

#ios #mobile #swift
加入频道
Как избежать распространенных ошибок при переходе с UIKit на SwiftUI

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

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

📖 В этой статье показан пример рефакторинга SwiftUI. Также в процесе разбираются ошибки, которые допускают разработчики, уже привыкнувшие к UIKit.

О других важных подходах при разработке можно прочитать вот тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн «Репозиторий» в Swift: разбор и примеры кода

🐱 Шаблон проектирования «Репозиторий» действует как промежуточный уровень между бизнес-логикой приложения и хранилищем данных.

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

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

Это создает четкое разделение задач и значительно упрощает тестирование.

Например, мы можем юзать резервное хранилище в памяти для тестов (при использовании Core Data в проде).

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

Делюсь двумя вариантами применения паттерна:

📖 Шаблон с примерами кода.
📖 Core Data + Repository pattern. Детали реализации.

🍏 А на бусти можно познакомиться с двумя большими разделами по паттернам:

🔗 Структурные паттерны проектирования.

🔗 Порождающие паттерны проектирования (с примерами на Swift).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Реализация навигации в SwiftUI с помощью NavigationPath и NavigationDestination

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

До появления NavigationPath существовали некоторые способы решения этой проблемы, но не слишком удобные.

📖 В этом посте рассматриваются особенности NavigationPath (доступной с iOS 16), принципы работы и отличия от UINavigationController в UIKit.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 У меня День Рождения

[-Onone]

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

[-Osize]

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

[-O]

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

🐾 Спасибо вам за вашу оценку постов, комментарии и за то, что вы здесь.

⬇️One more thing (in progress...).
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему загрузка пакетов с помощью Swift Package Manager занимает слишком много времени?

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

Суть проблемы тут.

Но почему?

На вопрос ответил инженер по инфраструктуре GitHub (обратите внимание на дату комментария), схожая проблема была и в Cocoapods:

Поверхностное клонирование по какой-то причине обходится намного дороже, чем клонирование всего репозитория. К тому же GitHub ограничивает скорость в таких репах, что приводит к значительному увеличению времени.

Хуже того, фетч может вообще завершиться ошибкой по таймауту.

Так в чем же заключается решение?

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

Например airbnb/lottie применила этот подход и уменьшила размер своего репозитория с +300 МБ до менее 500 КБ!

Signal сделал то же самое: отсюда OneSignal-iOS-SDK пришли к оптимизированной версии OneSignal-XCFramework.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Что означает spacing = nil в SwiftUI?

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

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

Из документации Apple:

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

Но, как оказывается, это значение не фиксировано.

📖 В этой статье объясняется, что на самом деле означает значение nil по умолчанию для параметра Spacing.

Кроме того, рассматриваются и другие аспекты, связанные с этим свойством.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Подготовка к собеседованиям: Swift Concurrency

Подготовил вопросы, которые помогут новичкам и опытным разработчикам, знакомым с концепциями параллелизма и заинтересованным в изучении синтаксиса и API Swift Concurrency.

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

Доступ можно получить здесь или тут сразу на год.

Больше важных тем:
🔗 Блок вопросов: многопоточность (и бонус)
🔗 Собеседования: вопросы на понимание кода
🔗 DispatchQueue: практические вопросы

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Как сделать иконку приложения анимированной?

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

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

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

📺 В формате видео вот тут.

🛠 Демо-проект (посмотреть и попробовать повторить) доступен на github. Напоминаю про этот пост, если захотите выложить в стор.

Больше крутых эффектов можно увидеть здесь или тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Объяснение использования @preconcurrency в Swift

Если включить -strict-concurrency для своих существующих проектов, то, вероятнее всего, при первой компиляции проекта Xcode выдаст множество предупреждений и/или ошибок.

Этого можно избежать с использованием @preconcurrency, можно использовать для:

📼 functions
📼 types
📼 protocols
📼 imports

С помощью @preconcurrency появляется возможность импортировать старые модули в новый код.

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Настраиваемая кнопка с разными состояниями в SwiftUI

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

SwiftUI в несколько раз упрощает создание переиспользуемой кнопки (и добавление конфигов).

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Протоколы в iOS: назначение и примеры

Даже при частом использовании протоколов начинающие разработчики могут не знать все особенности.

Например, Identifiable постоянно нужен в SwiftUI, но почему он обычно применяется для списков? Или CustomStringConvertible, который вполне подойдёт для более удобного дебага наших моделей.

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

🧠 Ах да, кстати, приложение уже в тестфлайте и вы можете получить ранний доступ.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос из приложения iOS IQ

🐱 Попробуйте догадаться, какая временная сложность у алгоритма для решения задачи «Ханойские башни».

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как справиться с секцией на написание кода?

Чтобы оценить кандидата, компании используют одну, либо сразу две итерации:

1️⃣ Лайв-кодинг. Нужно решить техническую задачу перед интервьюерами (от 0.5 до 1.5 часов).

2️⃣ Тестовое задание. Чаще всего на срок от одного-двух дней (иногда неделя).

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

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

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

Другие советы и задачи можно найти вот тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Алгоритмы: терминология и примеры

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

Например, если код использует один цикл, в котором мы проходим по всем n элементов входных данных, сложность O(n).
Если у нас есть два вложенных цикла, это O(n^2), и так далее.

📖 Конечно, в канале уже был пост про сложность алгоритмов.

Но бывают и далеко не самые очевидные моменты.

🧠 Пришло время новой секции в iOS IQ (добавлено две части, на теорию и на оценку кода). Есть и интерактивный формат в тестфлайте.

❤️Получить доступ можно сразу на год.

🐱 А в честь WWDC со скидкой 24% - вот тут (ссылка работает ровно неделю).

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
Начали с показа обновлений Vision OS 2

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

Пообещали упростить работу с технологиями, добавили новые API. Volumetric APIs, TabletopKit, Enterprise APIs.

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

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

Расширили работу с иконками на домашнем экране (в андроиде уже тысячу лет?).

😎 Иконки можно красить, привет, tintColor!

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

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

Для этого появится новый Control API.

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