App 정체성
메타데이터 한 블록으로 App Launcher 타일과 Family 배치, 개요 목적지를 선언합니다.
패키지 메타데이터로 App Launcher의 타일, 분류, 아이콘, 개요 경로를 정합니다. 아직 패키지가 없다면 App 패키지 만들기로 identity와 Manifest를 함께 생성하세요.
타일 설정
App composer.json의 extra.nexia.app을 수정합니다. 아래는 현재 packages/expenses/composer.json의 식별·배치 필드입니다.
{
"manifest": "Amuzcorp\\Nexia\\Expenses\\ExpensesAppManifest",
"app_family": "finance",
"app_icon": "receipt",
"launcher_order": 20,
"overview_navigation_id": "expenses",
"app_name": "Expenses",
"app_key": "expenses",
"app_table_prefix": "expense",
"prerequisite_apps": [],
"readiness": "beta"
}같은 블록의 locale별 descriptions도 유지합니다. app_key와 app_table_prefix는 Resource 생성 전에 결정하세요. 이후 변경은 저장된 식별자, 권한, 경로, 테이블에도 영향을 줍니다.
overview_navigation_id는 실제 App Menu 목적지 추가와 연결합니다. Expenses의 ExpensesAppManifest::navigationItems()는 id: 'expenses', route: '/apps/expenses', groupId: null인 항목을 반환합니다. pageElementsExtras()에서는 같은 경로를 ExpensesOverviewSurface에 연결합니다. App 화면 만들기에 따라 프런트엔드 컴포넌트 등록도 완료하세요.
결과 확인
패키지 discovery를 갱신하고 App이 운영 가능한 테넌트에서 Launcher를 엽니다. Finance 분류에 receipt 아이콘이 나타나고 개요 화면으로 이동해야 합니다. 목적지와 컴포넌트 연결이 없으면 메타데이터만으로 화면이 만들어지지 않습니다. 사용자별 노출과 API 권한도 별도로 확인합니다.
동작에 영향을 주는 필드
| 필드 | 결정할 내용 |
|---|---|
app_key, app_table_prefix | 식별 공간과 테이블 소유권; 나중에 이름을 바꾸려면 연관 데이터를 함께 이전 |
app_family, launcher_order | 분류와 분류 안의 순서; 분류 자체 순서는 host 소유 |
app_icon, descriptions | 타일 표시 정보 |
overview_navigation_id | 개요 화면으로 연결되는 기존 목적지 |
prerequisite_apps | 설치 선행 조건; 다른 App 데이터의 읽기 권한은 부여하지 않음 |
readiness | available, beta, preview; 현재 SDK의 설치 가능 규칙 적용 |
검증 구현은 packages/app-sdk/packages/laravel/src/AppRuntime/AppDefinition.php에 있습니다. 전체 메타데이터 형식, 기본값, readiness 게이트, 소스 발견 계약은 App Manifest 계약에서 확인합니다.
공식 발행자 여부, 발행 상태, 공개 범위, 테넌트 이용 자격은 Central 배포 정책이 결정합니다. identity 선언만으로 공식 App이 되거나 외부에 발행되지 않습니다. 호환 버전도 별도입니다. 새 App scaffold는 SDK ^0.5.0과 extra.nexia.core_version: ^0.5.0를 선언하며 호스트 lock이 실제 설치 버전을 고정합니다.