Мы сделали Dhamer и показались на Dubai World Trade Centre
Для нашей команды разработки это уже вторая большая MaaS платформа, до этого был 🇷🇺 Московский Транспорт, теперь 🇸🇦 Dhamer. Надеюсь, что продукты и дальше будут развиваться, и впереди новые города и страны, новые вызовы и фичи, помогающие миллионам людей удобнее пользоваться различными услугами в своем городе.
Спасибо за невероятный опыт всей команде ISS и SpectralSoft, we did it!
Отдельное спасибо нашему СТО Кириллу @issdev, на котором без малого был весь процесс, порой даже и iOS📱
UPD: Часть технических вызовов и их решений на iOS все ждут статей, но я в этом деле дотошный, так что, в лучшем случае скажу: "Не скоро"
Представляем вам новейшую технологию «Мобильность как услуга» (MaaS), разработанную для создания более интеллектуальных и взаимосвязанных транспортных систем. От мультимодальных маршрутов в реальном времени до бесперебойной интеграции автопарка и платежей — мы меняем представление о городской мобильности.
Для нашей команды разработки это уже вторая большая MaaS платформа, до этого был 🇷🇺 Московский Транспорт, теперь 🇸🇦 Dhamer. Надеюсь, что продукты и дальше будут развиваться, и впереди новые города и страны, новые вызовы и фичи, помогающие миллионам людей удобнее пользоваться различными услугами в своем городе.
Спасибо за невероятный опыт всей команде ISS и SpectralSoft, we did it!
Отдельное спасибо нашему СТО Кириллу @issdev, на котором без малого был весь процесс, порой даже и iOS
UPD: Часть технических вызовов и их решений на iOS все ждут статей, но я в этом деле дотошный, так что, в лучшем случае скажу: "Не скоро"
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥9
О деньгах, мы в Forbes Russia
Почитать подробнее — Forbes Стартап-суббота
Деньги. есть.😘
Лично я за новый офис, ну или хотя-бы кресло-массажер
Онлайн-сервис для управления автопарками и оплаты автомобильных платежей «Паркоматика» привлек 55 млн рублей от Equity Club, рассказали Forbes в компании. Средства пойдут на развитие функционала платформы, расширение команды и масштабирование бизнеса в новых регионах. «Паркоматика» включает в себя мобильное приложение для водителей, электронный диспетчер задач и инструмент бизнес-отчетности, в сервис интегрированы более 20 городских автомобильных систем.
...платформу используют 700 предприятий (более 40 000 автомобилей), среди них — «Яндекс Доставка», РЖД, Lamoda и другие. Выручка компании в 2024 году составила 94,1 млн рублей, чистая прибыль — 15,4 млн рублей, следует из СПАРКа.
Почитать подробнее — Forbes Стартап-суббота
Деньги. есть.
Лично я за новый офис, ну или хотя-бы кресло-массажер
Please open Telegram to view this post
VIEW IN TELEGRAM
25 8🔥6🤩2💯1
И - Известность и общая боль Structed Cuncurency
Наш любимый Swift развивается в сторону строгого паралелизма. Однако на реальных проектах и фреймворках с тоннами легаси новый подход языка не всегда успешно накладывается на кодовую базу. Более того, часть архитектурных решений просто несовместимы с новым async видением от Apple.
Например, взять популярную библиотеку Swinject,
Cама идея регистрации объектов синхронно из общего неизолированного метода в лучшем случае небезопасна. А если у вас тысячи регистраций объектов под акторами... Ммм, в скольких случаях init у вас nonisolated? Как долго компилятор и крешрейт выдержат @preconcurrency в вашем коде?
С опытом (и чаще с болью) находятся обходные пути, хаки, которые в умелых руках делают код еще и безопасным.
Одним таким кейсом я недавно поделился в более известном iOS клубе, суть которых можно глянуть тут и тут.
Что ж, возможно, пришло время записать с Львом с канал iOS Makes Me Hate второй Workshop на тему Swift 6 и Structed Cuncurency
Ориентир на конец сентября, так что, уважаемые читатели, "Как только, так сразу"!
Наш любимый Swift развивается в сторону строгого паралелизма. Однако на реальных проектах и фреймворках с тоннами легаси новый подход языка не всегда успешно накладывается на кодовую базу. Более того, часть архитектурных решений просто несовместимы с новым async видением от Apple.
Например, взять популярную библиотеку Swinject,
Cама идея регистрации объектов синхронно из общего неизолированного метода в лучшем случае небезопасна. А если у вас тысячи регистраций объектов под акторами... Ммм, в скольких случаях init у вас nonisolated? Как долго компилятор и крешрейт выдержат @preconcurrency в вашем коде?
С опытом (и чаще с болью) находятся обходные пути, хаки, которые в умелых руках делают код еще и безопасным.
Одним таким кейсом я недавно поделился в более известном iOS клубе, суть которых можно глянуть тут и тут.
Что ж, возможно, пришло время записать с Львом с канал iOS Makes Me Hate второй Workshop на тему Swift 6 и Structed Cuncurency
Ориентир на конец сентября, так что, уважаемые читатели, "Как только, так сразу"!
🔥11🤡2
И так, официально вышла iOS 26
Официально наш как неделю редизайнутый дизайн снова устаревший
П.C. Ну хоть работа будет
А ниже опрос 🔽🔽🔽
Официально наш как неделю редизайнутый дизайн снова устаревший
П.C. Ну хоть работа будет
А ниже опрос 🔽🔽🔽
😁3❤1💔1
Планируете переход в вашем приложении на стеклянный дизайн?
Anonymous Poll
23%
Да, планируем
3%
Уже в разработке
53%
Не планируем
3%
Не разработчик, жду
17%
Не разработчик, не жду
❤1
Законтрибьютил в RouteComposer
RouteСomposer - библиотека для UIKit навигации на основе диплинков для каждого экрана.
С ней нет необходимости использовать паттерн Coordinator или хранить стейт навигации в какой-либо структуре.
В реализации навигации библеотека полагается на то, что доступно из коробки:
- Возможность обходить дерево UIViewController-ов
- Находить нужный UIViewController на основе типа, протокола, контекста
- А если не нашли, то создавать и показывать там, где нам надо
Все, что вам нужно, это описать конфиг для нужного экрана, и затем скормить его роутеру, который переведет вас хоть через все приложение на нужный экран:
Если у вас возникает вопрос — зачем оно надо? Ответ — диплинки.
Если после этого у вас остается вопрос — зачем оно? То, вам, вероятно, не надо.
Для нашей команды RouteComposer стал стандартом и номером 1 для навигации в наших приложениях. А перепробовали мы, наверное, все, от нативного present / push, до координаторов, роутеров, state-based навигации с разной степень "успешности".
И вот, опыт работы на паре проектов и пару тысяч строк в публичном ПР-е, работы с системой типов на протоколах, и теперь
Было:
Стало:
У библиотеки есть неплохой Example, всем советую хотя бы ознакомиться с навигацией на основе поиска и работы по дереву.
Делитесь своим мнением в комментариях ⬇️
RouteСomposer - библиотека для UIKit навигации на основе диплинков для каждого экрана.
С ней нет необходимости использовать паттерн Coordinator или хранить стейт навигации в какой-либо структуре.
В реализации навигации библеотека полагается на то, что доступно из коробки:
- Возможность обходить дерево UIViewController-ов
- Находить нужный UIViewController на основе типа, протокола, контекста
- А если не нашли, то создавать и показывать там, где нам надо
Все, что вам нужно, это описать конфиг для нужного экрана, и затем скормить его роутеру, который переведет вас хоть через все приложение на нужный экран:
let productScreen = StepAssembler<ProductViewController, Any?>() /// Тип и контекст нужного экрана
.finder(.productViewControllerFinder()) /// Как найти нужный экран по дереву навигации
.factory(.productViewControllerFactory()) /// Как создать экран, если не нашли в дереве
.add(LoginInterceptor<UUID>()) /// Доп. логика
.add(ProductViewControllerContextTask()) /// Доп. логика
.add(ProductViewControllerPostTask(analyticsManager: AnalyticsManager.sharedInstance)) /// Пример аналитики
.using(.push) /// Как открыть
.from(.navigationController) /// Откуда открыть
.using(.present) /// Как открыть / создать (navigationController)
.from(.current) /// Откуда открыть / создать (navigationController)
.assemble() /// Каст
Если у вас возникает вопрос — зачем оно надо? Ответ — диплинки.
Если после этого у вас остается вопрос — зачем оно? То, вам, вероятно, не надо.
Для нашей команды RouteComposer стал стандартом и номером 1 для навигации в наших приложениях. А перепробовали мы, наверное, все, от нативного present / push, до координаторов, роутеров, state-based навигации с разной степень "успешности".
И вот, опыт работы на паре проектов и пару тысяч строк в публичном ПР-е, работы с системой типов на протоколах, и теперь
Было:
Swift
let productScreen = StepAssembly(
finder: ClassWithContextFinder<ProductViewController, ProductContext>(),
factory: ClassFactory())
.using(UINavigationController.push())
.from(NavigationControllerStep())
.using(GeneralActions.presentModally())
.from(GeneralStep.current())
.assemble()
Стало:
let productScreen = StepAssembler<ProductViewController, ProductContext>()
.finder(.classWithContextFinder)
.factory(.classFactory)
.using(.push)
.from(.navigationController)
.using(.present)
.from(.current)
.assemble()
У библиотеки есть неплохой Example, всем советую хотя бы ознакомиться с навигацией на основе поиска и работы по дереву.
Делитесь своим мнением в комментариях ⬇️
50🔥9