iOS Dev
Open in Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Show more7 877
Subscribers
+124 hours
-17 days
-5130 days
Posts Archive
7 878
Три важных слова – Митап, Android, Алиса
Команда мобильной разработки Алисы приглашает Android-разработчиков на свой первый митап в Екатеринбурге.
Расскажем, как использование RFC может улучшить процесс разработки на примере нашей библиотеки для платформ Android и iOS.
Поговорим о том, из каких этапов состоит производство станции Дуо Макс и ТВ станций, как мы решаем задачу автоматизации процесса проверки качества производимых устройств.
А ещё поделимся нашим опытом и лучшими практиками использования TV Input Framework.
Зарегистрироваться можно по ссылке.
Реклама. ООО "Яндекс", ИНН 7736207543.
7 878
The Composable Architecture: часто задаваемые вопросы
Создатели компонуемой архитектуры (или же TCA) собрали ответы на часто задаваемые вопросы, и развеяли несколько мифов (в том числе и о минусах):
🔗 Следует ли использовать TCA для всех типов приложений?
🔗 Идет ли TCA вразрез со SwiftUI?
🔗 Не является ли ведение отдельного перечисления «действий» лишней работой?
🔗 Являются ли функции TCA неэффективными, потому что все состояние приложения хранится в одном массивном типе?
🔗 Нужно ли быть знакомым с «функциональным программированием», чтобы использовать TCA?
📖 Другие (не менее важные) вопросы создатели архитектуры также рассмотрели в своём блоге.
✅Узнать больше про архитектуры можно в этом посте.
😃 iOS Dev
7 878
Протоколы в iOS: назначение и примеры
Даже при частом использовании протоколов начинающие разработчики могут не знать все особенности.
Например,
Identifiable постоянно нужен в SwiftUI, но почему он обычно применяется для списков? Или CustomStringConvertible, который вполне подойдёт для более удобного дебага наших моделей.
📖 В этой статье разбираются популярные протоколы на примерах кода.
🧠 Ах да, кстати, приложение уже в тестфлайте и вы можете получить ранний доступ.
Кстати, проголосовавшие в опросе будут приятно удивлены списку тем внутри.
😃 iOS Dev7 878
Настраиваемая кнопка с разными состояниями в SwiftUI
Конечно, задача мобильных разработчиков далеко не только в покраске кнопок, но знать несколько подходов и обладать арсеналом таких навыков необходимо.
SwiftUI в несколько раз упрощает создание переиспользуемой кнопки (и добавление конфигов).
📖 Вот тут можно увидеть подходы к созданию такого элемента на реальных примерах.
😃 iOS Dev
7 878
Объяснение использования
@preconcurrency в Swift
Если включить -strict-concurrency для своих существующих проектов, то, вероятнее всего, при первой компиляции проекта Xcode выдаст множество предупреждений и/или ошибок.
Этого можно избежать с использованием @preconcurrency, можно использовать для:
📼 functions
📼 types
📼 protocols
📼 imports
С помощью @preconcurrency появляется возможность импортировать старые модули в новый код.
Это отличный способ начать постепенно внедрять строгий параллелизм по мере приближения выпуска Swift 6.
📖 В этом посте рассмотрены примеры использования и ошибки, которые могут встретиться.
😃 iOS Dev7 878
Как сделать иконку приложения анимированной?
Наверняка, многие могли задуматься и раньше, как избежать алерта при выборе альтернативной иконки.
Bryce Bostwick, разработчик, знакомый по великолепным постам о реверс-инжиниринге, попробовал покопать глубже, и написал большое исследование о том, как создать иллюзию анимации (на самом деле для этого нужно достаточно часто менять эти иконки).
📖 Почитать увлекательную статью можно здесь (и рекомендую посмотреть остальные статьи блога).
📺 В формате видео вот тут.
🛠 Демо-проект (посмотреть и попробовать повторить) доступен на github. Напоминаю про этот пост, если захотите выложить в стор.
✅Больше крутых эффектов можно увидеь здесь или тут.
😃 iOS Dev
7 878
Подготовка к собеседованиям: Swift Concurrency
Подготовил вопросы, которые помогут новичкам и опытным разработчикам, знакомым с концепциями параллелизма и заинтересованным в изучении синтаксиса и API Swift Concurrency.
Можно узнать что-то новое о приоритетах, выполнении нескольких задач одновременно и многом другом. Задачи постарался по максимуму покрыть примерами с кодом. Некоторые из вопросов уже добавлены в приложение.
✅Доступ можно получить здесь или тут сразу на год.
Больше важных тем:
🔗 Блок вопросов: многопоточность (и бонус)
🔗 Собеседования: вопросы на понимание кода
🔗 DispatchQueue: практические вопросы
😃 iOS Dev
7 878
Что означает spacing = nil в SwiftUI?
Понимание принципов Spacing важно при работе со сложной версткой, а владение определенными техниками может помочь добиться эффектов, которые сложно реализовать традиционными методами.
Как можно видеть на гифке, когда используется nil, расстояние между Text и соседними элементами больше не равны.
Из документации Apple:
При установке nil расстояние должно быть дефолтным умолчанию для каждой пары subviews.
Но, как оказывается, это значение не фиксировано.
📖 В этой статье объясняется, что на самом деле означает значение nil по умолчанию для параметра Spacing.
Кроме того, рассматриваются и другие аспекты, связанные с этим свойством.
😃 iOS Dev
7 878
Почему загрузка пакетов с помощью Swift Package Manager занимает слишком много времени?
Когда мы добавляем зависимость в проект через spm, он извлекает весь репозиторий пакета со всеми ветками и полную историю git, которая может представлять собой годы git-снапшотов.
Суть проблемы тут.
Но почему?
На вопрос ответил инженер по инфраструктуре GitHub (обратите внимание на дату комментария), схожая проблема была и в Cocoapods:
Поверхностное клонирование по какой-то причине обходится намного дороже, чем клонирование всего репозитория. К тому же GitHub ограничивает скорость в таких репах, что приводит к значительному увеличению времени.
Хуже того, фетч может вообще завершиться ошибкой по таймауту.
Так в чем же заключается решение?
Очевидно, многие компании используют такой подход. Они создают отдельный реп с предварительно скомпилированным .xcframework, при этом пользователь получит только нужную часть исходного репозитория.
Например airbnb/lottie применила этот подход и уменьшила размер своего репозитория с +300 МБ до менее 500 КБ!
Signal сделал то же самое: отсюда OneSignal-iOS-SDK пришли к оптимизированной версии OneSignal-XCFramework.
📖 Про другой интересный кейс можно прочитать на хабре.
😃 iOS Dev
7 878
Те, кто подписан на бусти, знают, что кроме ведения канала по мере наличия свободного времени я разрабатываю приложение-компаньон для iOS-разработчиков.
С покрытием важных тем, источниками и, надеюсь, интересными вопросами.
Сегодня пришло время анонсировать разработку официально.
🧠 IQ — приложение-компаньон для iOS-разработчиков скоро в тестфлайте.
Приложение изначально будет доступно только для подписчиков бусти (достаточно уровня База), поэтому если вы хотите поддержать канал, подпишитесь:
❤️❤️❤️❤️❤️ Поддержать канал и получить ранний доступ.
😃 iOS Dev
7 878
🎉 У меня День Рождения
[-Onone]
Быть профессионалом, безусловно, важно. Желание, а вместе с ним и стремление смотреть вглубь — необходимое качество не только на нашей работе, но и в жизни.
Без оптимизации источников за кажущейся ширмой лёгкого контента часто скрываются киллеры времени.
[-Osize]
В нашем канале я продолжаю делать акцент на технической составляющей, а не на видео из тик-тока или других филлерах личного пространства.
В первую очередь, я разработчик, и только затем — автор канала. Я не распыляюсь на суждения о других блогах и едва ли употребляю слово "самый" чаще, чем это необходимо по причине контрпродуктивности. Нужна ли агрессивная оптимизация?
[-O]
Иногда приоритет нужно отдать производительности вместо общения в чате. Это может быть непростым выбором, но на дистанции это принесёт свои результаты.
🐾 Спасибо вам за вашу оценку постов, комментарии и за то, что вы здесь.
⬇️One more thing (in progress...).
7 878
Реализация навигации в SwiftUI с помощью NavigationPath и NavigationDestination
🗺 Вообще, одной из основных проблем в SwiftUI была как раз навигация.
До появления NavigationPath существовали некоторые способы решения этой проблемы, но не слишком удобные.
📖 В этом посте рассматриваются особенности NavigationPath (доступной с iOS 16), принципы работы и отличия от UINavigationController в UIKit.
⌚ Некоторое время назад я обновлял таргет для Apple Watch в одном из своих приложений, как раз применяя это сочетание.
😃 iOS Dev
7 878
Паттерн «Репозиторий» в Swift: разбор и примеры кода
🐱 Шаблон проектирования «Репозиторий» действует как промежуточный уровень между бизнес-логикой приложения и хранилищем данных.
С его помощью обеспечивается структурированный способ чтения и записи, абстрагируя при этом базовые детали уровня хранения.
При этом можно взаимодействовать с данными, не зная, хранятся ли они в памяти или где-то ещё (у нас может быть и Core Data, и Realm, и кейчейн, да хоть отдельный файл в tmp).
Это создает четкое разделение задач и значительно упрощает тестирование.
Например, мы можем юзать резервное хранилище в памяти для тестов (при использовании Core Data в проде).
Также сам уровень данных будет гораздо более гибким, поскольку появляется возможность заменить используемое хранилище данных без необходимости изменения кода приложения на уровне реализации.
Делюсь двумя вариантами применения паттерна:
📖 Шаблон с примерами кода.
📖 Core Data + Repository pattern. Детали реализации.
🍏 А на бусти можно познакомиться с двумя большими разделами по паттернам:
🔗 Структурные паттерны проектирования.
🔗 Порождающие паттерны проектирования (с примерами на Swift).
😃 iOS Dev
7 878
Как избежать распространенных ошибок при переходе с UIKit на SwiftUI
Джереми Гейл опубликовал интересную статью, в которой есть мысль, что разработчики UIKit находятся в невыгодном положении по отношению к новичкам, поскольку знают способы заставить работать вещи, которые больше не актуальны в SwiftUI.
Когда я только начинал переносить некоторые проекты на SwiftUI, у меня было похожее ощущение, ведь многое доступно из коробки и так.
📖 В этой статье показан пример рефакторинга SwiftUI. Также в процесе разбираются ошибки, которые допускают разработчики, уже привыкнувшие к UIKit.
✅О других важных подходах при разработке можно прочитать вот тут.
😃 iOS Dev
7 878
Как измерить производительность с помощью инструментов и os_signposts
⚙️ Инструменты помогают нам не только измерять объём памяти или нагрузку на процессор, но также играют решающую роль в выявлении узких мест.
Одна из полезных функций инструментов — возможность добавлять в код указатели (signposts) для определения нужных областей при трассировке. Это особенно полезно, когда у нас много похожих вызовов, и нам нужно измерить время, затраченное на конкретную операцию.
📖 В этой статье можно посмотреть на пример использованиях таких указателей.
Полезно будет напомнить и про:
🔗 ETTrace — опенсорсный инструмент для измерения производительности.
🔗 Способы измерения производительности Swift-кода.
🔗 Продвинутые трюки lldb для Swift.
✅ А в ноушне есть дополнительные источники для улучшения арсенала наших инструментов:
➡️Поиск и устранение retain cycle.
➡️Советы по повышению производительности.
➡️Как улучшить отклик приложения: советы инженеров Apple.
😃 iOS Dev
7 878
Как правильно сделать выбор между Set и Array в Swift?
🔑 Коллекции — ключевой компонент любого языка программирования.
Безусловно, в подаввляющем большинстве ситуаций мы используем Array или Set, но есть и другие виды коллекций (да взять бы даже ArraySlice, который отностися к части массива).
📖 В этой статье рассмотрены особенности Set и Array, ключевые характеристики каждого из них и кейсы использования (а также вопросы производительности).
✅А вот здесь можно ознакомиться не только с базовыми, но и с продвинутыми способами использования массивов.
😃 iOS Dev
7 878
Доступен ресурс со списком всех сессий WWDC
Июнь уже не за горами, а вместе с ним и новая WWDC. И пока мы ожидаем новых фич, делюсь источником, где можно посмотреть, что было раньше.
📖 На этом сайте перечислены все WWDC с информацией о 3428 сессиях с 2000 по 2023 год, а также различных технических докладах. Доступно и в JSON.
🔗 Кстати, на гитхабе есть альтернативный источник.
😃 iOS Dev
7 878
DispatchQueue: практические вопросы
📖 Если вы давно читаете канал, то наверняка знаете про отличную подборку для того, чтобы познакомиться с аспектами, возможно, одной из самых сложных тем в разработке.
Но, конечно, практических заданий, на которых можно было бы потренироваться, не очень много.
В iOS IQ я добавил новый раздел, в котором постарался раскрыть тему от простых задачек к более сложным (в конце даже есть со звёздочкой).
Заодно можно проверить и знания и по Dispatch Barrier.
✅ Обновление уже доступно через бот (я бы рекомендовал этот способ) и на бусти.
😃 iOS Dev
7 878
В Apple удалили 118 000 аккаунтов разработчиков
📎 В большом отчёте Apple опубликовали целый ряд интересных статистических фактов.
🛑 За 2023 год более 100к аккаунтов были закрыты, при этом 91 000 соглашений были отклонены по причине мошенничества.
👨💻 Команда App Review (более 500 сотрудников) просматривает около 132 500 приложений в неделю, при этом 192 000 разработчиков впервые выпустили хотя бы один продукт за прошлый год.
😑 Каждый 10-й отзыв в сторе оказался фейковым (было удалено более 100 миллионов рейтингов из миллиарда).
Также за последние 4 года в Apple остановили потенциально мошеннические операции на сумму более $7 млрд (заблокировали 14 миллионов украденных кредитных карт).
В канале я рассматривал пару лет назад частые причины реджектов (кстати, некоторые, как например покупки на сторонних сайтах, уже не так актуальны).
😃 iOS Dev
