Morit Plugin5. 플랫폼
Android, iOS, Desktop 호환
Morit 앱은 현재 Android-first입니다. Plugin UI와 capability 계약은 플랫폼 중립 JSON이지만, 모든 Host 기능이 모든 플랫폼에서 구현되었다는 뜻은 아닙니다.
현재 지원 범위
문서나 배포 설명에서 iOS·Desktop을 현재 검증 완료로 표현하지 않습니다. 플랫폼 지원은 실제 앱 빌드와 기기 테스트 결과로 표시합니다.
플랫폼 중립으로 작성하기
- Dart, JavaScript, HTML, WebView, native view를 UI fragment에 넣지 않습니다.
- 색상 코드와 픽셀 고정 화면 대신 Host token과 반응형 속성을 사용합니다.
- 파일 경로는 POSIX package 상대 경로만 사용합니다.
- 외부 앱 실행이나 OS 설정 화면 이동을 capability 성공의 필수 조건으로 만들지 않습니다.
- notification은 Host action으로 요청하고 플랫폼 채널 이름을 manifest에 넣지 않습니다.
- touch 전용 표현 대신 “선택”, “열기”, “실행”처럼 입력 장치와 무관한 문구를 씁니다.
반응형 입력과 접근성
Android의 좁은 세로 화면을 최소 기준으로 설계하되, 넓은 창에서는 무조건 빈 공간을 채우지
않습니다. stack_at과 min_item_width로 구조만 바꾸고 읽는 순서는 유지합니다. 키보드 focus와
스크린 리더 순서는 JSON children 순서를 따르므로 시각적 배치와 의미 순서를 다르게 만들지 않습니다.
icon만 있는 action은 의미를 전달하기 어렵습니다. 주요 행동에는 텍스트 label을 제공하고,
색만으로 상태를 구분하지 않습니다. 시스템 글자 크기가 커져도 핵심 문구와 행동이 잘리지 않도록
중요 텍스트에 과도한 max_lines를 쓰지 않습니다.
기능 저하 원칙
특정 플랫폼 adapter가 없을 때 전체 플러그인을 깨뜨리지 않습니다.
- UI는 읽을 수 있는 상태와 지원 범위 안내를 유지합니다.
- 해당 action만 비활성화하거나 명확한 오류로 종료합니다.
- capability는 성공으로 위장하지 않습니다.
- 알림을 만들지 못해도 원본 일정·데이터 저장 결과는 별도로 판단합니다.
- 재시도가 의미 있는 경우에만 재시도 행동을 제공합니다.
출시 전 플랫폼 체크
각 지원 플랫폼에서 다음을 실제로 확인합니다.
- 설치·업데이트·삭제
- 첫 화면, 빈 데이터, 긴 텍스트, 큰 글자 크기
- 화면 이동과 뒤로가기/창 닫기
- 권한 허용·거부·철회
- OAuth 연결·만료·재연결
- background와 notification의 실제 전달
- 오프라인·timeout·재시도
- 키보드와 스크린 리더 순서
실행하지 않은 항목은 “미검증”으로 기록합니다.