Releases: boostbrothers/apple-container-desktop
Release list
Apple Container Desktop v0.5.0
Swift 이관(v0.4.0) 이후 첫 기능 릴리스입니다. 보안 수정이 포함되어 있으니 아래 안내를 확인해 주세요.
🔒 보안 수정 — 서비스 시크릿이 평문으로 저장되던 문제
서비스 편집 화면에서 환경변수를 Secret으로 표시하고 값을 새로 입력하면, 그 값이 projects.json에 암호화되지 않은 채로 저장되고 있었습니다. 실행 경로가 "암호문이면 복호화, 아니면 그대로 사용" 방식이라 앱은 아무 에러 없이 정상 동작했고, 그래서 겉으로 드러나지 않았습니다. 이전 Tauri 빌드에도 있던 문제입니다.
- 저장 경로(서비스 추가·수정 양쪽)에서 새로 입력된 시크릿을 AES-256-GCM(
enc:v1:)으로 암호화합니다. 이미 암호문인 값은 이중 암호화하지 않습니다. - 기존에 평문으로 저장된 값은 해당 서비스를 한 번 저장하면 자동으로 암호화됩니다.
- 이미 유출됐을 수 있는 토큰·키는 회수(rotate)하시기를 권합니다.
projects.json은 홈 디렉토리의 평범한 파일이라 백업·동기화 도구에 딸려 갔을 수 있습니다.
✨ 서비스별 Build Arguments
Dockerfile로 빌드하는 서비스에 빌드 인자를 지정할 수 있습니다. 사설 레지스트리 토큰처럼 빌드 시점에만 필요한 값을 다루기 위한 기능입니다.
- 서비스 편집 시트에 Build Arguments 섹션이 생겼습니다 (Dockerfile 모드에서만 노출).
- 지정한 값은 이미지 빌드 시
container build --build-arg KEY=VALUE로 전달됩니다. - Secret으로 표시한 값은 암호화되어 저장되고, 화면에서는 마스킹됩니다. 복호화에 실패하면 그 인자만 건너뛰고 로그에 경고를 남깁니다 — 빌드 전체가 멈추지 않습니다.
- ARG 이름은 Dockerfile 규칙(
[A-Za-z_][A-Za-z0-9_]*)으로 검증합니다. 어긋나면 저장이 막히고 어디가 문제인지 표시됩니다. - compose 연동:
build.args를 맵({KEY: value})·리스트(["KEY=value"]) 두 형태 모두 가져옵니다. 내보낼 때는 평문 인자만 나가고, 시크릿은 값 없이 파일 상단 주석으로 무엇이 빠졌는지 알려줍니다 — compose 파일은 보통 커밋되기 때문입니다.
🎨 다듬기
- 인접한 glass 표면을
GlassEffectContainer로 묶어 macOS 26에서 블렌딩이 의도대로 나오게 했습니다. 로그 본문은 콘텐츠 평면이므로 glass 대신 솔리드 잉크 레이어로 정렬했습니다. - 전송 계층 결정(
containerCLI 서브프로세스 유지, SDK/XPC 미채택)과 그 판단을 뒤집어야 할 신호를docs/transport-decision.md에 기록했습니다. - CI에서 DMG 아티팩트가 숨김 파일을 빠뜨리던 문제를 고쳤습니다.
설치
curl -fsSL https://raw.githubusercontent.com/boostbrothers/apple-container-desktop/main/install.sh | shDMG를 직접 받는 경우 ad-hoc 서명이라 Gatekeeper를 통과하지 못합니다. install.sh가 quarantine 속성을 자동으로 제거하므로 이 경로를 권장합니다. 수동 설치라면:
xattr -rd com.apple.quarantine "/Applications/Apple Container Desktop.app"요구 사항: macOS 15 이상 · Apple Silicon (arm64) 전용 · Apple Container 1.0.0 이상
전체 변경 내역: v0.4.0...v0.5.0
Apple Container Desktop v0.4.0
Tauri를 걷어내고 네이티브 SwiftUI 앱으로 전면 재작성한 릴리스입니다. 화면과 기능은 그대로지만 내부는 전부 바뀌었습니다.
무엇이 달라졌나
- 저장소가 SwiftPM 패키지 하나가 됐습니다.
src-tauri/(Rust)와src/(React/TypeScript)가 사라지고Sources/ContainerKit(로직) +Sources/AppleContainerDesktop(SwiftUI)만 남습니다. 의존성은 compose YAML 파싱용 Yams 하나뿐입니다. - IPC 계층이 없어졌습니다. 예전에는
invoke()→ Rust 커맨드 → CLI 왕복이었지만, 이제 뷰가ContainerKit을 직접 호출하고ContainerKit이container서브프로세스를 실행합니다. - 네이티브 macOS 크롬 —
NavigationSplitView사이드바, 통합 툴바, 시스템 시맨틱 컬러, HIG 타이포그래피 스케일. Liquid Glass는 macOS 26에서 네이티브.glassEffect(), 그 이전에는 vibrancy 머티리얼, Reduce Transparency가 켜져 있으면 솔리드로 내려갑니다. - 번들이 가벼워졌습니다 — DMG 2.5 MB (WebView 런타임과 Node 번들이 사라진 결과).
- 로그 스트리밍 근본 수정 —
container logs -f가 줄을 쏟는데도 0줄로 관측되던 문제를 GCD 기반 줄 스트림으로 고쳤습니다. 앱 종료 시 팔로우 자식 프로세스도 정리됩니다.
기존 사용자를 위한 안내
- 데이터 마이그레이션이 필요 없습니다.
~/Library/Application Support/apple-container-desktop/의projects.json·env-store.json·app-settings.json과 Keychain 항목을 그대로 읽고 씁니다. 시크릿 암호화도 같은enc:v1:AES-256-GCM 포맷이라 이전 앱이 저장한 값을 그대로 복호화합니다. - Apple Container 1.0.0 이상이 필요합니다. pre-1.0 호환 경로는 이관하지 않았습니다.
- 자동 업데이트는 없습니다. 이전 Tauri 빌드도 실질적으로 없었습니다 — 업데이트는 재설치입니다.
설치
curl -fsSL https://raw.githubusercontent.com/boostbrothers/apple-container-desktop/main/install.sh | shDMG를 직접 받는 경우, ad-hoc 서명이라 Gatekeeper를 통과하지 못합니다. install.sh는 설치 후 quarantine 속성을 자동으로 제거하므로 이 경로를 권장합니다. 수동 설치라면:
xattr -rd com.apple.quarantine "/Applications/Apple Container Desktop.app"요구 사항: macOS 15 이상 · Apple Silicon (arm64) 전용 · Apple Container 1.0.0 이상
전체 변경 내역: v0.3.0...v0.4.0
Apple Container Desktop v0.3.0
주요 변경사항 (v0.2.0 → v0.3.0): Features - Theme: Primary 색상을 Apple Blue(#0071e3)로 통일 - Sidebar: 브랜드 타일 + Projects top-level 메뉴 + 하단 Daemon pill - Containers: solid 카드 + segmented 필터 + 그룹 액션, 주 액션 라벨 버튼과 overflow 메뉴 - Container Inspect: summary head + 탭 구조 + secret 마스킹, 이름 클릭 진입 - Container Logs: 레벨 토큰화 + 필터/follow pill, 공통 헤더와 서브탭 네비게이션 - Projects: ratio meter + topology hint 카드와 search/filter 리스트 - Projects: Save Service 버튼을 프로젝트 헤더로 이동 Fixes - 컨테이너 로그 스트림 중복/누수 해결 - 서비스 단위 런타임 설정 및 Dockerfile 없는 프로젝트 지원 - Apple Container 미지원 --driver 플래그 제거 (network create) - container-row overflow 메뉴를 portal로 렌더해 그룹 클리핑 해소 - Segmented filter 다크 모드 대비 개선 - AppToolbar 중복 페이지 타이틀/빈 툴바 제거 - Sidebar 브랜드명을 'Apple Container Desktop'으로 변경하고 아이콘 제거 - ProjectCard 제어 버튼 항상 표시, 기본 서비스 'DEFAULT' 뱃지 제거 - Project Detail 중복 Running Containers 섹션 제거 - 로그 export 경로 확장자/상위 디렉터리 검증 Refactors - HIG 정렬 공통 프리미티브 도입 및 전 페이지 적용 - ProjectDetail의 17개 수기 glass-panel을 FormSection으로 교체 - ProjectCard 삭제 확인을 AlertDialog로, 오버플로우를 OverflowMenu로 교체 - 잔여 수기 glass 카드를 공통 프리미티브로 치환 - 불안정한 로그 파서 제거 및 로그 툴바 고정 - ProjectCard watch 인디케이터 제거 Docs - DESIGN.md에 macOS HIG 섹션과 앱 컨벤션 · Agent 가이드 추가
Apple Container Desktop v0.2.0
- 컨테이너 Inspect/Logs 공통 헤더와 서브탭 네비게이션 추가 - 컨테이너 로그 ANSI 컬러 렌더링 지원 - 컨테이너 로그 뷰어 기능 강화 - 로그 검색 (Cmd+F) + 하이라이트 + 네비게이션 - LogToolbar 필터 지원 - 로그 복사 및 내보내기 (Copy/Export) 버튼 - Infisical 서비스 토큰 AES-GCM 암호화 저장 - 컨테이너 실행 시 CPU/Memory 리소스 제한 설정 - LogView 컴포넌트 분리 및 구조 개선 - LogEntry에 단조 id 및 버퍼 상한 도입 - AnsiLine 메모이제이션 및 highlight prop 최적화 - 로그 내보내기 경로 확장자 및 상위 디렉토리 유효성 검사 - 검색 닫기 시 뷰포트 유지 - install.sh를 사용한 빠른 설치 방법 안내 추가