Telegram Web Link
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект 3D-карусели в iOS

🎆 Джанум Триведи показал, как можно реализовать такое отображение в своём приложении.

Чтобы показать физически точное искривление перспективы, он создал 3D-цилиндр и наложил изображения на его поверхность.

Но если сами картинки не находятся на ScrollView, то как тогда получается такой эффект физики?

На самом деле есть суперширокий, невидимый scrollview, который ловит жест прокрутки и сопоставляет его contentOffset с вращением 3D-модели.

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

👨‍💻 Возможно, кто-то должен придумывать новые подходы для карусели раз в 10 лет.

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

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS IQ — новый способ получения премиум-контента

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

За последнее время вы могли видеть эти посты:

🔗 Dispatch Barrier, потокобезопасность и почему слишком много очередей это плохо
🔗 Поведенческие паттерны в Swift: определение, использование, недостатки
🔗 Блок вопросов: многопоточность (и бонус)
🔗 Структурные паттерны проектирования в Swift
🔗 SwiftUI Layout Protocol: как работать с версткой в SwiftUI
🔗 Порождающие паттерны проектирования (с примерами на Swift)
🔗 Собеседования: вопросы на понимание кода

И многое, многое другое.

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

🍏 Воспользоваться скидкой можно здесь.

А вот и обещанная подписка в боте (список того, что вы получите — тут).

На месяц.
На год (с большей выгодой).

😃 iOS IQ
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Sticker Wall - Создание голографического эффекта в SwiftUI

🤩 Эффект на видео — линейный градиентный слой, который меняет свои значения в зависимости от относительного положения наклона и вращения девайса.

В этом прототипе каждый стикер — это View (и для каждого свои значения угла наклона, поворота, CMMotionManager и таймеры), что приводило к перегреву девайса при 99%-ной загрузке процессора.

Поэтому были приняты решения для оптимизации:

1️⃣ Перенести весь код, связанный с движением, в единственный объект ObservableObject.

2️⃣ Использовать один таймер для всех изменений значений.

3️⃣ Запускать все изменения только один раз за цикл таймера.

И хотя процессор всё равно показывает нагрузку в 45%, это уже лучше первоначальных результатов.

📖 Всю историю создания можно посмотреть тут.

А ещё больше эффектов - здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Доклады с конференции try! Swift Tokyo 2024

try! Swift Tokyo — пожалуй, одна из самых популярных конференций по iOS в мире. Надеюсь, однажды получится целенаправленно попасть и на неё, хотя и так в Японии есть что посмотреть.

Среди представленных 20+ докладов я бы рекомендовал обратить внимание как минимум на эти:

📺 Type Inference в Swift (приоритет перегрузки, проблемы соответствия протоколу и почему компиляция кода может стать затратной)

📺 Code signing — разбор проблем. Кстати, в бусти я писал, что скрывают в себе сертификаты.

📺 File Provider на iOS и macOS и все связанные с ним возможности.

📺 Будущее совместимости C++: опыт переноса игры на Swift.

📺 Взаимодействие с сокетами и параллельная обработка в Swift (у меня это видео уже в избранном).

🔗 А весь плейлист доступен по этой ссылке.

🎆 Кстати, про интересные статьи — напоминаю, что есть ещё и доступ к премиум-контенту с помощью бота.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Сервис для тестирования универсальных ссылок в iOS

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

Платформа запрашивает последнюю AASA-файла с серверов Apple и генерирует простую панель управления для тестирования.

Например, можно увидеть, как ведет себя каждая ссылка, проверить настройку и выявить регрессии. А ещё неважно, сколько приложений поддерживает ваш AASA-файл (протестить можно их все).

Бонус: платформа также сообщит, когда обновится кэшированная версия AASA-файла.

🔗 Проверить сервис можно здесь (я проверил, как фетчится для озона, авито, авиасейлс и ещё пары приложений).

📖 А документацию можно найти тут.

Ранее в канале я писал, как проверять такие ссылки с помощью симулятора.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift Argument Parser Guide — создание собственных инструментов

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

1️⃣ Основы и аргументы.
В первой части рассмотрены основы анализатора аргументов, способы подготовки инструментов, команды и подкоманды.

2️⃣ Флаги.
В этой части вы узнаете о флагах и спецификациях имен на интерактивном примере.

3️⃣ Опции, проверка ввода и варианты завершения.
В этой части описаны параметры (и их группы), проверка ввода и, наконец, варианты завершения работы (с кастомизацией текста ошибок и разбором ситуацией, когда что-то пошло не по плану).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка крупных iOS-приложений с открытым кодом

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

Несмотря на это, некоторые по-настоящему масштабные проекты всё-таки выкладывают код. И это неплохой способ улучшить свои навыки (чтения кода, выбора архитектуры, поиска ответов на непростые вопросы).

Вот несколько приложений в опенсорсе:

1️⃣ ProtonMail — популярный почтовый клиент для зашифрованных писем.

2️⃣ Signal — если вам нужно реализовать в своем приложении какие-то фичи для чата, этот проект может стать отличным источником вдохновения.

3️⃣ VLC — едва ли не самый популярный кроссплатформенный медиаплеер с открытым исходным кодом.

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

5️⃣ Telegram iOS — далеко не всегда очевидные подходы (и иногда сложночитаемые), но при этом сложно отрицать, что телеграм остаётся невероятно быстрым при большой нагрузке. А ещё здесь можно вдохновиться эффектами и решениями сложнейших задач.

Впрочем, это можно сделать ещё и в базе знаний и в боте.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
В Apple удалили 118 000 аккаунтов разработчиков

📎 В большом отчёте Apple опубликовали целый ряд интересных статистических фактов.

🛑 За 2023 год более 100к аккаунтов были закрыты, при этом 91 000 соглашений были отклонены по причине мошенничества.

👨‍💻 Команда App Review (более 500 сотрудников) просматривает около 132 500 приложений в неделю, при этом 192 000 разработчиков впервые выпустили хотя бы один продукт за прошлый год.

😑 Каждый 10-й отзыв в сторе оказался фейковым (было удалено более 100 миллионов рейтингов из миллиарда).

Также за последние 4 года в Apple остановили потенциально мошеннические операции на сумму более $7 млрд (заблокировали 14 миллионов украденных кредитных карт).

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
DispatchQueue: практические вопросы

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

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

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

Заодно можно проверить и знания и по Dispatch Barrier.

Обновление уже доступно через бот (я бы рекомендовал этот способ) и на бусти.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Доступен ресурс со списком всех сессий WWDC

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

📖 На этом сайте перечислены все WWDC с информацией о 3428 сессиях с 2000 по 2023 год, а также различных технических докладах. Доступно и в JSON.

🔗 Кстати, на гитхабе есть альтернативный источник.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как правильно сделать выбор между Set и Array в Swift?

🔑 Коллекции — ключевой компонент любого языка программирования.

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

📖 В этой статье рассмотрены особенности Set и Array, ключевые характеристики каждого из них и кейсы использования (а также вопросы производительности).

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

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

⚙️ Инструменты помогают нам не только измерять объём памяти или нагрузку на процессор, но также играют решающую роль в выявлении узких мест.

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

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

Полезно будет напомнить и про:

🔗 ETTrace — опенсорсный инструмент для измерения производительности.
🔗 Способы измерения производительности Swift-кода.
🔗 Продвинутые трюки lldb для Swift.

А в ноушне есть дополнительные источники для улучшения арсенала наших инструментов:

➡️Поиск и устранение retain cycle.
➡️Советы по повышению производительности.
➡️Как улучшить отклик приложения: советы инженеров Apple.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как избежать распространенных ошибок при переходе с 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
2024/10/01 12:19:38
Back to Top
HTML Embed Code: