Что общего у мобильной разработки с лентой Мёбиуса? С первого взгляда видишь две стороны: вот же они, Android и iOS. А потом присматриваешься — и замечаешь, что одно может плавно переходить в другое.

Вот смотрите. Мы скоро проведём конференцию Mobius. Казалось бы, хабрапост с описаниями докладов логично поделить на две части, чтобы любому разработчику было удобно читать именно о «своей» платформе.

Но будет, например, доклад про корутины в Kotlin. Этот язык привычен в мире Android, однако с Kotlin Multiplatform выходит за рамки платформы. И кому тогда стоит знать про такой доклад: Android-разработчикам или всем?

Ещё есть доклады про Flutter. Они интересны только флаттеристам, или нативные разработчики с обеих сторон тоже следят «что там происходит»? И есть другие «кроссплатформенные» темы, не привязанные строго к платформе. Их в посте где лучше поставить, в начале или конце?

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

Содержание

  • Android

  • Kotlin

  • Кроссплатформенность

  • Flutter

  • iOS


Android

Воркшоп: Android + AI. Решаем задачи с умом

Анна Жаркова

Usetech

Внедрение ИИ-решений в приложения становится трендом. На Google I/O 2024 представили Gemini API, который можно как встроить в свое приложение для решения задач пользователя, так и воспользоваться им как AI-ассистентом для разработки. Своего AI-помощника GigaCode представил и Сбер.

Рассмотрим практические примеры использования различных нейронных сетей (Gemini, GigaCode, ChatGPT) при разработке Android-приложения. Обсудим, какие подводные камни могут встретиться в работе и как применять такие инструменты корректно и безопасно.


Воркшоп: Modo в действии: быстрая и гибкая навигация для Jetpack Compose

Игорь Кареньков

hh.ru

Откройте для себя Modo — минималистичную библиотеку навигации, которая упрощает работу в Jetpack Compose. На воркшопе вы узнаете, какие API предоставляет Modo, и поймете ее core-принципы. Разберем классические сценарии навигации, такие как работа со стеком и табами, а также более сложные и произвольные сценарии, включая встраивание экранов в произвольные контейнеры.


Не два байта переслать: эмуляция бесконтактных карт на мобильных устройствах

Павел Васильев

Positive Technologies

Павел расскажет про использование NFC-интерфейса на мобильных устройствах для эмуляции бесконтактных карт.

Неочевидные сложности и ограничения на Android и iOS. Что получится сэмулировать, а что нет. Cтандарты, определяющие взаимодействие по NFC. Простые и сложные примеры. NDEF-форматированные метки, транспортные карты, платежные карты, карты лояльности, пропуски систем контроля и учета доступа. Безопасность хранения ключей и передачи данных по NFC.

Спикер покажет наглядно и побайтно передачу реального полезного сообщения по NFC с одного смартфона на другой.


Backup в Android, или Как сэкономить бизнесу миллионы

Артур Илькаев

VK / ВКонтакте

Резервное копирование — малоизвестная и плохо задокументированная возможность Android. В VK ID решили провести с ней эксперимент и бэкапить некоторые авторизационные данные. Теперь это экономит значительные суммы на SMS. Это реальный продуктовый кейс, который может помочь и вашему бизнесу.

В докладе погрузимся в эту технологию:

  • как имплементировать;

  • как работает под капотом;

  • как тестировать;

  • как обосновать бизнесу внедрение.


Интеграция GeckoView в Dynamic Feature

Евгений Терновой

VK / Mail

Почему команда решила затащить к себе GeckoView в Dynamic Feature, как это делали и с какими проблемами столкнулись. Будет полезно тем, кто устал от багов в WebView и будет делать что-то аналогичное.


Опасности в Android: уязвимости и защитные меры

Юлия Стекачева

Райффайзен Банк

Готовьтесь к увлекательному путешествию в мир безопасности Android! Разберем самые интересные и коварные уязвимости, такие как Path Traversal, SQL-инъекции и Tapjacking. Но основное внимание уделим WebView: неправильной валидации данных, уязвимостям в библиотеке для парсинга URL, JavaScript Interface и загрузке диплинков.


Gradle Configuration Cache Hidden Gems

Сергей Опивалов

Кэширование фазы конфигурации (configuration cache, СС) — одна из самых ожидаемых и очевидных оптимизаций в процессе Gradle-сборки. Однако стабильной эта оптимизация была объявлена относительно недавно — в Gradle 8.1.

Сергей расскажет о сложностях реализации CC и о «неожиданных» улучшениях производительности, которые может принести СС в вашу сборку. Если вы сомневались, поддерживать ли CC в своих сборках, — эти инсайты помогут вам ответить утвердительно.


Кастомные лейауты в Jetpack Compose

Александр Власюк

Авито

В процессе написания компонентов дизайн-системы на Compose Александр столкнулся с нехваткой качественных материалов и скудностью документации по такой важной теме, как кастомные лейауты. Цель доклада — предоставить полноценный обзор средств для кастомизации лейаутов на Compose.

Разберем механизм работы layout-фазы в Compose и узнаем о ее ограничениях. Выясним, как работают стандартные лейауты, а также какие возможности существуют для написания кастомных. Рассмотрим нюансы и хаки, о которых не написано в документации. Вам продемонстрируют все на примерах, включая компоненты дизайн-системы Авито.


Последнее слово в Android-навигации

Данил Колесников

Дзен

Какой Mobius без доклада про навигацию в Android? Платформе уже 16 лет, а тема все еще актуальна. В своем докладе Данил хочет разобраться, почему же так происходит, а также предложить концептуально новый подход навигации в вашем приложении. Отличительной особенностью является то, что в ней отсутствует зоопарк команд: add, replace, remove, navigateTo, backTo, replaceScreen и т.д. Есть всего две команды: open и close. Ведь именно так дизайнеры и менеджеры рисуют навигацию в макетах.

Как получилось подружить экраны на View и Compose, поддержать анимации, восстановление состояния, диалоги, пейджеры, пейджеры в диалогах и множество других кейсов? Все благодаря декларации иерархии экранов, алгоритмам поиска в деревьях, а также Decompose.


Танцы вокруг дерева семантики: UI-тесты Compose-экранов

Павел Стрельченко

hh.ru

Вы узнаете, как:

  • Работают базовые инструменты от Google для UI-тестирования Compose.

  • Получить удобный API для тестирования Compose и организовать кодовую базу тестов.

  • Внедрили UI-тестирование Compose в hh и своей дизайн-системе: разбор частых кейсов и решения проблем.


Как мы разработали свой фреймворк SingleState-навигации на Android

Олег Дволятик

Авиасейлс

Во время перехода на Jetpack Compose появилась возможность переделать легаси-навигацию в проекте. Идеального готового решения не нашли и запилили свое.

В докладе Олег расскажет, как задизайнили архитектуру и с какими проблемами столкнулись по ходу. Будет полезно тем, кто интересуется проектированием систем и хочет придумать что-то свое.


Реактивный велосипед для SDK

Александр Юдин

RuStore / VK

При разработке SDK нельзя так просто и слепо использовать привычные технологии. Каждый шаг несет за собой последствия для пользователя SDK. Так что доклад будет о специфике разработки Android SDK, о том, как с этим боролись и к чему пришли.


Kotlin

Непростые вопросы про Kotlin Coroutines

Абакар Магомедов

Альфа-Банк

Александр Гирев

Wildberries

Однажды пятничным вечером один из докладчиков задумался над вопросом: где живут корутины, когда запустивший их coroutineScope героически погибает в жерновах GC? Субботнее утро было проведено за чтением статей и исходников.

Вот так и родилась идея доклада. В нем будут ответы на вопросы об устройстве и работе корутин для самых любознательных.

Материал доклада рассчитан на участников, которые знакомы как минимум с теоретическими основами Kotlin Coroutines.


Кроссплатформенность

Kotlin не для Android

Алексей Гладков

Mobile Developer

Как Android-разработчики мы привыкли, что многие вещи за нас делает компания Google. С развитием Kotlin Multiplatform мы можем разрабатывать приложения не только для Android. Но как только мы сталкиваемся с релизом приложения, то начинаем больше ценить то, как о нас заботится компания Google.

В этом докладе мы с вами разберем, какие проблемы возникнут у разработчика при релизе приложения, написанного на Kotlin для Desktop и для iOS, а также способы решениях этих проблем.


Kotlin in GitHub Actions. Расширяем горизонты KMP

Максим Качинкин

Dodo Engineering

Нет доступного и простого мануала или документа по быстрому написанию Kotlin/JS GitHub Action. Этот доклад послужит таким мануалом.

Иногда очень хочется написать кастомный Action, которого нет в Marketplace. На чем его написать? Просто workflow со скриптами? Или кастомный GHA на JS? Есть очень соблазнительный вариант — написать его на Kotlin!

У ребят был инструмент, который считал lead time. Он был написан давно и на Scala. Они хотели его переписать на Kotlin, но все равно было непонятно, как лучше и удобнее его запускать на CI.

И тут пришла идея — это можно сделать в виде GitHub Action на Kotlin! А если потом захочется перенести в другой вид, то Kotlin-код — он и в Африке Kotlin-код. Поэтому написали кастомный GHA на Kotlin, и Максим хочет поделиться опытом.


Как iOS-разработчику выжить на проекте с KMM?

Сергей Стельмах

Газпромбанк

Обсудим, как iOS-разработчику выжить на проекте с KMM. Рассмотрим проблемы, с которыми сталкиваются разработчики, и пути их решения. Узнаем, как iOS-разработчику эффективно освоиться на проекте с KMM и справляться с возникающими трудностями.

Погрузимся в проблемы, связанные с межплатформенной разработкой, такие как незнакомство разработчика с Kotlin, IDE, интеграция с Xcode, отладка кода, совместимость библиотек и разделение ответственностей разработки. Узнаем, как адаптировать код и использовать Kotlin вместе со Swift, чтобы оптимизировать рабочий процесс. В заключение обсудим перспективы использования KMM для iOS-разработчиков, преимущества и недостатки этого подхода. Сергей поделится рекомендациями для тех, кто хочет «вкатиться» в проект на KMM.


Как Kotlin Multiplatform изменил наши процессы

Данил Перевалов

Циан

Данил расскажет, как из-за интеграции KMP пришлось поменять процессы в мобильных командах, а также их взаимодействие. Акцент именно на процессах, а не на технической части KMP.

Рассмотрим, какие были процессы, что пришлось поменять и какие проблемы и нюансы возникают при попытке внедрить KMP в уже существующие процессы.


Pkl — язык программирования для конфигураций от Apple

Андрей Зонов

Т-Банк

Разберемся, зачем Apple понадобился отдельный язык для работы с конфигурациями, какие задачи он решает и что не так c JSON. Андрей расскажет про возможности языка Pkl для работы со статической конфигурацией. Рассмотрит:

  • кодогенерацию с Pkl на Swift, Kotlin, Java и Go;

  • глубину интеграции c IDE, такими как IntelliJ, VS Code, Xcode и Neovim;

  • использование языка для кодогенерации моков для тестов, тестирования конфигураций и контрактов.

Сравнит с аналогом — Swagger (OpenAPI) + Mustache.


Compose и SwiftUI: найди 10 отличий

Алексей Панов

Контур

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

Обсудим отличия декларативных UI-фреймворков: Compose и SwiftUI. Рассмотрим принципы работы в обоих случаях. Узнаем об отличиях в обновлении UI, жизненном цикле, системе модификаторов.


Заезжаем в KMP. Но какой ценой?

Денис Александров

Яндекс 360

Сегодня в Kotlin Multiplatform — не просто возможность сделать часть кода мультиплатформенным, это большой кусок разработки, который становится мультиплатформенным «сам по себе».

Денис поделится опытом следования такой практике: как написали мультиплатформенное приложение, чего это стоило на этапе поднятия Android + IOS, сколько по времени вышел таргет Desktop, и что нужно учесть. Мы на цифрах разберем «стоимость» такого решения: сколько весят сборки, сколько проходят билды, сколько времени уходит на «допиливание» мультиплатформенных решений.

В общем, максимально подробно разберем путь до Kotlin + Compose Multiplatform и прикинем, что этот подход дает с точки зрения цифр.


Совместная работа Kotlin/Native GC и ARC в iOS

Дмитрий Кузнецов

Magnit Tech

Kotlin Multiplatform (KMP) набирает популярность. Все больше компаний разрабатывают приложения, используя эту технологию, в том числе для iOS. При смешении разных технологий, языков, когда в одном приложении используются и Swift, и Kotlin, возникает ситуация, когда объекты могут мигрировать от ARC к Kotlin/Native GC (K/N GC) и обратно.

Несмотря на то, что в основе ARC и K/N GC лежат разные механизмы по управлению памятью, в большинстве случаев проблем не возникает. Посмотрим, как авторам K/N GC удалось достичь практически бесшовной интеграции, а также разберем особые случаи, когда системы управления памятью начинают «конфликтовать».


Что не так с мобильными сервисами в Android и iOS

Кирилл Розов

Android Broadcast

Мобильные сервисы — неотъемлемая часть современных мобильных ОС и ее ключевой компонент. Google Play Services — это инструмент контроля всего Android, а Apple легко может лишить разработчика всего, закрыв доступ к своим сервисам.

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


ОС Аврора 5 глазами мобильного разработчика. Разработка и функциональность

Денис Глазков

Открытая Мобильная Платформа

Доклад для разработчиков как под Aurora, так и Android и iOS, или разрабатывающих с Flutter или другими фреймворками.

  • Как устроен жизненный цикл приложений с точки зрения операционной системы и разработчика приложений.

  • Какая функциональность доступна и как ее применять в разработке.

  • Какие нововведения повышают комфорт разработки и расширяют ОС новыми возможностями.

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


Fusion, или Как мы реализовали нашу версию BDUI

Алексей Телышев

AliExpress

В докладе расскажут про свою реализацию Backend Driven UI, которая называется Fusion. Рассмотрим этот подход со всех сторон: практическое применение, масштабирование в реальном проекте, порог входа необходимый для различных специалистов (мобильщики, бэкендеры, QA), соотношение цена/качество в сравнении с традиционной разработкой и многое другое.

Целевая аудитория: мобильные разработчики и те, кто интересуется темой BDUI (SDUI)


Flutter

Как я перестал бояться и полюбил компилятор Dart

Богдан Лукин

Яндекс Go

Пройдем весь путь от поломки компилятора до появления полноценных фиксов в стабильном релизе.

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

Форкнем Flutter, Flutter Engine и Dart SDK. Разберем их взаимосвязь и научимся дебажить.

Бонус в конце: как сделать так, чтобы ваши issues решались за сутки.


Как мы делали суперапп «Дилер онлайн», и что из этого получилось

Олег Скирюк

ПАО Вымпелком

Олег поделится опытом по созданию многомодульного суперапп-приложения на Flutter. Основное внимание акцентируется на структуре и архитектуре приложения: какие инструменты были выбраны для организации монорепозитория, навигации. Он продемонстрирует подход к управлению состоянием, зависимостями в приложении, который является переосмыслением существующих подходов MobX, GetX, Flutter Modular, GetIt и применением их на практике.


Accessibility Flutter-приложений, или Как увеличить трафик на 20%

Самир Ахмедов

Surf

15% людей на земле имеют разного рода осложнения, связанные со зрением, слухом или моторикой. К сожалению, под таких людей адаптировано все еще малое количество приложений, и им приходится очень тяжело в современном мире.

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


iOS

Суперапп с чистого листа

Сергей Балалаев

Ozon

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

В начале доклада пройдем квиз на тему супераппа. После квиза вам расскажут, как строилась архитектура решения: о масштабируемости, time to market, параллельности и гибкости разработки. Будут интересные технические подробности и сравнение супераппа с многомодульными проектами и операционными системами: поговорим о версионировании библиотек в мультирепозитории, и, конечно, о команде разработки. И главное — вы узнаете, почему такое решение сильно отличается от основного супераппа, к которому шли годами.

В заключение Сергей поделится фундаментом, на котором базируется работа команды.


От модуляризации к Clang и обратно

Роман Горбенко

Яндекс

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

Рассмотрим, как с помощью SwiftSyntax построить граф зависимостей между различными сущностями в коде. Особое внимание Роман уделит утилите Periphery, которая предоставляет функциональность для изучения связи между сущностями не только статически, но и динамически. Изучим малоизвестный инструмент swift-index-store, ключевой для работы с метаданными Swift-проектов.

В конце обсудим результаты подхода, включая генерацию специальных файлов, которые упрощают понимание и управление структурой проекта.


Одна билд-система, чтоб править всеми

Максим Вакула

KODE

Александр Евтухов

Т-Банк

Все iOS-разработчики привязаны к определенным системам сборки. Например, Tuist или CocoaPods. Когда на рынке появляется новое решение, невозможно быстро взять и проверить, как оно работает, поскольку проект жестко описан и привязан к конкретной системе сборки.

В докладе мы разберем, как перестать полностью фиксировать описание проекта в файлах и как написать абстрактную билд-систему, которая реализует кеширование. К этой билд-системе можно подключать что угодно для сборки вашего проекта: тот же Tuist или Bazel.


Позаботимся о памяти при использовании value-типов

Алексей Таран

Ozon

Начиная со Swift 5.9 миру была представлена концепция некопируемости для структур и перечислений. В числе возможных кейсов, где этот подход принесет преимущество, подразумевается подход к хранению уникальных ресурсов в приложении без необходимости использовать кучу и поддерживать ссылочную семантику. Однако инструмент не мог быть полноценным без поддержки протоколов и дженериков. В стандарте Swift 6.0 такая базовая возможность была добавлена.

В докладе, вооружившись обновленной версией языка и проектом Ozon Seller, мы применим эту концепцию, чтобы повысить прозрачность необходимости использования сущностей в коде. Разберемся, как применение некопируемости влияет на производительность приложения — в частности, на потенциальную экономию памяти. Изучим схожие подходы в других языках, рассмотрим потенциальные проблемы и перспективы их решения по мере развития технологии.


Осторожно, Combine!

Никита Конашенко

Яндекс 360

Многие разработчики решают использовать в проектах Combine, воспринимая его как отличную альтернативу RxSwift, а так же из коробки совместимого со SwiftUI. Этим путем пошли в Яндекс Диске и переписали множество модулей на Combine.

В этом докладе будем разбираться, как на самом деле работают основные примитивы в Combine: Publishers, Operators, Schedulers, Subscription, BackPressure. Поговорим о всех багах, дата-рейсах, утечках памяти и неявном поведении, которые с ними связаны. Обсудим, как их исправляли, а также к каким выводам после всего этого пришли.

Никита поделится библиотекой со всеми фиксами и полезными экстеншенами к Combine.


Здесь куют Metal

Тёма Нестеренко

VK

Научимся рисовать первоклассные кастомные анимации в iOS на GPU. Для этого погрузимся в главный GPGPU API от Apple и рассмотрим основные сущности, с помощью которых производятся вычисления на графических процессорах. Погрузимся в Metal shader language, научимся с нуля анимировать свойства объектов, свяжем все это вместе и в итоге получим анимированную view, готовую для интеграции в продукт.


Альтернативы XCUITest, или Как и зачем разработчику писать автотесты

Кирилл Володин

Т-Банк

Доклад о написании автотестов в iOS-разработке. Обсудим, почему эта тема должна быть интересна не только QA-специалистам, но и разработчикам.

В начале будет немного теории, связанной с тестированием. Далее обсудим, почему XCUI-тесты — это не серебряная пуля и почему нужно уметь использовать весь доступный арсенал для автоматизации тест-кейсов.

Рассмотрим на примерах unit-тесты «на стероидах», фреймворк KIF. Поговорим о всех преимуществах написания тестов по методу белого ящика на примере абстракции многопоточного кода.


Запускаем приложения на своем iOS-симуляторе

Денис Кудинов

Лаборатория Касперского

Спроектируем и реализуем симулятор iOS для запуска приложений на macOS. Увидим внутреннее строение iOS-приложений. Плотно познакомимся с форматом Mach-O. Научимся динамически подгружать библиотеки в рантайме, выделять память под выполняемый код, а также запускать приложения, собранные через Xcode для iOS внутри приложения для macOS.


Разрабатываем CLI-инструменты на Swift

Игорь Шамрин

Яндекс / Авто.ру

Как разрабатывать инструменты для разработки и CI на Swift и какие возможности это открывает.

Во многих iOS-проектах инструменты сборки реализованы на скриптовых языках программирования, таких как Python, Ruby, shell и другие. Такой подход к разработке инструментов создает ряд трудностей:

  • сложность онбординга новых разработчиков в разработку CI;

  • сложность использования библиотек от Apple, таких как SwiftSyntax, SwiftPM;

  • затруднительная разработка нетривиальных инструментов.

Игорь расскажет, как в Авто.ру полностью перешли на инструменты на Swift и какой профит от этого получили. Затронет работу с API SPM, SwiftSyntax и сторонними CLI-библиотеками на Swift.


Влияние Swift Runtime на производительность приложения

Кристиан Бенуа

Т-Банк

Доклад о методе swift_conformsToProtocol из Swift Runtime.

Кристиан расскажет, что это за метод, как он работает под капотом, почему так долго выполняется и как свести к минимуму количество вызовов метода. Объяснит, какой код может работать медленно из-за явного или неявного вызова swift_conformsToProtocol: вызовы as?/as! SomeProtocol, String(describing:) и дженерик-типы с type-generic-constraint.

В конце даст набор рекомендаций, как малой кровью ускорить работу вашего приложения.


Это вам не игрушки: портирование кроссплатформенной С++ игры на iOS

Андрей Филипенков

Kaspersky

Андрей расскажет, с чего начать портирование, какие проблемы возникают при ручной сборке и как он перешел на сборку зависимостей (почти) без болей. Рассмотрим, как объединить несколько отдельных процессов в один, поговорим об адаптации CMake-проекта под iOS / Xcode. На десерт — перевод Android на менеджер зависимостей Conan и замена нативного Java-«лаунчера» на кроссплатформенный на Qt. И, конечно, представит наглядный результат проделанной работы — посмотрим на сетевую игру между iOS и Android.


Как мы адаптировали проект к Strict Concurrency Checking — Swift 6

Никита Землин

Яндекс

Как в Яндекс Путешествиях инкрементально затягивают Strict Concurrency Checking и Swift 6 в большой проект и побеждают все ворнинги и ошибки.

Обсудим механизмы, которые помогают писать потокобезопасный код и в compile time находить потенциальные рейс-кондишены. Будут обсуждаться основные инструменты (Actors, Sendable, @unchecked Sendable, nonisolated, nonisolated(unsafe), preconcurency import) и кастомные решения, которые применялись во время адаптации Яндекс Путешествий к Strict Concurrency Checking.


Как убить Git и не убиться?

Евгений Рыжов

Ozon

Вы когда-нибудь пробовали научить кошку приносить мячик? Все знают, что практически это возможно. Однако далеко не факт, что именно ваша кошка захочет с вами сотрудничать, и вместо мячиков вам может быть принесена миска для корма. Вероятно, вы просто получите тотальный игнор с искренним непониманием в глазах.

С такой же своенравной дичью мы живем на четырех проектах, но вместо нужного мячика нам приносят Git-репозитории (которые мы не особо просили), а вместе с ними — транзитивки с обновленными версиями ровно в тот момент, когда нам это совсем не к месту. К счастью, SPM — не живое существо, а значит, его можно научить!

Ответ вы найдете в докладе. Евгений расскажет, как научил свою кошку приносить резиночки (уже победа!), а SPM — легковесные и стабильные архивы при помощи Swift Registry.


Заключение

Можете рассказать в комментариях, что из перечисленного интересно вам.

А нам остаётся напомнить формат: 11 октября у конференции онлайн-день, а вот 19-20 октября можно хоть лично прийти на неё в Петербурге, хоть подключиться удалённо.

И напомним главную ссылку — на сайт конференции: там можно и увидеть информацию вроде расписания, и приобрести билет.

Комментарии (1)


  1. mmshkurin
    26.09.2024 06:12

    на самом деле доклады о Flutter интересны и тем,кто занимается веб разработкой,но задумывается о шаге в разработку мобильной разработки