generated from ttipo/project-base
a37045a553
머리는 앱 화면, 본문은 스크립트를 끈 WebView 에 앱이 감싼 CSP 문서로 보인다. 받은 HTML 은 서버 정화 뒤 앱이 한 번 더 허용 목록으로 다시 쓰고, 외부 이미지는 [이미지 보기] 뒤 앱이 Dio 로 받아 data: 로 넣는다(토큰이 WebView 에 가지 않는다). - 읽음 · 중요 · 이동 · 스팸 · 삭제 · 영구 삭제, 붙잡힌 메일의 보내기 취소 · 예약 취소는 목록과 같은 규칙. 응답은 그 요청이 바꾼 칸만 지금 값에 덮는다 - 첨부는 앱 임시 폴더(cacheDir/downloads)에 받아 FileProvider + ACTION_VIEW 로 연다(파일 여는 플러그인 없이). 열 형식은 확장자 먼저, 웹 문서 · svg · 설치 파일 · 인증서는 받지 않는다 - 응답 인터셉터가 바이트 · 스트림 실패 본문(64KB 까지)에서 코드를 읽고, 뜻밖의 실패에도 handler.next 로 끝낸다 - 리뷰 H1: 같은 그림을 수백 번 쓴 메일이 문서를 GB 단위로 키우던 것 — 문서에 싣는 그림 글을 나온 횟수까지 세어 10M 자에서 멈춘다 - 리뷰 M1: 짧고 깊은 본문을 화면 isolate 에서 정화하던 것 — 길이와 중첩 비용으로 고르고(6,144자 · 비용 5,000), 그 밖은 Isolate.run - 새 의존성: webview_flutter 4.14.1 · webview_flutter_android 4.12.0 · html 0.15.7(+ csslib 1.0.2) — 배포 2주 넘음. path_provider · mime 은 lock 에 있던 판을 직접 의존으로 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
86 lines
4.1 KiB
YAML
86 lines
4.1 KiB
YAML
name: arasystem_app
|
|
description: "ARA SYSTEM 그룹웨어 모바일 앱"
|
|
# pub.dev 에 올리지 않는 사내 앱이다.
|
|
publish_to: 'none'
|
|
|
|
# 앱 판 — build-name(1.0.0)은 Android versionName · iOS CFBundleShortVersionString,
|
|
# build-number(+1)는 Android versionCode · iOS CFBundleVersion 이 된다.
|
|
# 서버에 보내는 User-Agent 의 판(ARASYSTEM-App/<판>)도 build-name 이다 (core/api/user_agent.dart).
|
|
version: 1.0.0+1
|
|
|
|
environment:
|
|
# Flutter 3.41.9 의 Dart — 판 고정은 .claude/skills/flutter/SKILL.md "Flutter 판"
|
|
sdk: ^3.11.5
|
|
|
|
# 새 패키지는 pub.dev 배포 뒤 2주가 지난 판만 고른다 (보안 규칙 "의존성"의 2주 규칙과 같다).
|
|
dependencies:
|
|
flutter:
|
|
sdk: flutter
|
|
# 한국어 시스템 문구(복사 · 붙여 넣기 메뉴 · 날짜 고르기) — locale: ko
|
|
flutter_localizations:
|
|
sdk: flutter
|
|
|
|
cupertino_icons: ^1.0.8
|
|
# 기기 정보(Android 판 · 기종) — User-Agent 만들기
|
|
device_info_plus: ^13.3.0
|
|
dio: ^5.9.2
|
|
flutter_dotenv: ^5.2.1
|
|
flutter_riverpod: ^3.3.1
|
|
flutter_secure_storage: ^10.0.0
|
|
# 화면 이동 — redirect 하나가 세션 상태로 화면을 고른다 (core/router/)
|
|
go_router: ^17.5.0
|
|
# 받은 메일 본문의 두 번째 정화 — HTML5 파서로 읽어 허용 목록만 남긴다 (features/mail/domain/mail_html.dart).
|
|
# 0.15.7 은 2026-08-28 배포(Dart 팀 tools.dart.dev). 따라오는 csslib 1.0.2 도 같은 곳
|
|
html: ^0.15.7
|
|
# 날짜 · 숫자 형식 — flutter_localizations 가 이 판으로 고정한다
|
|
intl: 0.20.2
|
|
# 받은 첨부를 열 형식 — 확장자 → MIME 표(core/files/file_types.dart). 이미 lock 에 따라 들어와 있던 2.0.0(2024-09-30 배포, Dart 팀) 그대로
|
|
mime: ^2.0.0
|
|
# 앱 판 — User-Agent 만들기
|
|
package_info_plus: ^10.2.2
|
|
# 받은 첨부를 둘 앱 임시 폴더(Android cacheDir) — 이미 shared_preferences 를 따라 들어와 있던 판이다 (core/files/)
|
|
path_provider: ^2.1.5
|
|
# 첫 실행 표시 하나만 둔다 — 토큰은 여기에 두지 않는다 (core/storage/first_run_marker.dart)
|
|
shared_preferences: ^2.5.6
|
|
# 다른 앱 열기 — 로그인 2단계 켜기의 [인증 앱에 추가](otpauth 주소 — features/auth/data/authenticator_launcher.dart).
|
|
# 6.3.3 은 2026-10-02 배포(Flutter 팀). canLaunchUrl 은 쓰지 않는다 — debug 판 안드로이드가 주소째 로그에 남긴다
|
|
url_launcher: ^6.3.3
|
|
# 받은 메일 본문 — 스크립트를 끈 WebView 한 겹(features/mail/presentation/widgets/mail_body_view.dart).
|
|
# 4.14.1 은 2026-07-07 배포(Flutter 팀). Dart 3.11 · Flutter 3.41 에 맞는 하위 판은
|
|
# webview_flutter_android 4.12.0(2026-04-29) · _wkwebview 3.25.1(2026-04-29) · _platform_interface 2.15.1(2026-03-25) 이다
|
|
# (그 위 판은 Dart 3.12 · Flutter 3.44 가 든다)
|
|
webview_flutter: ^4.14.1
|
|
# 안드로이드 WebView 의 파일 · content 접근 끄기 · 글자 크기 — 위 webview_flutter 가 고른 판 그대로
|
|
webview_flutter_android: ^4.12.0
|
|
|
|
dev_dependencies:
|
|
flutter_test:
|
|
sdk: flutter
|
|
flutter_lints: ^6.0.0
|
|
# 시험의 가짜 WebView(test/support/fake_webview.dart) — webview_flutter 가 고른 판 그대로(새로 받는 것 없음)
|
|
webview_flutter_platform_interface: ^2.15.1
|
|
|
|
flutter:
|
|
uses-material-design: true
|
|
|
|
assets:
|
|
# 런타임 환경변수 — flutter_dotenv 로 읽는다 (API_URL 만 — 앱 안에 그대로 들어가니 비밀은 넣지 않는다)
|
|
- .env
|
|
# 글꼴 라이선스 — 설정의 [오픈소스 라이선스]에 보인다 (core/theme/app_fonts.dart)
|
|
- assets/licenses/pretendard-ofl.txt
|
|
# 흰 로고 둘 — 웹 frontend/src/assets/brand/ 와 같은 파일 (core/constants/app_assets.dart)
|
|
- assets/brand/
|
|
|
|
# Pretendard 1.3.9 (SIL OFL 1.1) — 웹(frontend)과 같은 글꼴. 정적 OTF 넷만 넣는다
|
|
fonts:
|
|
- family: Pretendard
|
|
fonts:
|
|
- asset: assets/fonts/Pretendard-Regular.otf
|
|
weight: 400
|
|
- asset: assets/fonts/Pretendard-Medium.otf
|
|
weight: 500
|
|
- asset: assets/fonts/Pretendard-SemiBold.otf
|
|
weight: 600
|
|
- asset: assets/fonts/Pretendard-Bold.otf
|
|
weight: 700
|