Паттерны проектирования в iOS на основе банды четырёх
Я добавил 23 паттерна проектирования (тех самых), которые часто используются при разработке программного обеспечения.
В ноушне они разделены на соответствующие группы, также я описал преимущества для iOS и описал, какие проблемы может решать каждый из них.
Кстати, к некоторым уже добавил примеры кода и разобрал, почему синглтон это далеко не всегда плохо, и как именно можно ускорить разработку при корректном выборе архитектуры.
✅ Получить доступ можно здесь.
😃 iOS Dev
Я добавил 23 паттерна проектирования (тех самых), которые часто используются при разработке программного обеспечения.
В ноушне они разделены на соответствующие группы, также я описал преимущества для iOS и описал, какие проблемы может решать каждый из них.
Кстати, к некоторым уже добавил примеры кода и разобрал, почему синглтон это далеко не всегда плохо, и как именно можно ускорить разработку при корректном выборе архитектуры.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как улучшить навыки чтения кода?
Чтение кода — одна из наших прямых обязанностей. Этот опыт может быть не всегда приятен (а для кого-то может и скучен, или даже сразу навешивается штамп, что код плохой из-за отсутствия навыка понимания, что внутри).
Особенно это применимо к чужому коду. Чаще всего нам хочется сосредоточиться на написании кода, а не на его чтении, хотя чтение - также важный (если не более важный навык).
Вот несколько способов, которые помогут понять и повысить умение читать и разбираться в чужом коде:
1️⃣ Просто попробуйте его запустить (пожалуй, один из самых надёжных вариантов понять, что происходит внутри).
2️⃣ Постарайтесь найти высокоуровневую логику. От общего к частному (но не наоборот).
3️⃣ Старайтесь чаще использовать возможности Xcode (в том числе и шорткаты).
4️⃣ Не останавливайтесь на каких-то базовых знаниях, следите за развитием самого языка.
5️⃣ Читайте больше о паттернах проектирования.
6️⃣ Не бойтесь код-ревью. Комментарии вашей команды помогут развиваться обеим сторонам.
7️⃣ Временный рефакторинг — один из способов. Мы можем начать с какого-то длинного метода, разбить его на несколько частей (если необходимо) и продолжить дальше. А гит нам поможет, если что-то пойдет не так.
😃 iOS Dev
Чтение кода — одна из наших прямых обязанностей. Этот опыт может быть не всегда приятен (а для кого-то может и скучен, или даже сразу навешивается штамп, что код плохой из-за отсутствия навыка понимания, что внутри).
Особенно это применимо к чужому коду. Чаще всего нам хочется сосредоточиться на написании кода, а не на его чтении, хотя чтение - также важный (если не более важный навык).
Вот несколько способов, которые помогут понять и повысить умение читать и разбираться в чужом коде:
1️⃣ Просто попробуйте его запустить (пожалуй, один из самых надёжных вариантов понять, что происходит внутри).
2️⃣ Постарайтесь найти высокоуровневую логику. От общего к частному (но не наоборот).
3️⃣ Старайтесь чаще использовать возможности Xcode (в том числе и шорткаты).
4️⃣ Не останавливайтесь на каких-то базовых знаниях, следите за развитием самого языка.
5️⃣ Читайте больше о паттернах проектирования.
6️⃣ Не бойтесь код-ревью. Комментарии вашей команды помогут развиваться обеим сторонам.
7️⃣ Временный рефакторинг — один из способов. Мы можем начать с какого-то длинного метода, разбить его на несколько частей (если необходимо) и продолжить дальше. А гит нам поможет, если что-то пойдет не так.
Please open Telegram to view this post
VIEW IN TELEGRAM
Собеседования: вопросы на понимание кода
Я считаю затронутую тему одну из важнейших в разработке.
Поэтому я наполняю базу интересными и необычными вопросами, проверяющими навык чтения кода и поиск ошибок в нём.
Задачи на разный уровень. Есть как несложные, так и заставляющие задуматься и вспомнить особенности Swift.
✅ Вопросы доступны здесь.
😃 iOS Dev
Я считаю затронутую тему одну из важнейших в разработке.
Поэтому я наполняю базу интересными и необычными вопросами, проверяющими навык чтения кода и поиск ошибок в нём.
Задачи на разный уровень. Есть как несложные, так и заставляющие задуматься и вспомнить особенности Swift.
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация памяти для приложения SwiftUI + Core Data
Несмотря на использование lazy containers в SwiftUI и механизмы оптимизации памяти Core Data, по мере увеличения сложности и количества вьюх (например, микса текста и картинок) потребление памяти будет увеличиваться.
С свою очередь, это может привести к крашу.
В материале ниже показано, как можно оптимизировать память для приложения, в изначальном кейсе использующего 1,6 ГБ памяти для отображения 100 элементов данных.
В процессе также можно узнать, как можно работать с сотнями таких элементов и оставаться в рамках всего 200 МБ.
📖 Прочитав статью, можно получить больше деталей о жизненном цикле вложенных вьюх, свойствах управляемых объектов и работе с кэшем.
🛠 Код проекта доступен здесь.
✅ А вот тут есть советы по работе с лентой картинок и причины, почему память может увеличиваться быстрее, чем хотелось бы.
😃 iOS Dev
Несмотря на использование lazy containers в SwiftUI и механизмы оптимизации памяти Core Data, по мере увеличения сложности и количества вьюх (например, микса текста и картинок) потребление памяти будет увеличиваться.
С свою очередь, это может привести к крашу.
В материале ниже показано, как можно оптимизировать память для приложения, в изначальном кейсе использующего 1,6 ГБ памяти для отображения 100 элементов данных.
В процессе также можно узнать, как можно работать с сотнями таких элементов и оставаться в рамках всего 200 МБ.
📖 Прочитав статью, можно получить больше деталей о жизненном цикле вложенных вьюх, свойствах управляемых объектов и работе с кэшем.
🛠 Код проекта доступен здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Практические решения проблем с помощью Swift Concurrency
Swift Concurrency может быть довольно непростым в использовании.
Matt Massicotte задокументировал и поделился своими решениями и сложностями, с которыми можно столкнуться при работе со Swift Concurrency:
1️⃣ Создание асинхронного контекста.
2️⃣ Использование протоколов.
3️⃣ Изоляция.
4️⃣ Структурированный параллелизм.
5️⃣ Использование библиотек, не предназначенных для параллелизма.
6️⃣ Совместимость.
🐱 Напомню, что тут есть несколько важных советов, которые помогут разобраться не только в основах, но и в подводных камнях тестирования.
😃 iOS Dev
Swift Concurrency может быть довольно непростым в использовании.
Matt Massicotte задокументировал и поделился своими решениями и сложностями, с которыми можно столкнуться при работе со Swift Concurrency:
1️⃣ Создание асинхронного контекста.
2️⃣ Использование протоколов.
3️⃣ Изоляция.
4️⃣ Структурированный параллелизм.
5️⃣ Использование библиотек, не предназначенных для параллелизма.
6️⃣ Совместимость.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как уменьшить размер приложения с помощью динамических фреймворков
Даже крупнейшие приложения iOS в App Store допускают ошибки и нарушают D.R.Y. путём копирования целых модулей.
Например, Hyundai дублируют каталог assets (который в итоге добавляется в приложение 3 раза).
Одно из решений: для модулей, разделяемых между таргетами, можно подключать их как динамические фреймворки вместо статических библиотек.
Но на практике — особенно если приложение юзает современную многомодульную архитектуру с применением SPM — не совсем очевидно, как динамически связывать модули.
📖 Джейкоб Бартлетт в гостевом посте для EmergeTools рассматривает, что можно сделать и как это повлияет на общее время запуска.
🛠 Код проекта можно посмотреть на github.
😃 iOS Dev
Даже крупнейшие приложения iOS в App Store допускают ошибки и нарушают D.R.Y. путём копирования целых модулей.
Например, Hyundai дублируют каталог assets (который в итоге добавляется в приложение 3 раза).
Одно из решений: для модулей, разделяемых между таргетами, можно подключать их как динамические фреймворки вместо статических библиотек.
Но на практике — особенно если приложение юзает современную многомодульную архитектуру с применением SPM — не совсем очевидно, как динамически связывать модули.
📖 Джейкоб Бартлетт в гостевом посте для EmergeTools рассматривает, что можно сделать и как это повлияет на общее время запуска.
🛠 Код проекта можно посмотреть на github.
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа со SwiftData: гайд по использованию
Хотя она и поддерживается только с iOS 17+, но осваивать и изучать её полезно.
Для новых проектов вы можете использовать SwiftData уже сейчас, в том числе основываясь на этой подборке.
А сегодня я хотел бы поделиться ещё одним набором советов по работе:
Настройка
🔗 Как создать Persistent Container SwiftData или получить к нему доступ
Моделирование
🔗 Как создать модель SwiftData в Swift
🔗 Как добавить структуры или перечисления в SwiftData
🔗 Как использовать Transient в SwiftData
Действия в SwiftData
🔗 Как получить все объекты SwiftData
🔗 Как получить конкретный объект из SwiftData
🔗 Как узнать, существует ли объект в SwiftData
Создание
🔗 Как добавить объект в SwiftData
Обновление
🔗 Как обновить объект в SwiftData
Удаление
🔗 Как удалить объект в SwiftData
🔗 Как удалить все объекты из SwiftData в Swift
Возможные ошибки и решение
🔗 Краш в SwiftData при попытке доступа к удаленному объекту
🔗 Как решить проблему No exact matches in call to instance method 'setValue'
😃 iOS Dev
Хотя она и поддерживается только с iOS 17+, но осваивать и изучать её полезно.
Для новых проектов вы можете использовать SwiftData уже сейчас, в том числе основываясь на этой подборке.
А сегодня я хотел бы поделиться ещё одним набором советов по работе:
Настройка
Моделирование
Действия в SwiftData
Создание
Обновление
Удаление
Возможные ошибки и решение
Please open Telegram to view this post
VIEW IN TELEGRAM
Большое обновление базы iOS IQ
➡️ Добавлен блок на умение читать и понимать код (и поиск ошибок).
Разобрал порождающие паттерны проектирования (с примерами на Swift):
✨ Абстрактная фабрика, строитель, прототип, синглтон, фабричный метод.
Затронул узкие, но важные темы для собеседований, например:
➡️ Для чего нужен DispatchSemaphore и как с его помощью решить проблему доступа к ресурсу.
➡️ Какая разница между raw и associated в enum?
Поделился своим опытом решения алгоритмических задач:
➡️ Блок средних задач с CodeRun (над некоторыми бился несколько дней).
И несколькими другими важными моментами (кстати, теперь есть и обновляемый changelog внутри).
🐱 Вступить можно вот тут.
😃 iOS IQ
Разобрал порождающие паттерны проектирования (с примерами на Swift):
Затронул узкие, но важные темы для собеседований, например:
Поделился своим опытом решения алгоритмических задач:
И несколькими другими важными моментами (кстати, теперь есть и обновляемый changelog внутри).
Please open Telegram to view this post
VIEW IN TELEGRAM
Рисование и анимация: контуры и фигуры в SwiftUI
У эппл есть туториал, который поможет добавить ачивки, например в случаях, если пользователи посещают достопримечательность из своего списка.
📖 В этом уроке рассматривается процесс создания такого элемента путем комбинирования различных контуров и фигур.
Кроме этого, можно поэкспериментировать с наложенным символом, варьируя количество повторений или меняя углы и масштаб.
⏳Отлично подойдёт новичкам (и по времени всего 25 минут). Код доступен здесь.
😃 iOS IQ • Другие эффекты
У эппл есть туториал, который поможет добавить ачивки, например в случаях, если пользователи посещают достопримечательность из своего списка.
📖 В этом уроке рассматривается процесс создания такого элемента путем комбинирования различных контуров и фигур.
Кроме этого, можно поэкспериментировать с наложенным символом, варьируя количество повторений или меняя углы и масштаб.
⏳Отлично подойдёт новичкам (и по времени всего 25 минут). Код доступен здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Генерация Swift-кода в (почти) реальном времени на базе нарисованного скетча
🎆 Дэниел Лейверс в демонстрации магистерской диссертации показал, на что способны современные технологии.
Можно набросать скетч помощью iPad-pencil и увидеть, как рядом с ним появляется реальный интерактивный интерфейс и Swift-код.
Приложение использует модель, заранее созданную на базе элементов UI, которая подается в алгоритм yolov5 и преобразуется в CoreML.
Это невероятно сложно и интересно.
📖 Саму диссертацию Дэниела можно прочитать здесь.
😃 iOS IQ • Другие эффекты
Можно набросать скетч помощью iPad-pencil и увидеть, как рядом с ним появляется реальный интерактивный интерфейс и Swift-код.
Приложение использует модель, заранее созданную на базе элементов UI, которая подается в алгоритм yolov5 и преобразуется в CoreML.
Это невероятно сложно и интересно.
📖 Саму диссертацию Дэниела можно прочитать здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня компания Apple объявила о том, что ежегодная Всемирная конференция разработчиков (WWDC) пройдёт в режиме онлайн с 10 по 14 июня 2024 года.
Разработчики и студенты смогут лично принять участие в специальном мероприятии в Apple Park в день открытия.
Количество мест будет ограничено, а подробную информацию о том, как подать заявку на участие, можно найти на сайте и в приложении для разработчиков Apple.
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый источник знаний от Apple (в дополнение к анонсу WWDC)
📺 Apple запустила новый канал Apple Developer на YouTube, который будет использоваться для обмена информацией о сессиях и мероприятиях WWDC, за которыми смогут следить разработчики.
Видеоролики уже сейчас организованы в плейлисты по темам: App Store, Swift, Spatial Computing, Safari (и будут доплняться другими разделами).
И это уже даёт представление, какой контент мы можем ждать на самой конфе.
😃 iOS IQ
📺 Apple запустила новый канал Apple Developer на YouTube, который будет использоваться для обмена информацией о сессиях и мероприятиях WWDC, за которыми смогут следить разработчики.
Видеоролики уже сейчас организованы в плейлисты по темам: App Store, Swift, Spatial Computing, Safari (и будут доплняться другими разделами).
И это уже даёт представление, какой контент мы можем ждать на самой конфе.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Воспроизведение анимации с заставки WWDC 2024
В iOS IQ я стараюсь рассматривать не только важные моменты о разработке, но и необычные анимации и эффекты.
Во вчерашней новости многие обратили внимание на сложный эффект в заставке.
🤩 А Дэниел Кунц уже успел реализовать его с помощью метал-шейдера.
🐱 Получить доступ к реализации других необычных эффектов можно здесь.
😃 iOS IQ
В iOS IQ я стараюсь рассматривать не только важные моменты о разработке, но и необычные анимации и эффекты.
Во вчерашней новости многие обратили внимание на сложный эффект в заставке.
Please open Telegram to view this post
VIEW IN TELEGRAM
SwiftUI Layout Protocol: как работать с версткой в SwiftUI
Хотя создавать базовый лэйаут несложно, существует множество вариантов, с которыми могут быть трудности.
Ниже будут рассмотрены не только типичные примеры для Layout, но и ряд важных моментов для формирования базы.
Весь материал состоит из двух больших частей, для удобства они сгруппированы по темам.
Первая часть:
➡️ Что такое Layout Protocol?
➡️ Разбор View Hierarchy.
➡️ Первая реализация лэйаута.
➡️ Выравнивание контейнеров.
➡️ Кастомные значения: LayoutValueKey.
➡️ Дефолтный Spacing.
➡️ Для чего нужен Spacer().
➡️ Layout Cache.
➡️ Переключение между лэйаутами с помощью AnyLayout.
➡️ Выводы.
Вторая часть:
➡️ Пусть начнётся веселье!
➡️ Кастомные анимации.
➡️ Двунаправленные кастомные значения.
➡️ Избежание зацикливания и крашей.
➡️ Рекурсивные лэйауты.
➡️ Композиция лэйаутов.
➡️ Еще один пример композиции: Интерполяция.
➡️ Использование binding-параметров.
➡️ Полезный инструмент отладки.
➡️ Заключительные мысли.
🐱 Больше разборов, примеров анимаций, алгоритмов и архитектур — доступно вот здесь.
😃 iOS IQ
Хотя создавать базовый лэйаут несложно, существует множество вариантов, с которыми могут быть трудности.
Ниже будут рассмотрены не только типичные примеры для Layout, но и ряд важных моментов для формирования базы.
Весь материал состоит из двух больших частей, для удобства они сгруппированы по темам.
Первая часть:
Вторая часть:
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый раздел в Develop in Swift от Apple
🤩 Тим Снит сегодня анонсировал новый набор туториалов для тех, кто только делает первые шаги в программировании с помощью Swift и SwiftUI.
Для понимания даже не нужен предварительный опыт написания кода в целом, так что эти материалы могут стать отличным стартом.
📖 Обучающие материалы Apple доступны здесь.
😃 iOS Dev • Разбор алгоритмов
Для понимания даже не нужен предварительный опыт написания кода в целом, так что эти материалы могут стать отличным стартом.
📖 Обучающие материалы Apple доступны здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
Важное обновление AppStore Connect, новый сервис Apple Crash +
В дополнение к последним изменениям, касающимся проверки доступа к API и необходимости работы с privacy manifests в эппл сегодня выкатили новую политику проверки приложений.
Теперь review team будет проверять приложения только 3 раза после каждого реджекта. Все остальные проверки доступны платно.
Доступно два вида подписки на Apple Crash +:
💵 $ 9.99 в месяц – Apple Crash + безлимитные проверки приложений после первого реджекта.
💵 $ 19.99 в месяц – все то же самое, что и в первой версии, но проверка приложений будет в течение часа после загрузки билда.
Видимо, изменения вызваны упущенной выгодой в новых альтсторах.
📺 Детально изменения доступны на новом канале эпла в YouTube.
😃 iOS Dev
В дополнение к последним изменениям, касающимся проверки доступа к API и необходимости работы с privacy manifests в эппл сегодня выкатили новую политику проверки приложений.
Теперь review team будет проверять приложения только 3 раза после каждого реджекта. Все остальные проверки доступны платно.
Доступно два вида подписки на Apple Crash +:
Видимо, изменения вызваны упущенной выгодой в новых альтсторах.
📺 Детально изменения доступны на новом канале эпла в YouTube.
Please open Telegram to view this post
VIEW IN TELEGRAM
TextView и что он скрывает
Уже более 9 лет Михаил Лапушкин работает над своим текстовым редактором. За это время он прошёл огромный путь, и в двух масштабных статьях делится тем, с какими подводными камнями ему пришлось столкнуться и, например, почему в приложении нет сторонних зависимостей.
📖 В первой части Михаил рассказывает свою увлекательную историю приложения (об архитектуре, релизах, дебаге и не только).
📖 А во второй делится хардкорными вещами: работой с атрибутами, стилями, перфомансом, математикой для отрисовки и многим другим.
😃 iOS Dev • 🐱 Узнать больше об архитектурах
Уже более 9 лет Михаил Лапушкин работает над своим текстовым редактором. За это время он прошёл огромный путь, и в двух масштабных статьях делится тем, с какими подводными камнями ему пришлось столкнуться и, например, почему в приложении нет сторонних зависимостей.
📖 В первой части Михаил рассказывает свою увлекательную историю приложения (об архитектуре, релизах, дебаге и не только).
📖 А во второй делится хардкорными вещами: работой с атрибутами, стилями, перфомансом, математикой для отрисовки и многим другим.
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание 3D-элементов для iOS и VisionOS
Meng To выпустил большое обучающее видео по работе со Spline.
📺 В этом видео можно узнать о следующих вещах:
1️⃣ Создание интерактивных 3D-сцен для приложений iOS и экспорт в Xcode 15+.
2️⃣ Работа над элементами для visionOS.
3️⃣ Пример создания 3D-иконок приложений и динамических анимаций интерфейса.
4️⃣ Расширенные возможности Spline, такие как частицы и физика для более реалистичных эффектов.
5️⃣ Введение в 3D-моделирование.
😃 iOS Dev
Meng To выпустил большое обучающее видео по работе со Spline.
📺 В этом видео можно узнать о следующих вещах:
1️⃣ Создание интерактивных 3D-сцен для приложений iOS и экспорт в Xcode 15+.
2️⃣ Работа над элементами для visionOS.
3️⃣ Пример создания 3D-иконок приложений и динамических анимаций интерфейса.
4️⃣ Расширенные возможности Spline, такие как частицы и физика для более реалистичных эффектов.
5️⃣ Введение в 3D-моделирование.
Please open Telegram to view this post
VIEW IN TELEGRAM
Шаринг файлов с кастомными типами в iOS
📁 Если вы планируете использовать не только стандартные типы файлов на iOS, но и заставить систему распознать файл и открыть его в вашем приложении, вы можете использовать типы документов и идентификаторы экспортируемых типов.
Это очень полезно при создании приложений для работы с документами, позволяющих экспортировать данные для резервного копирования или переноса между платформами.
📖 Вот тут есть инструкция с примером кода, как это сделать.
🐱 А в ноушне добавил пост, как можно переносить данные между своими приложениями в целом (около десятка вариантов).
😃 iOS Dev
Это очень полезно при создании приложений для работы с документами, позволяющих экспортировать данные для резервного копирования или переноса между платформами.
📖 Вот тут есть инструкция с примером кода, как это сделать.
Please open Telegram to view this post
VIEW IN TELEGRAM
Apple Store Ковент-Гарден (Лондон)
Посещение необычных или старых сторов эпл - одна из моих небольших традиций при поездках в другие страны.
📸 В этот раз делюсь фотосетом одного из флагманских магазинов компании в Великобритании.
Трехэтажный магазин, расположенный в здании, где раньше находился Rock Garden, привлекает огромное количество туристов.
Каждое помещение посвящено одной из линеек продукции Apple, а главный двор полностью отдан под большие дубовые столы с десятками планшетов iPad, которые покупатели смогут опробовать.
После оплаты они могут посетить «комнату настройки», где сотрудники Apple распакуют и настроят их новый гаджет.
Забавный факт, даже если у компании что-то пойдет не так, то на продаже этой недвижимости они смогут заработать невероятно крупную сумму денег, ведь адрес этого красивого здания - London, The Plaza, 1.
Около десяти лет назад в Ковент-Гардене было даже больше посетителей, чем на пятом авеню в Нью-Йорке!
Другие истории об эпл сторах:
🍏 Apple Store Marunouchi в Токио.
🍏 Apple Store в Купертино.
🍏 Apple Tower Theater в Лос-Анджелесе.
😃 iOS Dev
Посещение необычных или старых сторов эпл - одна из моих небольших традиций при поездках в другие страны.
📸 В этот раз делюсь фотосетом одного из флагманских магазинов компании в Великобритании.
Трехэтажный магазин, расположенный в здании, где раньше находился Rock Garden, привлекает огромное количество туристов.
Каждое помещение посвящено одной из линеек продукции Apple, а главный двор полностью отдан под большие дубовые столы с десятками планшетов iPad, которые покупатели смогут опробовать.
После оплаты они могут посетить «комнату настройки», где сотрудники Apple распакуют и настроят их новый гаджет.
Забавный факт, даже если у компании что-то пойдет не так, то на продаже этой недвижимости они смогут заработать невероятно крупную сумму денег, ведь адрес этого красивого здания - London, The Plaza, 1.
Около десяти лет назад в Ковент-Гардене было даже больше посетителей, чем на пятом авеню в Нью-Йорке!
Другие истории об эпл сторах:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM