Telegram Web Link
Полезная информация по добавлению Privacy Manifests

👨‍💻 Май уже начался, и это означает, что теперь все билды приложений, которые мы отправляем на проверку, должны содержать новые манифесты (при условии использования соответствующих API).

В этом посте постарался объединить доступную инфу, которая минимизирует траты времени на внедрение новых требований Apple:

1️⃣ Официальная документация по использованию манифестов.

2️⃣ Скрипты для поиска возможного использования такого API на github.

3️⃣ Онлайн-помощник для создания манифестов.

4️⃣ Две больших русскоязычных статьи с разбором (на хабре и на sparrowcode).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Xcode удалил весь список симуляторов, что случилось?

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

При этом перезапуск Xcode вряд ли помог, а вот полный ребут - да, так что же случилось?

Я провёл небольшое расследование.

Пару дней назад система защиты macOS от вредоносного ПО XProtect получила обновление 132, которое обнаружило ложное срабатывание в образе диска с симулятором и пыталось его устранить, и именно это вызывало дроп всего списка симуляторов.

Вышло silent-обновление 133 (скорее всего оно уже применилось, но если нет - проверьте обновления в системе).

Ошибку можно было заметить и без обновления Xcode, и даже при скачивании симулятора ничего бы не поменялось (хотя одним из решений было юзать команду sudo killall -9 http://com.apple.CoreSimulator.CoreSimulatorService).

Так что и Apple иногда тестируют на проде 📞.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
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
2024/11/20 11:47:58
Back to Top
HTML Embed Code: