[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fservices\u002Fwhitelabel-app-development":167,"service-parent:\u002Fservices\u002Fwhitelabel-app-development":426,"service-children:\u002Fservices\u002Fwhitelabel-app-development":433,"glossary":434},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Каждое наше приложение выходит и на Android — платформенные API, фоновое выполнение, разрешения и требования магазина вместе с ними.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","Фронтенд-фреймворк, в котором мы работаем, когда продукт уже на Angular, — строгая структура, подходящая большим долгоживущим приложениям.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","Язык, на котором написано каждое наше Flutter-приложение, — строгая null safety, полноценный pattern matching и компиляция в нативный код и веб.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","Python-фреймворк, который мы берём, когда продукту нужны админка, аутентификация и модель данных в первый же день, а не самописный сервис.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Каждый наш сервис поставляется в виде контейнера, поэтому на ноутбуке, в CI и в продакшене работает один и тот же артефакт, а не три разных.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","Автоматизация релизов в нашей мобильной разработке — подпись, сборки и загрузка в сторы идут из CI, а не с ноутбука одного инженера в день релиза.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Наш основной мобильный стек с 2018 года — одна кодовая база на Dart для iOS, Android, веба и десктопа без отдельной команды под каждую платформу.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Все проекты, к которым мы прикасаемся, живут в Git — ревью пул-реквестов, CI на каждой ветке и история, понятная и спустя месяцы.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Наш бэкенд-язык для real-time API и сервисов под нагрузкой — маленькие бинарники, быстрая сборка и конкурентность, которая остаётся читаемой.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","Облако, в котором работают наши продакшен-нагрузки, — управляемый Kubernetes, хранилище и сеть без серверов, которые надо обслуживать руками.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","Система сборки, через которую проходит каждый Android-релиз, — флейворы, конфигурации подписи и вся обвязка зависимостей под Flutter-приложением.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","Так мы упаковываем деплой в Kubernetes — сервис, конфигурация, секреты и ingress как одна версионируемая единица, которую можно выкатить и откатить.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","То, что мы берём, когда Flutter-приложению нужен настоящий Android под ним, — platform channels, фоновые задачи и интеграции с нативными SDK.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Общая бизнес-логика для iOS и Android, а нативный интерфейс у каждой платформы свой, — альтернатива, когда Flutter не подходит.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","Так мы запускаем сервисы в продакшене — деплой в Helm-чартах, откатываемые выкатки и масштабирование, для которого не нужен человек в три ночи.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Лёгкий обмен сообщениями между сервисами — publish\u002Fsubscribe и request\u002Freply без эксплуатационного веса полноценного кластера брокера.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue с серверным рендерингом, роутингом и SEO из коробки — так мы делаем сайты и веб-приложения, которые должны быстро грузиться и индексироваться.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Там, где PHP-бэкенд уже есть: дорабатываем его, интегрируемся с ним и делаем мобильные и веб-клиенты, которые он обслуживает.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Наша база данных по умолчанию — от проектирования схемы до настройки индексов мы берём её, если у продукта нет конкретной причины взять другую.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Наш язык для бэкендов, работы с данными и AI-интеграций — включая Python-биндинги, которые мы выпускаем к собственным инструментам на Rust.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","Фронтенд-библиотека, в которой мы работаем, когда продукт уже на React, — компоненты, хуки и выросшая вокруг них экосистема.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Место для данных, которые должны быть быстрыми и которые не жалко пересчитать, — кэши, сессии, лимиты и очереди фоновых задач.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","Язык, на котором написана автоматизация наших мобильных релизов, — лейны Fastlane, кастомные действия и связка с CI, доставляющая сборки в сторы.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Куда мы идём, когда важны и скорость, и корректность, — рендеринг документов, CLI-инструменты и сервисы, которые обязаны оставаться быстрыми и предсказуемыми.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","База данных, которая поставляется внутри приложения, — локальные кэши, offline-first хранилище и всё, что должно работать без сети.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","Headless CMS, к которой мы обращаемся, когда контент должны вести сами редакторы, — готовая админка и чистый API вместо самописных.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","То, что мы берём, когда Flutter-приложению нужен настоящий iOS под ним, — platform channels, интеграции нативных SDK, виджеты и App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","UI-фреймворк Apple, на котором мы делаем нативные поверхности, недоступные Flutter-приложению, — виджеты, App Clips и расширения.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","Так мы стилизуем весь фронтенд — утилитарные классы и дизайн-токены вместо таблицы стилей, которая только растёт и никогда не чистится.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","Стандарт для всего, что мы пишем для браузера и для Node-сервисов, — типы ловят ошибки интеграции раньше, чем код доходит до ревью.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Наш фронтенд-фреймворк для админок, дашбордов мерчантов и веб-приложений, которые должны оставаться поддерживаемыми годами, а не спринтами.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","Открытая модель распознавания речи от OpenAI — движок транскрипции для голосового ввода, который работает и как бэкенд-сервис, и прямо на устройстве в приложении.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":397,"extension":398,"footerCta":399,"headingCta":413,"image":419,"meta":422,"metaDescription":423,"metaTitle":169,"navigation":424,"ogDescription":425,"parent":426,"path":427,"seo":428,"slug":429,"stem":430,"updated":431,"__hash__":432},"services_ru\u002Fservices\u002Fwhitelabel-app-development.md","Разработка White-Label приложений",{"type":171,"value":172,"toc":385},"minimark",[173,178,182,185,189,193,207,212,221,225,228,234,246,250,254,257,278,282,286,292,304,310,314,317,323,330,343,347,350,354,361,365,368,372],[174,175,177],"h2",{"id":176},"разработка-white-label-мобильных-приложений","Разработка White-Label мобильных приложений",[179,180,181],"p",{},"White-label приложение — это один продукт, проданный многократно: то же приложение, переоформленное под новый бренд и опубликованное заново для каждого из ваших партнёров, франчайзи или рынков. Сложность не в том, чтобы сделать одно приложение. Сложность — в том, чтобы создать единую кодовую базу, которая может стать десятью, пятьюдесятью или сотней брендированных приложений без роста затрат на поддержку с каждым новым запуском.",[179,183,184],{},"Мы проектируем и строим white-label платформы, где каждое новое брендированное приложение — это конфигурация, а не форк, поэтому одна команда выпускает и поддерживает весь парк приложений.",[186,187],"statistics-grid",{":items":188},"[{\"icon\": \"lucide:layers\", \"value\": \"1\", \"label\": \"Кодовая база\", \"description\": \"Все брендированные приложения используют один исходный код\"}, {\"icon\": \"lucide:rocket\", \"value\": \"Часы\", \"label\": \"На запуск бренда\", \"description\": \"А не недели разработки на каждое приложение\"}, {\"icon\": \"lucide:users\", \"value\": \"Без лимита\", \"label\": \"Брендированных приложений\", \"description\": \"Предельная стоимость стремится к нулю\"}, {\"icon\": \"lucide:wrench\", \"value\": \"1\", \"label\": \"Правка → все приложения\", \"description\": \"Одно изменение доходит до всего парка\"}]",[174,190,192],{"id":191},"почему-flutter-лучший-выбор-для-white-label-приложений","Почему Flutter — лучший выбор для White-Label приложений",[179,194,195,196,200,201,206],{},"White-label — это именно тот сценарий, для которого создан Flutter. Разрабатывать парк брендированных приложений нативно — значит поддерживать две кодовые базы (Swift и Kotlin), умноженные на число брендов. Это непосильное бремя поддержки. Flutter сводит это к ",[197,198,199],"strong",{},"одной кодовой базе, одной команде, всем платформам",". Это та же основа, что и в нашей ",[202,203,205],"a",{"href":204},"\u002Fservices\u002Fflutter-app-development","разработке приложений на Flutter",", масштабированная с одного приложения до целого парка.",[208,209],"features",{":items":210,":title":211},"[{\"label\": \"Единый источник истины\", \"description\": \"iOS и Android для каждого бренда из одной кодовой базы на Dart — без расхождений по платформам и брендам\"}, {\"label\": \"Пиксельная точность тем\", \"description\": \"Flutter сам отрисовывает каждый пиксель, поэтому тема бренда применяется одинаково на всех устройствах и платформах\"}, {\"label\": \"Нативная производительность\", \"description\": \"Компиляция в нативный ARM-код — каждое брендированное приложение ощущается полноценным, а не обёрткой\"}, {\"label\": \"Одна правка — весь парк\", \"description\": \"Исправленная ошибка или выпущенная функция попадает во все приложения в следующем релизе\"}]","Что Flutter даёт парку White-Label приложений",[213,214,215],"info-box",{},[179,216,217,220],{},[197,218,219],{},"Итог:"," для одного приложения Flutter — отличный выбор. Для парка white-label приложений это единственный выбор, при котором поддержка остаётся посильной: одна кодовая база вместо (2 платформы × N брендов) проектов, которые приходится постоянно синхронизировать.",[174,222,224],{"id":223},"гибкая-система-стилизации-и-фиче-гейтинга","Гибкая система стилизации и фиче-гейтинга",[179,226,227],{},"Ядро white-label платформы — это слой конфигурации, который превращает одну кодовую базу во множество разных приложений. Мы строим систему, где всё, что определяет бренд, живёт в конфигурации, отдельно от кода.",[179,229,230,233],{},[197,231,232],{},"Гибкая стилизация",": цвета, типографика, логотипы, иконки приложений, сплэш-экраны и цветовой режим (светлый или тёмный) задаются для каждого бренда. Нетехнические менеджеры настраивают внешний вид бренда через админ-интерфейс — без разработчика, без изменения кода, без запроса на пересборку.",[179,235,236,239,240,245],{},[197,237,238],{},"Фиче-гейтинг",": не у всех брендов одинаковый набор функций. Наша система ",[241,242,244],"term",{"slug":243},"feature-flags","фиче-флагов"," включает или отключает функциональность для каждого приложения — премиум-бренды открывают продвинутые модули, региональные приложения переключают функции под конкретный рынок, а пилотные бренды получают ранний доступ — и всё это из конфигурации.",[208,247],{":items":248,":title":249},"[{\"label\": \"Тема и брендинг\", \"description\": \"Цвета, шрифты, иконки, сплэш и цветовой режим для каждого приложения\"}, {\"label\": \"Фиче-флаги\", \"description\": \"Включайте и отключайте возможности для каждого бренда независимо\"}, {\"label\": \"Идентичность в сторе\", \"description\": \"Название приложения, идентификаторы бандлов и метаданные стора для каждого листинга\"}, {\"label\": \"Платежи и интеграции\", \"description\": \"Конфигурация платежей, API и сторонних сервисов для каждого бренда\"}]","Настраивается под бренд, а не кодируется под бренд",[174,251,253],{"id":252},"автоматизация-сборки-и-развёртывания","Автоматизация сборки и развёртывания",[179,255,256],{},"Пятнадцать приложений — это пятнадцать сборок, пятнадцать настроек подписи и пятнадцать публикаций в сторах на каждый релиз. Именно на ручной работе white-label проекты обычно и рушатся. Мы автоматизируем весь конвейер сборки и релиза, чтобы выпуск всего парка был единой повторяемой операцией.",[179,258,259,260,265,266,271,272,277],{},"Мы используем ",[202,261,33],{"href":262,"rel":263},"https:\u002F\u002Ffastlane.tools",[264],"nofollow"," — отраслевой стандарт автоматизации для мобильных приложений — для управления подписью и provisioning-профилями, сборки и подписи бинарников iOS и Android, а также публикации каждого приложения в ",[202,267,270],{"href":268,"rel":269},"https:\u002F\u002Fdocs.fastlane.tools\u002Fgetting-started\u002Fios\u002Fappstore-deployment\u002F",[264],"App Store"," и ",[202,273,276],{"href":274,"rel":275},"https:\u002F\u002Fdocs.fastlane.tools\u002Fgetting-started\u002Fandroid\u002Frelease-deployment\u002F",[264],"Google Play"," вместе с метаданными и скриншотами. Нативная конфигурация сборки, нужная каждому бренду — идентификаторы приложений, идентификаторы бандлов, номера версий, подпись, иконки — генерируется автоматически из конфигурации бренда, поэтому настройки отдельных приложений никогда не правятся вручную.",[208,279],{":items":280,":title":281},"[{\"label\": \"Нативная конфигурация под бренд\", \"description\": \"Настройки сборки Android и iOS генерируются из конфигурации, без ручной правки\"}, {\"label\": \"Подписанные сборки\", \"description\": \"Автоматическая подпись и provisioning для всего парка\"}, {\"label\": \"Публикация в сторах\", \"description\": \"Fastlane загружает бинарники, метаданные и скриншоты в оба стора\"}, {\"label\": \"Повторяемые релизы\", \"description\": \"Каждый новый бренд наследует тот же проверенный путь деплоя\"}]","Автоматизировано от формы до стора",[174,283,285],{"id":284},"веб-админка","Веб-админка",[179,287,288,289,291],{},"Системой управляют через веб-админку, которую мы строим на ",[197,290,88],{},". Здесь менеджер создаёт новое брендированное приложение — вводит название бренда, загружает ресурсы, выбирает тему и цветовой режим, отмечает включённые функции и заполняет метаданные стора. Отправка формы генерирует конфигурацию бренда и запускает автоматизированный конвейер сборки.",[179,293,294,295,298,299,303],{},"Результат: новое брендированное приложение запускает ",[197,296,297],{},"сам нетехнический сотрудник",", а не разработчики. Число опубликованных приложений растёт, а инженерная команда — нет. Такие бэк-офисы — отдельная дисциплина: как мы их строим, рассказывает наша страница ",[202,300,302],{"href":301},"\u002Fservices\u002Fweb-development\u002Fadmin-dashboards","админ-панелей и дашбордов",".",[305,306],"how-to-schema",{":steps":307,"description":308,"name":309},"[{\"name\": \"Создайте бренд в админ-интерфейсе\", \"text\": \"Менеджер открывает админ-интерфейс на Nuxt, вводит название нового бренда, загружает логотип и ресурсы и заполняет метаданные для App Store и Google Play.\"}, {\"name\": \"Выберите тему и функции\", \"text\": \"Менеджер задаёт цвета бренда, типографику и цветовой режим (светлый или тёмный), затем включает нужные функции приложения — без изменения кода.\"}, {\"name\": \"Сгенерируйте конфигурацию и сборку\", \"text\": \"Отправка формы генерирует конфигурационный бандл бренда и запускает автоматизированный конвейер, который применяет нативные настройки сборки iOS и Android и выпускает подписанные приложения.\"}, {\"name\": \"Опубликуйте в сторах\", \"text\": \"Fastlane загружает подписанные бинарники, метаданные и скриншоты в App Store и Google Play, публикуя новое брендированное приложение под выбранным вами аккаунтом разработчика.\"}]","Процесс самообслуживания для создания и публикации нового брендированного приложения на white-label платформе.","Как запустить новое white-label приложение",[174,311,313],{"id":312},"модели-публикации-ваши-аккаунты-ваш-выбор","Модели публикации: ваши аккаунты, ваш выбор",[179,315,316],{},"То, как ваши приложения отображаются в сторах, — это стратегическое решение, и мы поддерживаем любую модель, которая подходит вашему бизнесу:",[318,319],"features-table",{":heading":320,":rows":321,":top-left-label":322},"[{\"label\": \"Единый аккаунт разработчика\"}, {\"label\": \"Аккаунт на приложение\"}, {\"label\": \"Гибкая \u002F смешанная\", \"hightlightLabel\": \"Чаще всего\"}]","[{\"label\": \"Присутствие в сторе\",\"cells\": [{\"text\": \"Все приложения под вашим аккаунтом\", \"color\": \"success\", \"icon\": \"lucide:check-circle\"},{ \"text\": \"Каждый бренд на своём аккаунте\", \"color\": \"success\", \"icon\": \"lucide:check-circle\"},{ \"text\": \"Комбинация по брендам при необходимости\", \"color\": \"success\", \"icon\": \"lucide:check-circle\"}]}, {\"label\": \"Разделение брендов\",\"cells\": [{\"text\": \"Приложения привязаны к одному издателю\", \"color\": \"warning\", \"icon\": \"lucide:minus\"},{ \"text\": \"Полное разделение по брендам\", \"color\": \"success\", \"icon\": \"lucide:check-circle\"},{ \"text\": \"Разделение там, где это важно\", \"color\": \"success\", \"icon\": \"lucide:check-circle\"}]}, {\"label\": \"Накладные расходы на настройку\",\"cells\": [{\"text\": \"Минимальные — один аккаунт\", \"color\": \"success\", \"icon\": \"lucide:check-circle\"},{ \"text\": \"Максимальные — аккаунт на приложение\", \"color\": \"warning\", \"icon\": \"lucide:minus\"},{ \"text\": \"Сбалансированные\", \"color\": \"success\", \"icon\": \"lucide:check-circle\"}]}, {\"label\": \"Лучше всего для\",\"cells\": [{\"text\": \"Одна компания, много суббрендов\", \"color\": \"neutral\"},{ \"text\": \"Независимые партнёрские бренды\", \"color\": \"neutral\"},{ \"text\": \"Растущие партнёрские сети\", \"color\": \"neutral\"}]}]","Модель публикации",[213,324,327],{":leading-icon":325,":title":326},"lucide:info","Не уверены, какая модель?",[179,328,329],{},"Конвейер поддерживает все три, и вы можете передумать позже — приложения могут публиковаться под единым аккаунтом разработчика, под отдельным аккаунтом на каждое приложение или в любом гибком сочетании. Мы поможем выбрать, исходя из независимости брендов, партнёрских соглашений и политики сторов.",[331,332,337,340],"testimonial",{"author":333,"avatar":334,"linkedin":335,"role":336},"Evgeny Syrtsov","\u002Fclients\u002Fevgeny-syrtsov.png","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fevgeny-syrtsov\u002F","Генеральный директор, Netgineers GmbH",[179,338,339],{},"Нам нужно было не одно приложение, а целое семейство брендированных приложений — по новому приложению на каждого партнёра, которого мы подключаем. Разрабатывать и поддерживать каждое из них нативно означало бы утонуть в затратах на разработку ещё до того, как мы вышли бы в ноль. Вся модель работает только тогда, когда запуск ещё одного брендированного приложения почти ничего не стоит.",[179,341,342],{},"Команда Nerdy Production дала нам ровно это: одну кодовую базу на Flutter, которая превращается в любое количество полностью брендированных приложений, и админ-панель, где наша собственная команда запускает новый бренд, не трогая код. Одно исправление попадает во все приложения, новые партнёры запускаются за часы, а не за недели, а стоимость следующего бренда близка к нулю. Они превратили то, что казалось невозможным, в повторяемый процесс — и позволили нам наращивать число приложений, не наращивая команду.",[174,344,346],{"id":345},"цены-на-разработку-white-label-приложений","Цены на разработку White-Label приложений",[179,348,349],{},"Прозрачные цены на создание и сопровождение white-label платформы",[351,352],"pricing-table",{":items":353},"[{\"title\": \"Стартовая платформа\", \"subtitle\": \"Одно приложение, готовое к масштабированию\", \"price\": \"whitelabel-app-development\u002Fstarter\", \"terms\": \"1-2 месяца\", \"lines\": [\"Flutter-приложение (iOS и Android)\", \"Система тем и брендинга\", \"Основа для фиче-флагов\", \"Автоматизация сборки и деплоя\", \"Публикация под единым аккаунтом\", \"До 2 стартовых брендов\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=whitelabel-app-development\", \"label\": \"Начать\"}},{\"highlight\": \"Популярно\",\"title\": \"Платформа для парка\", \"subtitle\": \"Создана для множества брендов\", \"price\": \"whitelabel-app-development\u002Ffleet\", \"terms\": \"2-3 месяца\", \"lines\": [\"Всё из Стартовой\", \"Веб-админка (Nuxt)\", \"Запуск новых приложений без разработчиков\", \"Автоматическая публикация в сторах\", \"Гибкие модели публикации\", \"Опциональное приложение для продавцов \u002F партнёров\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=whitelabel-app-development\", \"label\": \"Начать\"}},{\"title\": \"Корпоративный парк\", \"subtitle\": \"Большой масштаб и индивидуальная разработка\", \"price\": \"whitelabel-app-development\u002Fenterprise\", \"terms\": \"3+ месяцев\", \"lines\": [\"Всё из Платформы для парка\", \"Кастомный бэкенд и multi-tenant API\", \"Продвинутый фиче-гейтинг\", \"Отдельный аккаунт разработчика на приложение\", \"Аналитика по всему парку\", \"Выделенная поддержка и SLA\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=whitelabel-app-development\", \"label\": \"Начать\"}}]",[213,355,358],{":leading-icon":356,":title":357},"lucide:dollar-sign","Доступна индивидуальная оценка",[179,359,360],{},"Каждая white-label платформа уникальна. Эти диапазоны приблизительны — мы предоставим детальную оценку после того, как разберёмся, сколько брендов вы планируете запустить, какой у вас набор функций и какая стратегия публикации. Свяжитесь с нами для бесплатной консультации.",[174,362,364],{"id":363},"часто-задаваемые-вопросы","Часто задаваемые вопросы",[179,366,367],{},"Всё, что нужно знать о разработке white-label приложений",[369,370],"questions",{":items":371},"[{\"title\": \"Что такое white-label приложение?\", \"text\": \"White-label приложение — это одно приложение, которое можно переоформить и переопубликовать как множество отдельных, независимо брендированных приложений. У каждого своё название, логотип, цвета и листинг в сторе, но все они работают на одной общей кодовой базе — поэтому вы создаёте и поддерживаете один продукт, выпуская множество брендированных приложений.\"}, {\"title\": \"Почему Flutter — лучший выбор для white-label приложений?\", \"text\": \"Создание white-label приложений нативно означало бы поддержку двух кодовых баз (Swift и Kotlin) для каждого бренда. Flutter позволяет собирать iOS и Android для каждого бренда из одной кодовой базы на Dart, с пиксельной точностью тем и нативной производительностью. Одна правка или функция доходит до всего парка в следующем релизе, что делает этот подход единственным, при котором поддержка остаётся посильной с ростом масштаба.\"}, {\"title\": \"Как создаются и запускаются новые брендированные приложения?\", \"text\": \"Через веб-админку, которую мы строим на Nuxt. Нетехнический менеджер вводит название бренда, загружает ресурсы, выбирает тему, цветовой режим и включённые функции, заполняет метаданные стора. Отправка формы генерирует конфигурацию бренда и запускает автоматизированный конвейер сборки и деплоя (на базе Fastlane), который собирает подписанные приложения и публикует их в App Store и Google Play.\"}, {\"title\": \"Могут ли у разных брендов быть разные функции?\", \"text\": \"Да. Мы строим гибкую систему фиче-гейтинга, чтобы возможности можно было включать и отключать для каждого бренда из конфигурации. Премиум-бренды могут открывать продвинутые модули, региональные приложения — переключать функции под конкретный рынок, а пилотные бренды — получать ранний доступ, и всё это без изменения общего кода.\"}, {\"title\": \"Можно ли публиковать приложения под отдельными аккаунтами разработчика?\", \"text\": \"Да — приложения могут публиковаться под единым аккаунтом разработчика, под отдельным аккаунтом на каждое приложение или в любом гибком сочетании. Модель публикации — ваш выбор, исходя из независимости брендов, партнёрских соглашений и политики сторов, и автоматизированный конвейер поддерживает все три варианта.\"}]",[179,373,374,375,379,380,384],{},"Ритейл и программы лояльности — самая частая форма этой работы: кейс ",[202,376,378],{"href":377},"\u002Fportfolio\u002Fcashback-loyalty-platform","платформы кэшбэка и лояльности"," показывает эту архитектуру в живом продукте, а наша страница ",[202,381,383],{"href":382},"\u002Fservices\u002Fflutter-app-development\u002Fe-commerce","разработки e-commerce приложений"," описывает коммерческую сторону, к которой подключается такой парк приложений.",{"title":386,"searchDepth":387,"depth":387,"links":388},"",2,[389,390,391,392,393,394,395,396],{"id":176,"depth":387,"text":177},{"id":191,"depth":387,"text":192},{"id":223,"depth":387,"text":224},{"id":252,"depth":387,"text":253},{"id":284,"depth":387,"text":285},{"id":312,"depth":387,"text":313},{"id":345,"depth":387,"text":346},{"id":363,"depth":387,"text":364},"Запустите целый парк брендированных приложений из одной кодовой базы","md",{"heading":400,"text":401,"buttons":402},"Готовы построить свою White-Label платформу?","Расскажите о своих брендах и дорожной карте — обсудим, как собрать все ваши приложения на одной кодовой базе.",[403,409],{"to":404,"label":405,"leadingIcon":406,"color":407,"variant":408},"\u002Fcontact","Начать проект","lucide:message-circle","neutral","outline",{"to":377,"label":410,"color":411,"variant":412},"Смотреть кейс","primary","solid",[414,416],{"to":404,"label":415,"leadingIcon":406,"color":411,"variant":412},"Бесплатная консультация",{"to":417,"label":418,"color":407,"variant":408},"#цены-на-разработку-white-label-приложений","Посмотреть цены",{"url":420,"alt":169,"text":421},"\u002Fservices\u002Fwhitelabel.webp","Одна кодовая база, неограниченное число брендов",{},"Разработка white-label приложений: одна Flutter-кодовая база — парк брендированных приложений для iOS и Android с темами под бренд и автопубликацией в сторах.",true,"Парк брендированных приложений из одной кодовой базы: тема под каждый бренд, автоматические сборки и публикация, которая проходит ревью App Store.",null,"\u002Fservices\u002Fwhitelabel-app-development",{"title":169,"description":397},"whitelabel-app-development","services\u002Fwhitelabel-app-development","2026-09-05","H9nf8bd-UbKFdvMYGTgJ0s711xYqKSem3ayCoaYvOCw",[],[435,450,463,478,492,507,523,536,549,566,579,590,600,613,625,636,645,659,672,679,693,708,721,734,747,758,769,780,793,803,816,828,842,853,867,876,887,900,913,926,939,950,962,974,986,998,1009,1023,1034,1046,1057,1070,1082],{"slug":436,"term":437,"definition":438,"category":439,"aliases":440,"links":442,"related":446,"readMore":-1,"target":448,"hasArticle":449},"aosp","AOSP","Android Open Source Project — Android без надстройки Google, который может форкнуть кто угодно. На его форках работают кассовые терминалы, киоски и автомобильные системы, а работа на этом уровне открывает части ОС, которых прикладной разработчик не видит.","platform",[441],"Android Open Source Project",[443],{"kind":444,"url":445},"website","https:\u002F\u002Fsource.android.com\u002F",[447],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":451,"term":452,"definition":453,"category":439,"aliases":454,"links":455,"related":459,"readMore":-1,"target":462,"hasArticle":449},"app-clips","App Clips","Функция Apple, позволяющая запустить небольшую часть iOS-приложения — до 15 МБ — не устанавливая его целиком. Вызывается по QR-коду, NFC-метке или ссылке: для случаев, когда первое действие пользователя не должно требовать похода в App Store.",[],[456],{"kind":457,"url":458},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[460,461],"deep-linking","install-referrer","\u002Fglossary#app-clips",{"slug":464,"term":465,"definition":466,"category":439,"aliases":467,"links":468,"related":474,"readMore":-1,"target":477,"hasArticle":449},"bigquery","BigQuery","Аналитическое хранилище Google Cloud. Вы запускаете SQL по миллиардам строк, и они сканируются за секунды, а данные при этом лежат отдельно от машин, выполняющих запросы. Именно это снимает отчётность и исследование данных с базы, обслуживающей живой трафик.",[],[469,471],{"kind":444,"url":470},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":472,"url":473},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[475,476],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":479,"term":480,"definition":481,"category":482,"aliases":483,"links":487,"related":490,"readMore":-1,"target":491,"hasArticle":449},"ci-cd","CI\u002FCD","Автоматизация, которая собирает, тестирует и выкладывает каждое изменение без ручного запуска команд. В мобильной разработке это то, что превращает релиз в нажатие кнопки вместо полудня ожидания, пока освободится нужный человек.","practice",[484,485,486],"CI","непрерывная интеграция","непрерывная поставка",[488],{"kind":472,"url":489},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":493,"term":494,"definition":495,"category":496,"aliases":497,"links":500,"related":503,"readMore":-1,"target":506,"hasArticle":449},"crud","CRUD","Create, read, update, delete — четыре операции, стоящие почти за каждой формой и админкой. Собирательное название для рутинной половины приложения, которая управляет данными, в отличие от частей с реальной предметной логикой.","architecture",[498,499],"Create, Read, Update, Delete","создание, чтение, обновление, удаление",[501],{"kind":472,"url":502},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[504,505],"rest","graphql","\u002Fglossary#crud",{"slug":508,"term":509,"definition":510,"category":482,"aliases":511,"links":515,"related":520,"readMore":-1,"target":522,"hasArticle":449},"dev-container","Dev Container","Среда разработки, описанная один раз в devcontainer.json — ОС, инструменты и версии рантаймов, которые нужны проекту, — и открываемая одинаково внутри контейнера в редакторе любого участника, вместо инструкции по установке, которую каждый понимает по-своему.",[512,513,514],"devcontainer.json","Dev Containers","VS Code Dev Containers",[516,518],{"kind":444,"url":517},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":457,"url":519},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[521],"container-registry","\u002Fglossary#dev-container",{"slug":476,"term":524,"definition":525,"category":439,"aliases":526,"links":529,"related":534,"readMore":-1,"target":535,"hasArticle":449},"Elasticsearch","Поисковый и аналитический движок, который индексирует записи, чтобы их можно было интерактивно фильтровать и искать, а не сканировать. К нему обращаются, когда вопрос звучит как «покажи вот эти сессии с шестью фильтрами», а не «просуммируй колонку».",[527,528],"Elastic","ELK",[530,532],{"kind":444,"url":531},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":472,"url":533},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[464],"\u002Fglossary#elasticsearch",{"slug":537,"term":538,"definition":539,"category":496,"aliases":540,"links":543,"related":544,"readMore":-1,"target":548,"hasArticle":449},"fan-out","Fan-out","Чтение источника один раз и доставка каждого обновления всем подписанным на него клиентам. Наивная версия пишет подписчикам в цикле и встаёт, как только один из сокетов начинает тормозить; рабочая — держит отдельный буфер на каждого клиента и отключает тех, кто не успевает.",[541,542],"веерная рассылка","фан-аут",[],[545,546,547],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":550,"term":551,"definition":552,"category":482,"aliases":553,"links":556,"related":561,"readMore":-1,"target":565,"hasArticle":449},"gdpr","GDPR","Регламент ЕС о персональных данных людей в ЕС: законное основание для сбора, настоящее согласие на трекинг, право увидеть и удалить свои данные. Он следует за вашими пользователями, а не за вашими серверами: где зарегистрирована компания, значения не имеет.",[554,555],"Общий регламент по защите данных","General Data Protection Regulation",[557,559],{"kind":444,"url":558},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":472,"url":560},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[562,563,564],"pci-dss","soc-2","hipaa","\u002Fglossary#gdpr",{"slug":567,"term":568,"definition":569,"category":482,"aliases":570,"links":574,"related":577,"readMore":-1,"target":578,"hasArticle":449},"golden-test","Golden-тест","Тест, который отрисовывает виджет и сравнивает результат попиксельно с эталонным изображением. Во Flutter это самый дешёвый способ узнать, не сломал ли редизайн пустое состояние на 320pt, в тёмной теме, при 200% масштабе текста.",[571,572,573],"golden test","золотой тест","скриншотный тест",[575],{"kind":457,"url":576},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[479],"\u002Fglossary#golden-test",{"slug":505,"term":580,"definition":581,"category":496,"aliases":582,"links":583,"related":588,"readMore":-1,"target":589,"hasArticle":449},"GraphQL","Язык запросов к API, где клиент сам перечисляет нужные поля и получает один ответ ровно такой формы. Он снимает избыточную выдачу, к которой дрейфуют REST-эндпоинты, и добавляет собственный режим отказа: неограниченный запрос, обходящий всю модель данных.",[],[584,586],{"kind":444,"url":585},"https:\u002F\u002Fgraphql.org\u002F",{"kind":472,"url":587},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[504],"\u002Fglossary#graphql",{"slug":564,"term":591,"definition":592,"category":482,"aliases":593,"links":595,"related":598,"readMore":-1,"target":599,"hasArticle":449},"HIPAA","Закон США о защищённой медицинской информации: как её можно хранить, передавать, логировать и раскрывать. Как и PCI-DSS, это архитектурное ограничение, которое выбирают в начале, а не документ, который дописывают перед запуском.",[594],"Health Insurance Portability and Accountability Act",[596],{"kind":472,"url":597},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[562,550,563],"\u002Fglossary#hipaa",{"slug":601,"term":602,"definition":603,"category":496,"aliases":604,"links":607,"related":610,"readMore":-1,"target":612,"hasArticle":449},"headless-cms","Headless CMS","Система управления контентом с админкой и API, но без собственного фронтенда. Редакторы публикуют в одном месте, а сайт или приложение отрисовывает контент само — слой представления принадлежит вам, а не вендору CMS.",[605,606],"безголовая CMS","контентное API",[608],{"kind":472,"url":609},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[611,504],"server-side-rendering","\u002Fglossary#headless-cms",{"slug":447,"term":614,"definition":615,"category":439,"aliases":616,"links":620,"related":623,"readMore":-1,"target":624,"hasArticle":449},"Host Card Emulation","Режим, в котором Android-телефон программно эмулирует бесконтактную карту по NFC, без аппаратного защищённого элемента. Так платит приложение-кошелёк на терминале: телефон говорит с ним по тому же протоколу EMV Contactless, что и пластиковая карта.",[617,618,619],"HCE","EMV Contactless","бесконтактные платежи",[621],{"kind":457,"url":622},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[562,436],"\u002Fglossary#host-card-emulation",{"slug":626,"term":627,"definition":628,"category":439,"aliases":629,"links":630,"related":633,"readMore":-1,"target":635,"hasArticle":449},"impeller","Impeller","Движок рендеринга, на котором Flutter работает сегодня: по умолчанию на iOS с 2023 года и на Android с 2024-го. Он компилирует шейдеры заранее, а не во время первой анимации, что убрало главную видимую проблему Flutter в проде — джанк на компиляции шейдеров.",[],[631],{"kind":457,"url":632},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[634],"skia","\u002Fglossary#impeller",{"slug":461,"term":637,"definition":638,"category":439,"aliases":639,"links":640,"related":643,"readMore":-1,"target":644,"hasArticle":449},"Install Referrer","API Google Play, который передаёт только что установленному Android-приложению параметры кампании из ссылки, приведшей к установке. Android-половина отложенного диплинкинга и надёжный способ понять, откуда пришёл пользователь.",[],[641],{"kind":457,"url":642},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[460,451],"\u002Fglossary#install-referrer",{"slug":646,"term":647,"definition":648,"category":649,"aliases":650,"links":652,"related":657,"readMore":-1,"target":658,"hasArticle":449},"jwt","JWT","Подписанный токен, несущий свои данные внутри: сервер понимает, кому принадлежит запрос, не обращаясь к хранилищу сессий. Стандарт мобильной аутентификации. Подпись доказывает, что токен не меняли, но не скрывает его содержимое.","protocol",[651],"JSON Web Token",[653,655],{"kind":444,"url":654},"https:\u002F\u002Fjwt.io\u002F",{"kind":472,"url":656},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[562],"\u002Fglossary#jwt",{"slug":660,"term":661,"definition":662,"category":482,"aliases":663,"links":667,"related":670,"readMore":-1,"target":671,"hasArticle":449},"kyc","KYC","Know Your Customer — проверки личности, которые регулируемый финансовый продукт проводит, прежде чем разрешить переводить деньги: съёмка документов, liveness, санкционный и антиотмывочный скрининг. На онбординг это влияет сильнее любого дизайн-решения.",[664,665,666],"Know Your Customer","AML","KYC\u002FAML",[668],{"kind":472,"url":669},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[562,550],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":673,"category":439,"aliases":674,"links":676,"related":677,"readMore":678,"target":678,"hasArticle":449},"Переиспользование бизнес-логики на Kotlin между Android, iOS и сервером, при этом интерфейс на каждой платформе остаётся нативным. Альтернатива Flutter, когда UI обязан быть нативным, а правила за ним — нет.",[675],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":680,"term":681,"definition":682,"category":683,"aliases":684,"links":687,"related":690,"readMore":-1,"target":692,"hasArticle":449},"mvp","MVP","Минимальная версия продукта, которую можно показать реальным пользователям и которая при этом отвечает на вопрос, ради которого его делали. Решение об объёме, а не о качестве: MVP всё равно обязан работать.","business",[685,686],"минимально жизнеспособный продукт","minimum viable product",[688],{"kind":472,"url":689},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[691],"white-label","\u002Fglossary#mvp",{"slug":694,"term":695,"definition":696,"category":649,"aliases":697,"links":701,"related":706,"readMore":-1,"target":707,"hasArticle":449},"oauth","OAuth","Стандарт, на котором держатся «Вход через Apple», Google и остальные: пользователь авторизует ваше приложение у провайдера, которому уже доверяет, а приложение получает токен вместо пароля. Никто не заводит новый пароль, и вы его не храните.",[698,699,700],"OAuth 2.0","вход через соцсети","Sign in with Apple",[702,704],{"kind":444,"url":703},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":472,"url":705},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[646],"\u002Fglossary#oauth",{"slug":562,"term":709,"definition":710,"category":482,"aliases":711,"links":714,"related":719,"readMore":-1,"target":720,"hasArticle":449},"PCI-DSS","Стандарт безопасности карточной индустрии, обязательный для всех, кто хранит, обрабатывает или передаёт данные карт. Большинство приложений намеренно остаются вне зоны его действия, отдавая ввод карты сертифицированному платёжному провайдеру.",[712,713],"PCI DSS","Payment Card Industry Data Security Standard",[715,717],{"kind":444,"url":716},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":472,"url":718},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[646],"\u002Fglossary#pci-dss",{"slug":722,"term":723,"definition":724,"category":683,"aliases":725,"links":728,"related":731,"readMore":-1,"target":733,"hasArticle":449},"product-market-fit","Product-market fit","Момент, когда продукт доказуемо нашёл своих людей: они им пользуются, возвращаются и платят. До него разработка отвечает на вопрос, после — на спрос.",[726,727],"PMF","соответствие продукта рынку",[729],{"kind":472,"url":730},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[680,732],"time-to-market","\u002Fglossary#product-market-fit",{"slug":735,"term":736,"definition":737,"category":482,"aliases":738,"links":741,"related":744,"readMore":-1,"target":746,"hasArticle":449},"prompt-injection","Prompt injection","Атака, при которой текст от пользователя языковая модель читает как инструкции, а не как данные, и уходит в обход собственных правил. Родственник SQL-инъекции в эпоху LLM: возникает везде, где пользовательский ввод склеивается в промпт.",[739,740],"инъекция промпта","инъекция в промпт",[742],{"kind":472,"url":743},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[745],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":546,"term":748,"definition":749,"category":496,"aliases":750,"links":753,"related":756,"readMore":-1,"target":757,"hasArticle":449},"Pub\u002FSub","Шаблон обмена сообщениями: производитель публикует событие, а любое число потребителей независимо читает его через стоящий между ними брокер. Производитель никогда их не ждёт — так путь запроса остаётся быстрым, а более медленная работа выполняется в фоне.",[751,752],"публикация\u002Fподписка","Google Cloud Pub\u002FSub",[754],{"kind":472,"url":755},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":504,"term":759,"definition":760,"category":496,"aliases":761,"links":764,"related":767,"readMore":-1,"target":768,"hasArticle":449},"REST","Общепринятый стиль HTTP-API: URL называет ресурс, а HTTP-метод говорит, что с ним сделать. Способ по умолчанию, которым приложение общается с бэкендом, и то, что ожидает найти большинство сторонних интеграций.",[762,763],"REST API","Representational State Transfer",[765],{"kind":472,"url":766},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[545,547],"\u002Fglossary#rest",{"slug":563,"term":770,"definition":771,"category":482,"aliases":772,"links":775,"related":778,"readMore":-1,"target":779,"hasArticle":449},"SOC 2","Отчёт внешнего аудитора о том, как компания обращается с данными клиентов — безопасность, доступность, конфиденциальность, — а не сертификат, который можно купить. Корпоративные заказчики его требуют, а архитектуру он ограничивает задолго до самого аудита.",[773,774],"SOC2","System and Organization Controls",[776],{"kind":472,"url":777},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[562,550,564],"\u002Fglossary#soc-2",{"slug":781,"term":782,"definition":783,"category":683,"aliases":784,"links":787,"related":790,"readMore":-1,"target":792,"hasArticle":449},"saas","SaaS","Софт, который продают как постоянную подписку на размещённый у поставщика продукт, а не как разовую лицензию для установки у себя. Поставщик держит серверы, непрерывно выкатывает обновления и берёт плату за пользователя или за объём.",[785,786],"Software as a Service","ПО как услуга",[788],{"kind":472,"url":789},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[791,691],"multi-tenancy","\u002Fglossary#saas",{"slug":547,"term":794,"definition":795,"category":649,"aliases":796,"links":798,"related":801,"readMore":-1,"target":802,"hasArticle":449},"Server-Sent Events","Односторонний поток от сервера к клиенту поверх обычного HTTP-соединения. Проще, чем WebSocket, и достаточен там, где только серверу есть что сказать: прогресс операции, ответ AI, приходящий токен за токеном.",[797],"SSE",[799],{"kind":472,"url":800},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[545,504],"\u002Fglossary#server-sent-events",{"slug":634,"term":804,"definition":805,"category":439,"aliases":806,"links":809,"related":814,"readMore":-1,"target":815,"hasArticle":449},"Skia","Открытая 2D-графическая библиотека Google, которая рисует Chrome, Android и — до появления Impeller — каждый кадр Flutter. Она умеет выводить не только на экран, но и в PDF: именно это делает «печать в PDF» в Chrome.",[807,808],"Skia Graphics Engine","skia-safe",[810,812],{"kind":444,"url":811},"https:\u002F\u002Fskia.org\u002F",{"kind":472,"url":813},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[626],"\u002Fglossary#skia",{"slug":817,"term":818,"definition":819,"category":683,"aliases":820,"links":824,"related":825,"readMore":-1,"target":827,"hasArticle":449},"staff-augmentation","Staff augmentation","Модель найма, при которой инженеры внешнего партнёра входят в вашу команду и работают под вашим управлением — в вашем репозитории, ваших спринтах, вашем процессе, — а не сдают отдельный проект. Вы покупаете ресурс; код и контекст остаются у вас.",[821,822,823],"аутстаффинг","расширение команды","выделенные разработчики",[],[826,732],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":829,"term":830,"definition":831,"category":649,"aliases":832,"links":836,"related":839,"readMore":-1,"target":841,"hasArticle":449},"tls","TLS","Слой шифрования под HTTPS. Он подтверждает, что сервер именно тот, о ком говорит его сертификат, согласует свежий ключ на сессию и шифрует всё дальнейшее — сеть между вами видит шифртекст и не может незаметно его изменить.",[833,834,835],"SSL","HTTPS","Transport Layer Security",[837],{"kind":472,"url":838},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[840,646],"end-to-end-encryption","\u002Fglossary#tls",{"slug":732,"term":843,"definition":844,"category":683,"aliases":845,"links":848,"related":851,"readMore":-1,"target":852,"hasArticle":449},"Time to market","Время от решения строить продукт до момента, когда им пользуются настоящие люди. Большинство споров о стеке и объёме работ — на самом деле споры об этом числе: каждая сэкономленная неделя — это неделя выручки, обратной связи и позиции на рынке.",[846,847],"TTM","время выхода на рынок",[849],{"kind":472,"url":850},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[680,826],"\u002Fglossary#time-to-market",{"slug":854,"term":855,"definition":856,"category":649,"aliases":857,"links":859,"related":864,"readMore":-1,"target":866,"hasArticle":449},"webrtc","WebRTC","Браузерный и мобильный стандарт для передачи аудио, видео и данных напрямую между двумя устройствами; серверы участвуют только в том, чтобы их познакомить. На нём строят видеозвонок внутри приложения, когда не берут готовый SDK.",[858],"Web Real-Time Communication",[860,862],{"kind":444,"url":861},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":472,"url":863},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[865,545],"xmpp","\u002Fglossary#webrtc",{"slug":545,"term":868,"definition":869,"category":649,"aliases":870,"links":871,"related":874,"readMore":-1,"target":875,"hasArticle":449},"WebSocket","Протокол, который держит одно соединение между клиентом и сервером открытым, чтобы любая сторона могла отправить данные в любой момент, а не клиент спрашивал снова и снова. На нём работают живые котировки, чаты и статусы присутствия.",[],[872],{"kind":472,"url":873},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[547,504],"\u002Fglossary#websocket",{"slug":691,"term":877,"definition":878,"category":683,"aliases":879,"links":882,"related":885,"readMore":886,"target":886,"hasArticle":424},"White-label","Один продукт, выпускаемый под многими брендами. White-label платформа собирает каждому клиенту готовое к публикации приложение со своим названием, оформлением и контентом из общей кодовой базы, а не форкает проект под заказчика.",[880,881],"белый лейбл","мультитенантное приложение",[883],{"kind":472,"url":884},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[680],"\u002Fglossary\u002Fwhite-label",{"slug":865,"term":888,"definition":889,"category":649,"aliases":890,"links":893,"related":898,"readMore":-1,"target":899,"hasArticle":449},"XMPP","Открытый федеративный протокол обмена сообщениями и давняя альтернатива тому, чтобы писать чат-бэкенд самому или арендовать чужой. Он покрывает статусы присутствия, индикаторы набора и передачу файлов, а зрелые клиентские библиотеки есть под любую платформу.",[891,892],"Jabber","Extensible Messaging and Presence Protocol",[894,896],{"kind":444,"url":895},"https:\u002F\u002Fxmpp.org\u002F",{"kind":472,"url":897},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[854,545],"\u002Fglossary#xmpp",{"slug":901,"term":902,"definition":903,"category":683,"aliases":904,"links":908,"related":911,"readMore":-1,"target":912,"hasArticle":449},"in-app-purchase","Встроенные покупки","Продажа цифровых товаров и подписок через биллинг Apple и Google, который оба стора требуют для цифрового контента и с которого берут комиссию. Сложность никогда не в самой покупке, а в её восстановлении на новом устройстве и в честном учёте прав доступа.",[905,906,907],"in-app purchase","IAP","внутренние покупки",[909],{"kind":457,"url":910},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[722],"\u002Fglossary#in-app-purchase",{"slug":460,"term":914,"definition":915,"category":439,"aliases":916,"links":921,"related":924,"readMore":925,"target":925,"hasArticle":424},"Диплинкинг","Ссылка, которая открывает конкретный экран внутри установленного приложения, а не его главную или веб-страницу. Отложенный диплинкинг переживает установку: нажатие, прошедшее через магазин приложений, всё равно приводит на нужный экран.",[917,918,919,920],"deep linking","отложенный диплинкинг","Universal Links","Android App Links",[922],{"kind":472,"url":923},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[451,461],"\u002Fglossary\u002Fdeep-linking",{"slug":927,"term":928,"definition":929,"category":496,"aliases":930,"links":934,"related":937,"readMore":-1,"target":938,"hasArticle":449},"multi-arch-image","Мультиархитектурный образ","Один тег образа, который разрешается в разные бинарники для каждой архитектуры процессора — обычно это пара linux\u002Famd64 и linux\u002Farm64, — так что один и тот же docker pull работает без изменений и на серверах Intel\u002FAMD, и на ноутбуках с Apple Silicon.",[931,932,933],"мультиарх-сборка","multi-arch build","linux\u002Famd64 + linux\u002Farm64",[935],{"kind":457,"url":936},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[521],"\u002Fglossary#multi-arch-image",{"slug":791,"term":940,"definition":941,"category":496,"aliases":942,"links":945,"related":948,"readMore":-1,"target":949,"hasArticle":449},"Мультитенантность","Один развёрнутый бэкенд обслуживает много клиентов, и каждый видит только свои данные, конфигурацию и включённые функции, потому что контекст тенанта определяется для каждого запроса. Именно это делает линейку брендированных приложений одним продуктом, а не набором форков.",[791,943,944],"мультиарендность","тенант",[946],{"kind":472,"url":947},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[691,243],"\u002Fglossary#multi-tenancy",{"slug":475,"term":951,"definition":952,"category":496,"aliases":953,"links":957,"related":960,"readMore":-1,"target":961,"hasArticle":449},"Объектное хранилище","Хранилище, которое держит файл целиком под ключом, а не в дереве файловой системы, — Amazon S3 и множество сервисов, совместимых с его API. Дешёвое, практически безграничное, привычное место для сырых событий, бэкапов и медиа: пишется один раз, читается редко, хранится вечно.",[954,955,956],"S3","S3-совместимое хранилище","блоб-хранилище",[958],{"kind":472,"url":959},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[464],"\u002Fglossary#object-storage",{"slug":745,"term":963,"definition":964,"category":482,"aliases":965,"links":969,"related":972,"readMore":-1,"target":973,"hasArticle":449},"Ограничение частоты запросов","Предел на число запросов от одного клиента за заданный интервал. Именно он не даёт одному увлечённому пользователю, скраперу или боту потратить месячный бюджет платного API за вечер, и стоять он должен на вашей стороне интеграции.",[966,967,968],"rate limiting","рейт-лимит","троттлинг",[970],{"kind":472,"url":971},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[735],"\u002Fglossary#rate-limiting",{"slug":975,"term":976,"definition":977,"category":439,"aliases":978,"links":981,"related":984,"readMore":-1,"target":985,"hasArticle":449},"platform-channels","Платформенные каналы","Мост, через который Flutter-приложение вызывает нативный код iOS и Android — Keychain и Keystore, биометрию, платёжные шторки, любой SDK без Dart-пакета. Работа рутинная, но настоящая, и первое место, где споткнётся инженер, не выходивший за пределы Dart.",[979,980],"platform channels","method channel",[982],{"kind":457,"url":983},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":987,"term":988,"definition":989,"category":649,"aliases":990,"links":993,"related":996,"readMore":-1,"target":997,"hasArticle":449},"post-quantum-cryptography","Постквантовая криптография","Алгоритмы шифрования, рассчитанные на устойчивость к будущему квантовому компьютеру; стандарты уже финализированы NIST. Мигрировать нужно до появления железа: трафик, записанный сегодня, расшифруют, когда такая машина появится.",[991,992],"PQC","постквантовое шифрование",[994],{"kind":472,"url":995},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[829,840],"\u002Fglossary#post-quantum-cryptography",{"slug":999,"term":1000,"definition":1001,"category":482,"aliases":1002,"links":1006,"related":1007,"readMore":-1,"target":1008,"hasArticle":449},"staged-rollout","Поэтапная раскатка","Релиз сначала на небольшой процент пользователей и расширение только тогда, когда доля сессий без падений держится. Плохая сборка, пойманная на десяти процентах, — испорченный вечер; она же на ста процентах — испорченная неделя.",[1003,1004,1005],"staged rollout","phased release","канареечный релиз",[],[243,479],"\u002Fglossary#staged-rollout",{"slug":521,"term":1010,"definition":1011,"category":496,"aliases":1012,"links":1018,"related":1021,"readMore":-1,"target":1022,"hasArticle":449},"Реестр контейнеров","Хранилище образов контейнеров, адресуемых по имени и тегу, — Docker Hub, GitHub Container Registry или собственный реестр облачного провайдера. Публикация сборки в реестр превращает «у меня работает» в образ, который любой может скачать и запустить без изменений.",[1013,1014,1015,1016,1017],"реестр образов","Docker registry","GHCR","ghcr.io","container registry",[1019],{"kind":457,"url":1020},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[508,927],"\u002Fglossary#container-registry",{"slug":611,"term":1024,"definition":1025,"category":496,"aliases":1026,"links":1029,"related":1032,"readMore":-1,"target":1033,"hasArticle":449},"Серверный рендеринг","Сборка страницы в готовый HTML на сервере, чтобы первый же ответ содержал контент, заголовки, метатеги и структурированные данные. Краулеры, превью ссылок и медленные устройства читают это, не выполняя JavaScript.",[1027,1028],"SSR","server-side rendering",[1030],{"kind":472,"url":1031},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[601],"\u002Fglossary#server-side-rendering",{"slug":840,"term":1035,"definition":1036,"category":496,"aliases":1037,"links":1041,"related":1044,"readMore":-1,"target":1045,"hasArticle":449},"Сквозное шифрование","Шифрование, которое накладывается на устройстве отправителя и снимается только на устройстве получателя, так что сервис, передающий сообщение, не может его прочитать — ни по решению суда, ни после взлома. Оно защищает содержимое, но никогда — метаданные.",[1038,1039,1040],"E2EE","end-to-end encryption","оконечное шифрование",[1042],{"kind":472,"url":1043},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[829,646],"\u002Fglossary#end-to-end-encryption",{"slug":826,"term":1047,"definition":1048,"category":683,"aliases":1049,"links":1052,"related":1055,"readMore":-1,"target":1056,"hasArticle":449},"Совокупная стоимость владения","Во что продукт обходится за всю жизнь, а не только на этапе разработки: поддержка, обновления, ежегодные миграции на новые ОС и правила сторов, вторая команда, чтобы две кодовые базы не расходились. Обычно больше сметы на разработку и почти никогда в неё не входит.",[1050,1051],"TCO","total cost of ownership",[1053],{"kind":472,"url":1054},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[732],"\u002Fglossary#total-cost-of-ownership",{"slug":1058,"term":1059,"definition":1060,"category":496,"aliases":1061,"links":1065,"related":1068,"readMore":-1,"target":1069,"hasArticle":449},"state-management","Управление состоянием","То, как приложение решает, где живёт значение, кому позволено его менять и какие части экрана перерисовываются, когда оно меняется. Во Flutter выбор между Riverpod, BLoC и Provider — одно из первых архитектурных решений и одно из самых трудных для пересмотра.",[1062,1063,1064],"state management","BLoC","Riverpod",[1066],{"kind":457,"url":1067},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[567],"\u002Fglossary#state-management",{"slug":243,"term":1071,"definition":1072,"category":482,"aliases":1073,"links":1077,"related":1080,"readMore":-1,"target":1081,"hasArticle":449},"Фиче-флаги","Переключатели, которые включают и выключают функциональность из конфигурации, а не из релиза. Один бинарник ведёт себя по-разному для разных брендов, рынков и пользователей, а рискованную фичу можно погасить, не отправляя новую сборку на ревью.",[1074,1075,1076],"feature flags","фиче-флаги","feature toggle",[1078],{"kind":472,"url":1079},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[999,691,791],"\u002Fglossary#feature-flags",{"slug":1083,"term":1084,"definition":1085,"category":496,"aliases":1086,"links":1090,"related":1093,"readMore":-1,"target":1094,"hasArticle":449},"floating-point","Числа с плавающей точкой","Двоичный формат IEEE 754, стоящий за double и float. Он не хранит 0.1 точно, поэтому 0.1 + 0.2 даёт 0.30000000000000004 — незаметно в графике и фатально в деньгах, которым место в целых минорных единицах или в decimal-типе.",[1087,1088,1089],"IEEE 754","double","плавающая запятая",[1091],{"kind":472,"url":1092},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point"]