Чеклист перед релизом¶
См. также: 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— указывается
- URL обращений:
- Права в
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