Releases: aiserrock/acits-flutter
Releases · aiserrock/acits-flutter
Release list
v0.10.0
- Редактор фото животного (zoom, поворот, обрезка) на
pro_image_editor— web и mobile. - Рабочий поиск с чипсами сортировки («Сегодня», «Животные»).
- Splash-автовход: бесшовный splash (нативный/DOM), персист приюта и локали, случайная loading-анимация.
- Компактный переключатель языка под кнопкой регистрации.
- Web: PDF «поделиться»/«скачать» отдавал пустой файл (pdfx делал буфер detached через transferable) — теперь отдаётся полный файл.
- Web: фото в свёрнутом кружке шапки карточки грузится через CORS-прокси (была заглушка вместо фото).
- Тёмная тема: цвета сегмент-переключателя, drawer, шиммер загрузки картинок, логотип на регистрации.
- Auth: не терять refresh-токен при автовходе.
- Тёмная тема: переключаемая светлая/тёмная схема через
ColorScheme; переключатель в настройках. - Просмотрщик PDF: pinch-zoom и кнопки +/− (ограничение 100–200%), кнопка поворота страницы (0° ↔ 90°), кнопка скачивания (работает на всех платформах).
- Цвета и стили переведены со статических
ColorRes/StyleResна семантическиеTheme.of(context).colorScheme. - Web-шаринг PDF: при отправке файла в share-sheet передаётся только файл (без текста) — фикс «unsupported attachment» в мессенджерах; добавлены диагностические логи в Talker.
- Инкрементальная profile-сборка Android при флейворах (явные
debug/profilebuildType). - PDF-карточка животного в web-PWA: просмотр и «поделиться»/скачивание работают на всех платформах (byte-пайплайн
PdfDocument.openData, share через Web Share API с фолбэком на скачивание). - Ограничение ширины интерфейса на web-десктопе рамкой смартфона с размытым матовым фоном по бокам (на мобильных без изменений).
- Android-сборки только под ARM (
arm64-v8a,armeabi-v7a), убранx86_64. - Инициализация приложения распараллелена; списки комментариев и фото рендерятся лениво.
- Гонки запросов в списках животных, деталях и поиске; single-flight обновления токена авторизации.
- Утечки подписок и жестовых распознавателей (dispose в редактировании назначений и списке комментариев).
- Зеркалирование в GitLab больше не падает при push нового тега (
would clobber existing tag).
v0.9.0
- Тёмная тема: переключаемая светлая/тёмная схема через
ColorScheme; переключатель в настройках. - Просмотрщик PDF: pinch-zoom и кнопки +/− (ограничение 100–200%), кнопка поворота страницы (0° ↔ 90°), кнопка скачивания (работает на всех платформах).
- Цвета и стили переведены со статических
ColorRes/StyleResна семантическиеTheme.of(context).colorScheme. - Web-шаринг PDF: при отправке файла в share-sheet передаётся только файл (без текста) — фикс «unsupported attachment» в мессенджерах; добавлены диагностические логи в Talker.
- Инкрементальная profile-сборка Android при флейворах (явные
debug/profilebuildType). - PDF-карточка животного в web-PWA: просмотр и «поделиться»/скачивание работают на всех платформах (byte-пайплайн
PdfDocument.openData, share через Web Share API с фолбэком на скачивание). - Ограничение ширины интерфейса на web-десктопе рамкой смартфона с размытым матовым фоном по бокам (на мобильных без изменений).
- Android-сборки только под ARM (
arm64-v8a,armeabi-v7a), убранx86_64. - Инициализация приложения распараллелена; списки комментариев и фото рендерятся лениво.
- Гонки запросов в списках животных, деталях и поиске; single-flight обновления токена авторизации.
- Утечки подписок и жестовых распознавателей (dispose в редактировании назначений и списке комментариев).
- Зеркалирование в GitLab больше не падает при push нового тега (
would clobber existing tag).
v0.8.1
- Animal PDF card in the web PWA: viewing and share/download now work on every platform (byte pipeline via
PdfDocument.openData, sharing through the Web Share API with a download fallback). - Interface width on web desktop is now capped inside a smartphone frame with a blurred matte backdrop on either side (unchanged on mobile).
- Android builds now target ARM only (
arm64-v8a,armeabi-v7a);x86_64dropped. - App start-up parallelised; comment lists and photos now render lazily.
- Fixed request races in the animal lists, details and search; single-flight refresh of the auth token.
- Fixed subscription and gesture-recogniser leaks (dispose in prescription editing and the comment list).
- GitLab mirroring no longer fails when pushing a new tag (
would clobber existing tag).
По-русски
- PDF-карточка животного в web-PWA: просмотр и «поделиться»/скачивание работают на всех платформах (byte-пайплайн
PdfDocument.openData, share через Web Share API с фолбэком на скачивание). - Ширина интерфейса на web-десктопе ограничена рамкой смартфона с размытым матовым фоном по бокам (на мобильных без изменений).
- Android-сборки только под ARM (
arm64-v8a,armeabi-v7a), убранx86_64. - Инициализация приложения распараллелена; списки комментариев и фото рендерятся лениво.
- Исправлены гонки запросов в списках животных, деталях и поиске; single-flight обновление токена авторизации.
- Исправлены утечки подписок и жестовых распознавателей (dispose в редактировании назначений и списке комментариев).
- Зеркалирование в GitLab больше не падает при push нового тега (
would clobber existing tag).
v0.8.0
- PWA build of the dev flavour on GitHub Pages, with a CORS proxy for the API so the web client can reach the backend from the Pages origin.
- App version and build mode shown on the login screen and in the profile drawer.
- Project technical roadmap (
docs/tech-roadmap.md) and its design spec, describing the maintainability, tooling, testing and CI work planned for the app. - Fixed safe-area handling for the bottom navigation bar in the iOS PWA (home-indicator overlap, standalone launch).
По-русски
- PWA-сборка dev-флейвора на GitHub Pages с CORS-прокси для API (веб-клиент достаёт бэкенд с origin Pages).
- Версия и режим сборки на экране входа и в profile-шторке.
- Технический roadmap проекта (
docs/tech-roadmap.md) и design spec: план работ по поддерживаемости, тулингу, тестам и CI. - Исправлена safe-area для нижней навигации в iOS PWA (перекрытие home-indicator, запуск в standalone).
v0.7.0
- Backend environment switcher in the dev debug screen: prod / stage / dev-0..3 plus a custom URL field (Mockoon or any ad-hoc stand); the dev flavour now defaults to stage. Applying an environment shows an "Applying…" splash (Lottie paw) and rebuilds the whole widget tree, so all clients and blocs pick up the new base URL without a manual restart.
- Charles/mitmproxy support in the dev flavour: a proxy toggle with a host:port field in the debug screen, applied globally via
HttpOverridesand per-client for chopper (a full manual restart is required, and the UI says so). - In-app logging with Talker: a log screen in the dev debug menu showing HTTP traffic, BLoC transitions and manual log entries. Levelled logs (debug/info/warning/error) across all services, repositories and cubits; error and critical entries are forwarded to Crashlytics as non-fatals in prod.
- Alice HTTP inspector in the dev debug menu: full request/response browsing (with cURL export) for both chopper and dio traffic via a custom chopper interceptor.
- Mockoon mock server (
mockoon/) with two organisations, per-route error variants (401/403/404/400/429/500) and response shapes captured from production. - Android toolchain bumped to Gradle 8.14.3 / AGP 8.11.1 / Kotlin 2.2.20 and the app migrated to built-in Kotlin, clearing the Flutter 3.44 build warnings; deprecated
buildDirusages replaced withlayout.buildDirectory.
По-русски
- Переключатель окружений бэкенда в dev debug-экране: prod / stage / dev-0..3 плюс поле произвольного URL (Mockoon или любой стенд); dev-флейвор теперь по умолчанию на stage. Применение окружения показывает splash «Applying…» (Lottie-лапка) и пересобирает всё дерево виджетов, так что все клиенты и блоки подхватывают новый base URL без ручного рестарта.
- Поддержка Charles/mitmproxy в dev-флейворе: тумблер прокси с полем host:port в debug-экране, применяется глобально через
HttpOverridesи per-client для chopper (нужен полный ручной рестарт, UI об этом сообщает). - Внутриприложенное логирование через Talker: экран логов в dev debug-меню с HTTP-трафиком, переходами BLoC и ручными записями. Уровневые логи (debug/info/warning/error) во всех сервисах, репозиториях и кубитах; error/critical уходят в Crashlytics как non-fatal в prod.
- HTTP-инспектор Alice в dev debug-меню: полный просмотр запросов/ответов (с экспортом cURL) для трафика chopper и dio через кастомный chopper-интерцептор.
- Mock-сервер Mockoon (
mockoon/) с двумя организациями, вариантами ошибок по маршрутам (401/403/404/400/429/500) и формами ответов, снятыми с прода. - Android-тулчейн поднят до Gradle 8.14.3 / AGP 8.11.1 / Kotlin 2.2.20, приложение переведено на встроенный Kotlin — убраны предупреждения сборки Flutter 3.44; устаревшие
buildDirзаменены наlayout.buildDirectory.
v0.6.1
- Dev-only floating debug button: a draggable bug icon that opens the debug screen (tap) or hides itself (long-press), shown only in debug mode. The debug screen gains a Firebase test card — trigger a fatal crash, a non-fatal error (Android/iOS) or an analytics event (all platforms) to verify Crashlytics/Analytics against the
acits-devproject. - CI provisions Firebase configs for the new per-flavour layout (
ios/flavors/{dev,prod}/) and installs the flutterfire CLI so the iOSbundle-service-filebuild phase can select the right plist; the staleios/Runner/GoogleService-Info.plist.examplecopy no longer breaks the pipeline. - Removed the FlutterFire
upload-crashlytics-symbolsXcode build phase (it looked for the Crashlytics run script in SPM's DerivedData and failed the unsigned CI build withProcessException: No such file or directory);uploadDebugSymbolsset to false infirebase.json. - Emptied
Runner.entitlements(kept the original as.example) so a personal (free) Apple team can sign local device builds — the inherited Push Notifications / Associated Domains capabilities aren't supported without a paid Apple Developer Program. - Re-added a guarded Crashlytics dSYM upload build phase: it uploads symbols on release/profile builds (readable iOS crash traces) and skips cleanly on debug/CI (
--no-codesign) builds where no dSYM exists, instead of failing the build.
По-русски
- Плавающая debug-кнопка только для dev: перетаскиваемая иконка-жук, открывает debug-экран (тап) или прячется (long-press), видна только в debug-режиме. На debug-экране добавлена Firebase-карточка — вызвать fatal crash, non-fatal ошибку (Android/iOS) или analytics-событие (все платформы) для проверки Crashlytics/Analytics на проекте
acits-dev. - CI раскладывает Firebase-конфиги под новую per-flavour структуру (
ios/flavors/{dev,prod}/) и ставит flutterfire CLI, чтобы iOS build phasebundle-service-fileвыбирал нужный plist; устаревшая копияios/Runner/GoogleService-Info.plist.exampleбольше не ломает пайплайн. - Удалён FlutterFire build phase
upload-crashlytics-symbols(искал Crashlytics run script в DerivedData SPM и валил неподписанную CI-сборку сProcessException: No such file or directory);uploadDebugSymbolsвыставлен в false вfirebase.json. - Очищен
Runner.entitlements(оригинал сохранён как.example), чтобы личная (бесплатная) Apple-команда могла подписывать локальные сборки на устройство — унаследованные Push Notifications / Associated Domains не поддерживаются без платного Apple Developer Program. - Возвращён защищённый build phase выгрузки dSYM в Crashlytics: выгружает символы на release/profile-сборках (читаемые iOS-краши) и корректно пропускается на debug/CI (
--no-codesign) сборках без dSYM, вместо падения сборки.
v0.6.0
- Firebase for both flavours on Android, iOS and web, each flavour in its own project (
acits-prod/acits-dev): Analytics on all three platforms, Crashlytics on Android/iOS (no web plugin exists; guarded off withkIsWeb). Configured via FlutterFire (firebase_options.dartper flavour) with a nativegoogle-services.jsonper flavour and a per-flavour iOSGoogleService-Info.plistselected by an Xcodeflutterfire bundle-service-filebuild phase, plus the Android Crashlytics Gradle plugin (NDK symbol upload) — ready for push notifications. - Web PWA now uses the path URL strategy (
/logininstead of/#/login), with a404.htmlSPA fallback for GitHub Pages andtry_fileson nginx. - iOS now has
Profile-dev/Profile-prodbuild configurations, soflutter build ios --profile --flavor {dev,prod}works (Android profile builds already worked). - iOS builds via Swift Package Manager (hybrid): SPM-capable plugins use SPM, the rest stay on CocoaPods.
- CI no longer runs on a plain push to
main/develop; it now runs only on pull requests and on av*release tag. - CI now builds a signed release: the dev flavour on a PR, the prod flavour on a
v*tag (both signed with the release keystore); artifacts are namedacits-dev-release/acits-prod-release. - README now links directly to the deployed PWA.
- Telegram build notification now fires on every CI run, including pull requests (previously tag-only), and includes the live PWA link when the web deploy succeeds.
- Web PWA shows a loading spinner over the splash screen until the app's first frame renders.
- Bundle identifier changed to
ru.acits(prod) /ru.acits.dev(dev) across Android and iOS; iOS signing team set to45G32KJDV7;assetLinks.jsonfingerprint updated to the release keystore's certificate. - Web PWA now boots ~4s faster:
main.dart.jsloads immediately instead of waiting on service-worker registration (which stalled and hit a 4s fallback timeout on GitHub Pages). - iOS pod install no longer fails on a stale
Podfile.lockthat pinned Firebase 8.9.0 againstfirebase_core 4.x(which needs Firebase 12.x). - Web PWA no longer crashes on the "terms" link (registration), comment links and comment attachments:
flutter_web_browser(no web support) replaced withurl_launcher, and the attachment download (path_provider/open_filex, mobile-only) now opens the file URL directly on web.
По-русски
- Firebase для обоих флейворов на Android, iOS и web, каждый флейвор в своём проекте (
acits-prod/acits-dev): Analytics на всех трёх платформах, Crashlytics на Android/iOS (web-плагина нет, отключён черезkIsWeb). Настроено через FlutterFire (firebase_options.dartна флейвор), нативнымgoogle-services.jsonна флейвор и per-flavour iOSGoogleService-Info.plist, выбираемым Xcode build phaseflutterfire bundle-service-file, плюс Android Crashlytics Gradle-плагин (выгрузка NDK-символов) — готово к push-уведомлениям. - Web-PWA использует path URL strategy (
/loginвместо/#/login), с404.htmlSPA-fallback для GitHub Pages иtry_filesна nginx. - В iOS добавлены конфигурации
Profile-dev/Profile-prod, так чтоflutter build ios --profile --flavor {dev,prod}работает (profile-сборки Android работали и раньше). - iOS собирается через Swift Package Manager (гибридно): SPM-совместимые плагины на SPM, остальные на CocoaPods.
- CI больше не запускается на обычный push в
main/develop; только на pull request и на релизный тегv*. - CI собирает подписанный релиз: dev-флейвор на PR, prod-флейвор на теге
v*(оба подписаны release-keystore); артефакты называютсяacits-dev-release/acits-prod-release. - README теперь ссылается прямо на задеплоенный PWA.
- Telegram-уведомление о сборке приходит на каждый CI-запуск, включая pull request (раньше только на теги), и содержит ссылку на живой PWA при успешном web-деплое.
- Web-PWA показывает спиннер поверх splash-экрана, пока не отрисуется первый кадр приложения.
- Bundle identifier изменён на
ru.acits(prod) /ru.acits.dev(dev) на Android и iOS; iOS signing team выставлен в45G32KJDV7; отпечаток вassetLinks.jsonобновлён на сертификат release-keystore. - Web-PWA стартует на ~4s быстрее:
main.dart.jsзагружается сразу, а не ждёт регистрации service-worker (которая зависала и упиралась в 4s fallback-таймаут на GitHub Pages). - iOS pod install больше не падает на устаревшем
Podfile.lock, где Firebase 8.9.0 конфликтовал сfirebase_core 4.x(которому нужен Firebase 12.x). - Web-PWA больше не крашится на ссылке «terms» (регистрация), ссылках в комментариях и вложениях:
flutter_web_browser(без web-поддержки) заменён наurl_launcher, а скачивание вложений (path_provider/open_filex, только мобилки) на web теперь открывает URL файла напрямую.
v0.5.1
- GitHub Release is now published automatically when a
v*tag is pushed: it builds the dev APK, extracts that version's bullet points fromCHANGELOG.mdas release notes, attaches the APK and deploys web to GitHub Pages. - Android/iOS builds now run only on pull requests and on a release tag, not on every push to
main/develop. - Web favicon and PWA icons replaced with the app's actual logo (were the default Flutter icon).
- Fixed two favicon
<link>tags that used a root-absolute path (/favicon-32x32.png) and 404'd once the site moved under a GitHub Pages subpath (/acits-flutter/); switched to relative paths.
По-русски
- GitHub Release теперь публикуется автоматически при пуше тега
v*: собирает dev-APK, вытаскивает буллеты этой версии изCHANGELOG.mdв release notes, прикрепляет APK и деплоит web на GitHub Pages. - Сборки Android/iOS запускаются только на pull request и на релизном теге, а не на каждый push в
main/develop. - Web-favicon и PWA-иконки заменены на реальный логотип приложения (были дефолтные иконки Flutter).
- Исправлены два favicon-тега
<link>с root-absolute путём (/favicon-32x32.png), которые 404'ились после переезда сайта в подпуть GitHub Pages (/acits-flutter/); переведены на относительные пути.
v0.5.0
- Added a CI job that builds the prod web target and deploys it to GitHub Pages automatically whenever a
v*tag is pushed. - Consolidated all generated code under
lib/gen/(was scattered acrosslib/api/,lib/generated/); retired thelib/l10n/folder name in favour oflib/res/(the project useseasy_localization, notintl_utils). - Fixed a broken
Dockerfile: it was pinned to an unmaintained base image (cirrusci/flutter:3.3.1) predating the project's Flutter SDK, used a removed--web-rendererflag and built the wrong (dev) web target. Replaced withghcr.io/cirruslabs/flutter:3.44.0, now building the prod target consistently with mobile release builds. - Added a missing
.dockerignore—docker build .was sending the whole repo (build/,.dart_tool/,.git/, …) into the build context, gigabytes of needless upload and build time. - Removed dead code found in a project-wide audit: obsolete Charles debug-cert pinning, an unused domain model and an unused script.
По-русски
- Добавлена CI-джоба, которая собирает prod web-таргет и деплоит его на GitHub Pages автоматически при пуше тега
v*. - Весь сгенерированный код собран в
lib/gen/(было раскидано поlib/api/,lib/generated/); папкаlib/l10n/переименована вlib/res/(проект используетeasy_localization, а неintl_utils). - Починен сломанный
Dockerfile: был закреплён на заброшенном образе (cirrusci/flutter:3.3.1) старше требуемого SDK, использовал снятый флаг--web-rendererи собирал не тот (dev) веб-таргет. Заменён наghcr.io/cirruslabs/flutter:3.44.0, теперь собирает prod-таргет консистентно с релизными мобильными сборками. - Добавлен отсутствовавший
.dockerignore—docker build .раньше отправлял в build-context весь репозиторий (build/,.dart_tool/,.git/, …), гигабайты лишнего трафика и времени сборки. - Удалён мёртвый код по итогам аудита: устаревшая привязка Charles-сертификата, неиспользуемая доменная модель, неиспользуемый скрипт.
v0.4.0
- Dev APK is now attached directly to the GitHub release (CI-built from
main, signed with the debug keystore). - Corrected v0.3.0 release attribution.
По-русски
- Dev-APK теперь прикрепляется прямо к GitHub-релизу (CI-сборка из
main, подпись debug-keystore). - Исправлена атрибуция релиза v0.3.0.