Skip to content

Чеклист перед релизом

См. также: deploy.md · rules.md · styling.md · self-provisioning.md Home

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


config.json

  • Валидный JSON
  • Поле name — название приложения
  • Поле package — имя пакета (имя папки приложения)
  • Поле description — краткое описание (1-2 предложения)
  • Поле about — подробное описание со всеми разделами (Что делает, Где появляется, Возможности, Как пользоваться, Настройка)
  • В about — прямые ссылки на разделы CRM, где появляется приложение (напр. /db/tt_tasks, /db/ag_cashflows)
  • Поле logo — путь к SVG/PNG иконке в zip
  • Все URL в urls — относительные (для локальных) или абсолютные (для remote)
  • method: "get" указан в urlsConf для локальных фреймов
  • Секция permissions объявлена — перечислены все используемые каталоги и операции

Адаптивность и мобильные

  • Адаптивная вёрстка — таблицы на мобильных отображаются плитками/карточками
  • Размер шрифта в полях ввода (input, select, textarea) — не менее 16px (иначе iOS Safari зумит страницу при фокусе)
  • Кликабельные элементы (табы, кнопки) — <a> или <button>, не <div> (iOS не обрабатывает клик на div)
  • Протестировано на мобильном устройстве

UI и UX

  • Иконка шестерёнки (⚙) в интерфейсе — открывает настройки приложения или экран установки/self-provisioning с логом
  • Self-provisioning: экран установки с прогрессом, результат сохраняется в App.storage (флаг installed: true)
  • Формы ввода: минимальная строгость к обязательным полям — не требовать то, без чего можно обойтись
  • Приложение работает при пустых данных (каталог пуст) — показывает осмысленное состояние, не ошибку

Код

  • В zip нет запрещённых файлов (php, exe, sh и т.д.)
  • config.json лежит в корне архива
  • App.setFrameSize() вызывается после рендера для подгонки высоты
  • Авторесайз: body { overflow: hidden } + requestAnimationFrame(() => App.setFrameSize(null, document.body.scrollHeight))
  • Внешние API вызываются через App.fetch(), а не напрямую
  • /db/ запросы с form[], /api/db/ — без form[]
  • Стили не зависят от CSS платформы (iframe изолирован)
  • Self-provisioning проверяет каталог через custom_dbtables, а не /db/{catalog}.json
  • custom_ префикс везде при обращении к собственным каталогам и полям:
    • URL обращений: App.fetch('/db/custom_my_catalog.json'), не /db/my_catalog.json
    • Чтение полей записей: record.custom_my_field, не record.my_field
    • В permissions.catalogs: "custom_my_catalog": ["read", "write"]
    • В config.json точках встраивания (menu, catalogs.*): тоже с custom_
    • Исключение — при создании самого каталога в custom_dbtables.dbname префикс не указывается (платформа добавляет сама), а при создании поля в custom_dbfields.schemeуказывается
  • Права в access_db прописаны для нужных ролей:
    • По умолчанию после создания каталога видны только админам (acctype_root=1, acctype_adm=1, остальные = 0)
    • Рекомендуемый дефолт для миниапов: 2 (self — только свои) всем ролям — самый типовой и безопасный паттерн
    • Использовать значение 1 (все записи организации) только для коллаборативных каталогов (задачи, клиенты)
    • Готовый код и функция configureAccess(catalog, defaultValue) — см. self-provisioning.md
    • Альтернатива: в about раздел «Настройка» инструкция админу прописать права
  • При массовом создании записей — явно генерировать form[alias], передавать form[from_auth] и form[from_group]

После установки

  • Если приложение имеет полноэкранный фрейм (пункт меню) — в документации указана прямая ссылка на страницу
  • Если приложение — виджет дашборда (app-frame) — создан пример виджета на «Основной» рабочий стол
  • Если приложение встраивается в каталог — в about перечислены все точки встраивания со ссылками

Home