Компания Apple тестирует новый дизайн рекламных блоков в поиске App Store. Раньше платные позиции выделялись синим фоном - четкий сигнал, что это реклама. Теперь фон убран, и карточка выглядит точно так же, как результаты поиска. Единственное отличие - небольшая метка «Ad», которая почти незаметна.
Изменение тестируется в iOS 26.3 как A/B-тест: одним пользователям показывают старый дизайн, другим новый. Это стандартная практика для оценки влияния на метрики вовлеченности. Вероятно, Apple хочет проверить, насколько можно повысить кликабельность рекламы, не вызывая явного недовольства пользователей.
С технической стороны, это изменение упрощает интеграцию нескольких рекламных блоков в одну выдачу - Apple недавно объявила о расширении рекламного инвентаря. Когда все результаты выглядят одинаково, страница не кажется перегруженной рекламой.
Есть и этический вопрос. Регуляторы требуют четкого обозначения рекламы, но маленькая метка на белом фоне - это формальное соблюдение правил, а не реальная помощь пользователю. В условиях быстрого скроллинга такой маркер легко пропустить.
Для разработчиков это значит возможный рост стоимости рекламы, если кликабельность увеличится, возрастут и ставки в аукционе. Также придется уделять больше внимания иконкам и скриншотам, поскольку визуальное отличие от органических результатов исчезло.
Apple балансирует между монетизацией и пользовательским опытом. Новый дизайн рекламы - явный шаг в сторону повышения доходов, даже если это происходит за счет прозрачности. Пользователям станет сложнее отличать платное размещение от настоящих рекомендаций системы.
В долгосрочной перспективе такие изменения могут подорвать доверие к платформе. Если сегодня рекламу сложно отличить от контента в App Store, завтра пользователи начнут сомневаться и в других разделах экосистемы.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯17👀11🔥4👏1🙏1
С переходом на Swift 6 и активным использованием async/await многие разработчики сталкиваются с непонятными ошибками компиляции и неочевидным поведением приложения. Часто проблема кроется не в коде, а в настройках компилятора. Разберем, какие параметры действительно влияют на корректную работу Swift Concurrency и как их правильно настроить.
Настройки компилятора Swift для конкурентности можно разделить на три категории: фундаментальные, рекомендательные и экспериментальные. Понимание различий между ними сэкономит часы отладки.
Фундаментальные настройки (нельзя игнорировать):
Эти параметры определяют базовое поведение системы типов в конкурентной среде. Их неправильная конфигурация ведет к неопределённому поведению или падениям.
🔹 StrictConcurrency - главный переключатель строгости проверок:
@Sendable, @MainActor.🔹 GlobalConcurrency - распространяет правила изоляции на глобальные переменные и синглтоны. Без этой настройки статические данные становятся потенциальными источниками гонок данных.
🔹 DynamicActorIsolation - превращает потенциальные data races в предсказуемые runtime-ошибки. Включайте, только если готовы к дополнительным проверкам во время выполнения.
Рекомендательные настройки (улучшают опыт разработки):
Эти параметры не критичны для корректности, но значительно упрощают работу с конкурентным кодом.
🔹 NonisolatedNonsendingByDefault: меняет семантику nonisolated функций. Рекомендуется включать в новых проектах, так как делает поведение более интуитивным и предотвращает распространенные ошибки новичков.
🔹 InferSendableFromCaptures: позволяет компилятору автоматически выводить соответствие протоколу Sendable для замыканий. Уменьшает количество шаблонного кода, но требует аккуратной работы с захваченными значениями.
🔹 RegionBasedIsolation: экспериментальная, но многообещающая функция, которая вводит региональную изоляцию данных. Позволяет точечнее контролировать доступ к изменяемым состояниям.
Настройки, которые можно отложить:
Некоторые параметры решают узкоспециальные задачи или находятся в активной разработке:
🔹 ExistentialAny, MemberImportVisibility, InternalImportsByDefault - связаны с будущими изменениями системы типов и модульности. Не влияют на конкурентность напрямую.
🔹 BareSlashRegexLiterals, ForwardTrailingClosures - синтаксический сахар, не затрагивающий семантику async/await.
Рекомендации по настройке:
Для нового проекта на Swift 6:
// В настройках Xcode или Package.swift
SWIFT_STRICT_CONCURRENCY = "complete"
ENABLE_GLOBAL_CONCURRENCY = YES
ENABLE_NONISOLATED_NONSENDING_BY_DEFAULT = YES
Для миграции существующего проекта:
🔹 Начните с
StrictConcurrency = "targeted"🔹 Постепенно добавляйте аннотации
@MainActor и @Sendable🔹 Включите GlobalConcurrency после аудита глобальных состояний
🔹 Перейдите на complete режим после покрытия основных модулей
Важное замечание про зависимости:
Настройки компилятора применяются только к вашему коду. Сторонние библиотеки компилируются со своими параметрами. Убедитесь, что ключевые зависимости поддерживают выбранный вами уровень строгости.
Правильная настройка компилятора - не роскошь, а необходимость для стабильной работы Swift Concurrency. Начинайте с консервативных параметров при миграции legacy-кода и смело используйте строгие проверки в новых проектах. Помните, что
StrictConcurrency = "complete" - это не просто дополнительная проверка, а гарантия того, что компилятор поможет найти скрытые проблемы с параллельным доступом до того, как они проявятся у пользователей.Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17 8🔥3🙏2❤1👏1
Forwarded from Кот Денисова
Всем привет! Сегодня разберем один из самых фундаментальных вопросов мобильной разработки: выбор технологического стека для бизнес-проектов. Это не вопрос личных предпочтений, а стратегическое решение, влияющее на стоимость, сроки и качество продукта.
Бизнес-логика здесь проста и неизменна: компания ищет не «самую правильную» технологию, а самую выгодную. В условиях, когда для многих компаний приоритетом стало банальное выживание, разговоры о технологическом эстетизме отходят на второй план. Именно этим и обусловлен перманентный интерес к альтернативам нативной разработки: PWA, кроссплатформе и BDUI. Отрицать их привлекательность наивно, так как они сулят сокращение издержек и ускорение выхода на рынок.
Почему кроссплатформа не панацея:
Несмотря на заманчивые обещания, у кроссплатформенных решений есть системные минусы, с которыми столкнулись многие проекты:
BDUI: хитрый компромисс:
Концепция Backend-Driven UI (BDUI) сегодня - это, пожалуй, самый сильный конкурент «чистой» кроссплатформы. Ее суть в том, что сервер присылает на устройство конфигурацию интерфейса, а нативное приложение его отрисовывает готовыми, «родными» компонентами.
Когда все-таки нужен натив:
Ответ лежит в плоскости продукта и его амбиций. Нативная разработка - это не просто «круто и здорово», это выбор в пользу:
Рынок диверсифицируется. Уже недостаточно быть разработчиком одной платформы. Сегодняшняя реальность требует от инженера более широкого взгляда: понимания основ продуктового менеджмента, архитектурных паттернов, умения оценивать компромиссы между стоимостью, скоростью и качеством.
Споры «натив против кроссплатформы» теряют смысл. Реальный вопрос звучит иначе: «Какой набор технологий и архитектурных решений оптимален для достижения бизнес-целей этого конкретного продукта в текущих рыночных условиях?». И ответ на него каждый раз разный.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍8🙏3🔥2🫡1
This media is not supported in your browser
VIEW IN TELEGRAM
В 2025 году, в рамках WWDC компания Apple представила обновленный инструмент для анализа энергопотребления вашего приложения - Power Profiler.
Теперь в iOS, прямо из центра управления, можно запустить проверку приложения, чтобы оценить его расход заряда. Собранные данные позже анализируются в Instruments.
Новые инструменты анализа энергопотребления - это не просто техническое обновление. Это сигнал всей индустрии: энергоэффективность стала такой же важной характеристикой приложения, как скорость работы, стабильность или дизайн.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥9❤4👏2🙏1
Еще несколько лет назад сама идея запуска Swift на Android казалась чем-то фантастическим. Сегодня ситуация кардинально меняется. Официальная рабочая группа по адаптации языка для зеленого робота не просто делится планами, она демонстрирует конкретные инструменты и четкую дорожную карту. Давайте отбросим скепсис и разберемся, что сегодня умеет Swift на Android, какие проблемы решает и какие новые возможности открывает для разработки в принципе.
Ядро и производительность - нативный подход:
Ключевой принцип: Swift компилируется напрямую в машинный код для процессоров Android, минуя виртуальные машины. Это не обертка или трансляция, а полноценный нативный бинарник. Такой подход ставит его в один ряд по производительности с решениями на C и C++, созданными через NDK, но с критически важным отличием - встроенной безопасностью памяти и современным, выразительным синтаксисом. Для работы на устройстве вместе со сборкой поставляется собственная среда выполнения (runtime), реализующая стандартную библиотеку и фундаментальные компоненты вроде Dispatch.
Главный вызов и его решение - мост к Java-миру:
Самое сложное в адаптации Swift на Android - не компиляция, а интеграция с экосистемой. Все ключевые API платформы от работы с сенсором до уведомлений заточены под Java и Kotlin. Решение этого пазла - проект Java-совместимый и два его основных инструмента: jextract и wrap-java. Они автоматически генерируют «мостики» (биндинги), используя стандартный для нативного кода механизм JNI (Java Native Interface). Это позволяет Swift-коду вызывать Java-классы и наоборот, обеспечивая бесшовную, хотя и требующую настройки, интеграцию.
Кто уже использует на практике:
Лучшее доказательство жизнеспособности технологии - ее применение в коммерческих продуктах с миллионами установок. Вот несколько примеров:
Эти компании доказали, что общая кодовая база на Swift для бизнес-логики - не фантастика, а рабочая стратегия, экономящая ресурсы.
Что нового? Ключевые обновления SDK:
Рабочая группа активно развивает инструментарий. Среди последних значимых улучшений:
@available и проверки #available. Это позволяет писать код, который корректно работает на разных версиях ОС, повышая гибкость разработки.Swift на Android перестал быть диковинкой. Это формирующийся, но уже вполне рабочий технологический стек для стратегии «общая логика - нативные интерфейсы». Он предлагает мощную альтернативу C++ для критичных к производительности задач и дает iOS-разработчикам шанс выйти на новый рынок, используя знакомый язык.
Движение вперед теперь зависит не только от рабочей группы, но и от сообщества: тестирования ночных сборок, обратной связи и создания open-source инструментов. Для Android-разработчиков это возможность заглянуть в арсенал экосистемы Apple и, возможно, найти более элегантное решение для своих сложных архитектурных задач.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
В мире iOS-разработки есть определенные сезонные ритуалы, которые повторяются из года в год. Один из них: письма от App Store Connect, которые начинают приходить разработчикам примерно через 4-6 месяцев после выхода новой версии Xcode. Эти письма не сообщают о чем-то экстраординарном, они напоминают о неизбежном: пришло время обновить инструменты и перейти на новый SDK. Если вы получили такое уведомление, не стоит паниковать - это стандартный процесс.
В последние дни многие разработчики начали получать автоматические уведомления из App Store Connect с примерно следующим содержанием: «Ваше приложение было собрано с использованием iOS 18.5 SDK. Начиная с апреля 2026 года все новые отправки в App Store должны использовать iOS 26 SDK или новее».
На первый взгляд это может показаться внезапным и даже тревожным, особенно если в проекте есть сложные зависимости или кастомные настройки сборки. Но на самом деле это часть хорошо отлаженного ежегодного цикла, который Apple поддерживает уже много лет.
Как работает этот механизм:
Важное уточнение: это требование касается только новых отправок и обновлений существующих приложений. Приложения, уже находящиеся в App Store, продолжают работать без изменений. Также это не означает, что ваше приложение перестанет поддерживать старые версии iOS, вы по-прежнему можете устанавливать низкий минимальный уровень Deployment Target.
Почему Apple это делает:
Причин несколько и они все рациональны:
Получение письма о необходимости обновления SDK не повод для тревоги, а стандартный рабочий процесс в экосистеме Apple. Это как ежегодный техосмотр автомобиля: необходимая процедура, которая обеспечивает безопасность и надежность.
Самое разумное - начать подготовку заранее. Проверьте свои CI-конфигурации, обновите Xcode на основных машинах, сделайте пробную сборку. Так вы избежите аврала в марте 2026 и сможете спокойно заниматься разработкой новых функций, вместо того чтобы экстренно фиксить проблемы с миграцией.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍9🔥4🙏2👀1🤝1
Swift всегда балансировал между безопасностью и гибкостью. С одной стороны строгий компилятор, который заставляет обрабатывать все возможные случаи. С другой - реальная разработка, где требования меняются, и API должен эволюционировать. Особенно остро это противоречие ощущалось в перечислениях: добавление нового кейса в публичный enum ломало обратную совместимость, заставляя авторов библиотек либо плодить новые типы, либо вообще избегать enum в публичном API.
С выходом Swift 6.2.3 этот многолетний компромисс наконец-то разрешается. Новый атрибут
@nonexhaustive меняет правила игры, позволяя enum'ам расти без боли для пользователей библиотек.Проблема, знакомая каждому:
Представьте библиотеку для работы с API погоды. Вы создаете enum для условий:
public enum WeatherCondition {
case sunny
case cloudy
case rainy
}Пользователи пишут switch, обрабатывая все случаи. Проходит время, и вы понимаете, что нужно добавить case snowy. В традиционном Swift это немедленно приводило к проблеме совместимости: любой код, где производился полный перебор всех кейсов switch, переставал компилироваться, так как обработка переставала быть полноценной.
Вы оказываетесь перед выбором: либо выпускать мажорную версию и смириться с нарушением обратной совместимости или вообще отказаться от использования enum, заменив его на менее типобезопасную структуру со статическими свойствами.
Решение -
@nonexhaustive: Новый атрибут меняет правила игры. Помечая enum как
@nonexhaustive, вы говорите компилятору: «Этот enum может расширяться в будущем».@nonexhaustive
public enum WeatherCondition {
case sunny
case cloudy
case rainy
}
Теперь компилятор запрещает пользователям делать exhaustive switch без
@unknown default. Это заставляет их заранее предусмотреть возможность будущих расширений. Когда вы позже добавите case snowy, код пользователей с @unknown default продолжит работать корректно.Плавная миграция с
@nonexhaustive(warn): Для существующих кодовых баз предусмотрен миграционный путь. Атрибут
@nonexhaustive(warn) сначала показывает предупреждение, давая пользователям время адаптировать код, прежде чем требование станет ошибкой. Это пример вдумчивого дизайна, учитывающего реальные условия работы с legacy-кодом.Когда что выбрать:
@frozen - для перечислений, которые фундаментальны и никогда не изменятся, как Optional или Result. Это обещание навсегда, дающее компилятору право на максимальные оптимизации.@nonexhaustive - новый стандарт для публичных API библиотек. Подходит для статусов, кодов ошибок, категорий всего, что может эволюционировать со временем.Обычный enum без атрибутов теперь стоит рассматривать как выбор для внутренней реализации, где вы контролируете весь код и хотите строгой проверки.
Введение
@nonexhaustive в Swift 6.2.3 - это важная веха в эволюции языка. Оно показывает зрелость Swift как платформы для создания долгоживущих, эволюционирующих систем. Язык начинает предлагать инструменты не только для написания кода, но и для управления его изменением во времени.Это изменение признает фундаментальную истину разработки ПО: требования меняются, системы растут, и наши инструменты должны помогать нам адаптироваться к этим изменениям, а не становиться препятствием.
@nonexhaustive дает библиотекам свободу развиваться, сохраняя при этом безопасность типов и ясность API - редкое сочетание, которое делает Swift еще более привлекательным для создания серьезных, долгосрочных проектов.Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21 14👍7❤3🤯1🙏1
Одна из самых коварных проблем в разработке на SwiftUI: неочевидные, избыточные обновления интерфейса. Внешне приложение работает, но где-то в глубине вью обновляются десятки раз без видимой причины, подтачивая производительность и расходуя заряд батареи. До недавнего времени поиск таких горячих точек напоминал гадание на кофейной гуще. Однако с выходом Xcode 26 и нового SwiftUI-инструмента в Instruments ситуация кардинально меняется. Теперь у нас есть точный, визуальный способ не только обнаружить проблемные вью, но и проследить цепочку событий до самой первопричины.
Новый инструментарий - от статистики к пониманию:
Основное нововведение - специализированный SwiftUI-инструмент в пакете Instruments. В отличие от общих профилировщиков, он заточен именно под архитектуру SwiftUI, понимая такие сущности, как View, State, Binding и ObservableObject. После записи сессии профилирования инструмент предоставляет не просто сырые данные, а структурированную аналитику, сфокусированную на поведении вью.
Запустите профилирование через Product -> Profile и выберите шаблон SwiftUI. После записи действий в приложении откроется сводка «All Updates».
Отсортируйте таблицу по столбцу «Count». Первые строчки - ваши главные кандидаты на оптимизацию. Здесь вы увидите не только количество обновлений, но и суммарное время, которое на них ушло.
Настоящая магия в графе «Cause & Effect»:
Наведите на проблемный View и нажмите «Show Cause & Effect Graph». Вы увидите цепочку событий. Синие узлы - ваш код, серые - системный.
Двигайтесь по стрелкам влево от вью. Вы найдете первопричину: какое именно изменение
@State, @Published или внешнее событие запустило цепную реакцию. Граф наглядно покажет, если, например, таймер обновляет данные каждую секунду, а из-за этого перерисовывается весь экран.Этот метод эффективен для диагностики:
Появление специализированного SwiftUI-инструмента в Xcode 26 - это сдвиг парадигмы от эмпирической оптимизации к доказательной. Больше не нужно вслепую добавлять .equatable() или разбивать объемной иерархии вью на сабвью, надеясь на улучшение. Теперь можно:
Этот инструмент поднимает планку для разработки качественных SwiftUI-приложений. Он делает процесс оптимизации не искусством, а инженерной дисциплиной, доступной каждому разработчику. Внедрение его в регулярный процесс тестирования (особенно для сложных экранов) - это самый прямой путь к созданию плавных, отзывчивых и энергоэффективных интерфейсов, которые будут выгодно отличать ваш продукт на рынке.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16 9❤4✍1🔥1👏1
Skip позиционировал себя как смелое коммерческое решение для кроссплатформенной разработки на Swift. Его бизнес-модель строилась на уникальности: плати, чтобы писать на Swift под Android. Сегодня этот эксперимент завершился капитуляцией. Объявление о переходе на полностью бесплатную open source модель - это не щедрый жест, а вынужденное признание: проект проиграл в борьбе за рынок.
Официальное заявление команды о переходе на полностью бесплатную модель - это редкий случай предельной откровенности на рынке разработки. Вместо стандартных фраз о щедрости и великодушии они прямо заявляют: разработчики не готовы платить за инструменты. Это не стратегический ход, а признание поражения прежней бизнес-модели. Платный проприетарный фреймворк в мире бесплатных Xcode, Android Studio и официального Swift SDK для Android оказался нежизнеспособным.
Причина 1 - рынок отказывается платить:
В блоге Skip есть ключевая фраза: «Суровая правда в том, что разработчики ожидают получить свои инструменты бесплатно». Команда признает, что три года пыталась продавать подписки, но столкнулась с рыночной реальностью. Монетизация через IDE и сервисы платформ (App Store, Google Play) убила модель прямых продаж инструментов. Когда Apple выпустила собственный бесплатный Swift SDK для Android, уникальное торговое предложение Skip растворилось окончательно.
Причина 2 - вопрос доверия к маленькой компании:
Второй важный момент - опасение по поводу долговечности. Разработчики боятся строить стратегию на закрытом инструменте от небольшой команды. Риски что «компания прогорит», «продукт купят и закроют» или « владельцы резко свернут поддержку» оказались слишком серьезными барьерами для интереса у разработчиков. Open source в этом случае - не выбор, а необходимость для получения хоть какого-то доверия.
Что изменилось технически:
Новая экономика - от подписок к подаяниям:
Skip не стал благотворительным проектом. Команда перешла на модель выживания, зависимую от спонсорства:
Почему именно сейчас:
Выход стабильного официального Swift SDK для Android от рабочей группы, которую, сделал проприетарную часть технологии Skip менее ценной. Зачем платить за транспилятор, когда можно использовать нативную компиляцию от Apple? Открытие кода - это попытка сохранить релевантность, переместив фокус с «уникальной технологии» на «сообщество и экосистему».
Переход Skip в open source - это не победа сообщества, а капитуляция перед рыночными условиями. Для индустрии это сигнал: рынок инструментов для разработки становится еще более беспощадным. Если ваше решение конкурирует с бесплатными инструментами гигантов (Apple, Google, Microsoft), ваша бизнес-модель обречена. Единственный шанс - либо мгновенный взрывной рост с последующей покупкой гигантом, либо немедленный переход в open source с надеждой на спонсорство.
Skip выбирает второй путь. Их будущее теперь зависит не от качества кода, а от способности убедить сообщество, что их видение кроссплатформы без компромиссов стоит ежемесячных донатов. Жестокая, но честная реальность современной разработки инструментов для разработчиков.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥11 4❤2🤔1👀1🫡1
Forwarded from Кот Денисова
Один из самых распространенных страхов среди разработчиков (начинающих и не только) - что искусственный интеллект скоро сделает их ненужными. Давайте разберемся, почему это не более чем миф, и как на самом деле ИИ меняет индустрию.
Почему ИИ не заменит разработчиков:
Если бы ИИ мог полностью заменить программистов, он бы уже заменил и многие другие профессии: от дизайнеров до копирайтеров. Однако мы видим обратное: ИИ становится инструментом, который усиливает возможности специалистов, а не устраняет их.
Ключевая проблема в том, что ИИ обучается на данных, созданных людьми. Без постоянного обновления и развития со стороны живых специалистов любая ИИ-система быстро устареет.
ИИ как инструмент повышения эффективности:
Современные разработчики используют ИИ для:
Опытные специалисты отмечают, что ИИ особенно полезен для задач, где требуется быстро разобраться в незнакомом коде или технологии.
Новые возможности вместо угроз:
Развитие ИИ создает спрос на новые специализации:
Парадоксально, но технологии, которые якобы должны были уничтожить ИТ, создают в нем новые ниши и возможности.
Что действительно изменилось:
Повысились требования к начинающим специалистам. Если раньше можно было найти работу, зная только базовые вещи, то теперь ожидают более глубоких знаний и понимания архитектуры.
ИИ взял на себя многие простые задачи, которые раньше поручали джунам. Это значит, что начинающим разработчикам нужно фокусироваться на качестве кода и архитектурных решениях.
Вместо того чтобы бояться ИИ, стоит научиться использовать его в работе. Наиболее успешными будут разработчики, которые смогут эффективно комбинировать свои знания с возможностями искусственного интеллекта.
ИТ не умирает, а трансформируется. И те, кто успеет адаптироваться к новым условиям, окажутся в выигрыше.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🙏9❤4🔥1👀1
Сегодня разберем классическую проблему, с которой сталкивается любое растущее приложение: конфликт между внедрением новых, требовательных к ресурсам функций и поддержкой стабильной работы на старых и бюджетных устройствах.
Когда улучшения становятся проблемой:
Представьте типичный сценарий: команда внедряет красивую, ресурсоемкую фичу: детализированную 3D-графику, сложную анимацию, работу с большими данными в реальном времени. A/B-тесты показывают, что пользователям нравится. Но параллельно растет метрика аварийных завершений. Причем не равномерно, а взрывно на определенном сегменте устройств.
Анализ показывает, что проблема в Out of Memory (OOM). Приложение перестает помещаться в оперативную память, и система его завершает. Оказывается, для 10% пользовательских сессий (чаще всего на устройствах с 2-3 ГБ ОЗУ) новые фичи становятся неподъемными. Эти 10% сессий генерируют до 90% всех OOM-крашей.
От диагностики к архитектурному решению:
Шаг 1. Поиск точки невозврата:
Глубокий анализ выявил неочевидный, но критичный факт: зависимость между потреблением памяти и стабильностью - не линейна. Существует четкий порог для каждого класса устройств. Пока приложение остается ниже этого порога, OOM-краши редки. Стоит его перешагнуть - количество падений растет экспоненциально.
Это значит, что бесконечные точечные оптимизации - лишь временная мера. Нужен механизм, который не даст приложению на конкретном устройстве приблизиться к его критической черте.
Шаг 2. Отказ от универсальности:
Традиционный подход «одно приложение для всех» перестает работать, когда разброс характеристик устройств слишком велик. Устройство с 2 ГБ ОЗУ и устройство с 8 ГБ - это по сути разные вычислительные среды. Невозможно писать код, одинаково эффективный в обоих случаях.
Решение: явное разделение аудитории по классам памяти (RAM-классам). Устройства группируются не по марке или году выпуска, а по реально доступному объему оперативной памяти. Это создает основу для адаптивного поведения.
Шаг 3. Система адаптивной функциональности:
Ядро решения - конфигурируемый набор функций для каждого RAM-класса. На низких классах отключаются или упрощаются наиболее ресурсоемкие фичи (детализированная графика, предзагрузка объемных данных, фоновые процессы). На высоких - все возможности доступны по умолчанию. Ключевые принципы такой системы:
Шаг 4. Новые метрики для нового подхода:
С внедрением RAM-классов картина стабильности перестала быть общей. Теперь команда отслеживает ключевые метрики (OOM-краши, потребление памяти, Crash-Free сессии) в разрезе каждого класса. Это позволяет принимать взвешенные решения: «Эта фича добавляет 10% к памяти на классе 3. Готовы ли мы поднять для него минимальные требования?».
Этот подход меняет логику разработки. Вместо того чтобы пытаться внедрить новую фичу, мы сначала определяем, на каких именно устройствах она будет работать стабильно и принесет реальную пользу.
Масштабирование сложного клиентского приложения сегодня требует не только инженерной работы над кодом, но и архитектурной работы над логикой его адаптации к миру, который остается крайне неоднородным. Производительность становится не абсолютной величиной, а контекстно-зависимым свойством, которым нужно управлять.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥9❤4🤯1👀1
Swift больше не довольствуется ролью языка для техники Apple. Создание официальной рабочей группы Windows - это переход от экспериментов к планомерному захвату чужой территории. Теперь у языка есть боевой штаб для системной атаки на крепость Microsoft.
Что было раньше:
До 2026 года Swift на Windows существовал в режиме «кто во что горазд». Компилятор работал, но ключевые библиотеки (Foundation, Dispatch) были нестабильны. Сборка и дистрибуция приложений превращались в квест.
Что изменилось сейчас:
Создана официальная структура с конкретными целями:
Почему это важно:
Главный вызов:
Проблема не в компиляции, а в экосистеме. Swift должен научиться жить в мире WinAPI, COM-объектов и .NET. Нужны мосты, аналогичные JNI для Android, но для Windows.
Создание рабочей группы - это не про улучшение сборок. Это декларация войны с C# и C++ на их собственном поле. Swift перестает быть гостем на Windows и начинает борьбу за место под солнцем. Успех этой операции покажет, сможет ли язык от Apple стать реальной силой в мире разработки под Windows или останется экзотическим выбором для Windows-энтузиастов.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17 9❤3👍1👏1
Тренд на миграцию iOS-разработчиков с Xcode на VS Code или Cursor набирает обороты. Однако переход часто упирается в потерю специфичных инструментов Apple-экосистемы. Один из самых болезненных моментов - работа с Asset Catalogs (.xcassets). В Xcode это интуитивный визуальный редактор, в VS Code - папка с JSON-файлами. Разработчики из сообщества решили проблему, создав расширение, которое буквально переносит знакомый интерфейс Xcode в новый редактор.
Суть проблемы - JSON вместо интерфейса:
Файл .xcassets - это не просто папка с картинками. Это структурированный каталог, содержащий:
В Xcode разработчик видит удобное древовидное представление с превью. В голом VS Code - только сырые Contents.json файлы и изображения, что делает навигацию и проверку мучительно медленной.
Решение- Asset Catalog Viewer:
Расширение полностью копирует трехпанельную логику интерфейса Xcode:
Установка:
Расширение устанавливается стандартно через каталог расширений VS Code или Cursor. После установки оно добавляет в контекстное меню (по правому клику на папке .xcassets) пункт «Open Asset Catalog Viewer». Также можно открыть каталог через Command Palette. Расширение работает локально, не требуя отправки данных.
Пока Apple сохраняет Xcode как единственную официальную, но тяжелую и не всегда стабильную IDE, сообщество берет инициативу в свои руки, выборочно перенося лучшие ее части в более современные и гибкие редакторы: VS Code и Cursor.
Этот тренд важен: он дает разработчикам реальный выбор. Больше не нужно мириться со всеми недостатками Xcode ради работы с ассетами или, наоборот, отказываться от удобства ради скорости и стабильности VS Code. Теперь можно собрать идеальный стек инструментов под свои задачи. Asset Catalog Viewer - это убедительный аргумент в пользу того, что будущее iOS-разработки может быть не за монолитной IDE, а за модульной средой, где каждую функцию можно выбрать и улучшить независимо.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7🤯2👀2❤1🤔1
С выходом iOS 26 и нового дизайна Liquid Glass многие команды столкнулись с неочевидными вызовами. Особенно сложная ситуация складывается у проектов с гибридной архитектурой, где UIKit и SwiftUI соседствуют годами. Адаптация - это не просто замена цветов и добавление размытий. Это переосмысление навигации, модальностей и даже базовых компонентов интерфейса. На примере приложения Grow, получившего признание редакции App Store в 173 странах, разберем, какие решения работают на практике, а какие оказываются тупиковыми.
Двойная стратегия - совместимость и прогрессивность:
Первое и главное правило успешной адаптации - сохранение работоспособности для пользователей старых версий iOS. В Grow выбрали стратегию условной компиляции и проверки доступности API через
#available(iOS 26.0, *). Это позволяет:Навигация - от кастомных решений к нативным компонентам:
Исторически сложилось, что многие проекты заменяли UINavigationBar кастомными view для сложных UI-элементов. Liquid Glass требует обратного подхода - возврата к нативным компонентам. В Grow провели рефакторинг:
Ключевой момент: нативные компоненты лучше адаптируются к системным эффектам морфинга и анимациям Liquid Glass.
Модальные представления:
Адаптация UISheetPresentationController оказалась одной из самых простых задач. Для активации эффектов Liquid Glass достаточно:
Более интересной задачей стала реализация морфинг-меню в формате popover. Вместо чисто SwiftUI-решений команда выбрала гибридный подход через UIPopoverPresentationController:
Расширение возможностей - стеклянный текст:
Один из наиболее креативных аспектов адаптации - создание кастомных стеклянных эффектов. Используя Core Text, можно преобразовывать глифы шрифтов в CGPath, а затем применять к ним эффект glassEffect(_:in:). Это открывает возможности для:
Адаптация Liquid Glass в гибридных проектах - это баланс между нативными возможностями системы и существующей архитектурой. Самое важное - понимать, что Liquid Glass это не просто визуальное обновление, а изменение философии взаимодействия. Успешная адаптация требует не только технических изменений, но и пересмотра подходов к проектированию интерфейсов, где системные компоненты и анимации становятся частью пользовательского опыта, а не его украшением.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16 8🔥3❤1🙏1