appsok/agent-roadmap/phase/security-distribution/milestones/macos-distribution.md
toki 5af717d432 chore(roadmap): 변경 내역을 반영한다
작업 중 누락된 문서, 테마, 테스트 변경을 모두 반영해 원격 동기화할 수 있게 정리한다.
2026-06-09 04:01:12 +09:00

4.7 KiB

Milestone: macOS 배포와 sandbox 검증

위치

  • Roadmap: agent-roadmap/ROADMAP.md
  • Phase: agent-roadmap/phase/security-distribution/PHASE.md

목표

AppSok을 사내 Mac에서 안정적으로 실행할 수 있도록 signing, notarization 또는 MDM 배포 후보를 정리하고, sandbox 상태에서 Jenkins network, Keychain, ADB 실행이 가능한지 검증한다.

상태

[계획]

승격 조건

  • 없음

구현 잠금

  • 상태: 잠금
  • 잠금 해제 조건: 사용자 리뷰에서 아래 항목을 승인하거나 방향을 결정할 때까지 signing/notarization/배포 자동화 구현을 시작하지 않는다.
  • 결정 필요: 사용자 리뷰 체크리스트
    • 사용자 표시명은 AppSok으로 통일하고, URL scheme/package/bundle id의 소문자 appsok 식별자는 유지하는 방향을 최종 승인한다.
    • 사내 배포 경로를 Developer ID/notarization, MDM, unsigned internal build 중 무엇으로 할지 결정한다.
    • 원격 Mac runner의 Developer ID Application: Dongmyung Lee (AWA82DP9WD) identity를 AppSok 배포 signing identity로 사용할지 승인한다.
    • notarytool Keychain profile 이름과 Apple notary credential 세팅 주체를 확정한다.
    • notarization 후 stapler로 ticket을 붙인 .app, .zip, .dmg, .pkg 중 어떤 산출물을 배포할지 결정한다.
    • "아무 맥에서나 설치" 범위를 Apple Silicon only로 볼지, Intel Mac까지 포함하는 universal build로 볼지 결정한다.
    • sandbox를 유지할지, ADB 실행 때문에 sandbox 해제가 필요한지 검증한다.

범위

  • macOS app bundle metadata
  • entitlement와 sandbox 검증
  • Keychain/network/ADB 실행 smoke test
  • bundled ADB runtime의 nested binary/dylib signing과 실행 검증
  • Developer ID signing, notarization, staple, MDM 배포 후보 문서화

기능

Epic: [runtime] macOS runtime 검증

앱이 실제 사내 Mac에서 필요한 외부 자원에 접근할 수 있는지 확인한다.

  • [network] sandbox 상태에서 Jenkins HTTPS 호출이 가능한지 확인한다.
  • [keychain] flutter_secure_storage Keychain read/write가 배포 build에서 동작하는지 확인한다.
  • [adb-exec] sandbox 상태에서 bundled adb devices -ladb install 실행 가능 여부를 확인한다.
  • [url-scheme] appsok:// URL scheme이 설치된 앱으로 전달되는지 확인한다.

Epic: [distribution] 배포 방식

엔드유저가 경고 없이 설치하고 실행할 수 있는 사내 배포 방식을 정한다.

  • [bundle-id] bundle id와 앱 표시 이름 정책을 확정한다.
  • [signing] Developer ID signing/notarization 또는 MDM 배포 절차를 문서화한다.
  • [notary-profile] notarytool Keychain profile 존재 여부와 세팅 절차를 비밀값 없이 문서화한다.
  • [staple-assess] notarization 후 stapling과 spctl --assess 검증 절차를 문서화한다.
  • [arch-policy] Apple Silicon only 또는 universal build 배포 정책을 문서화한다.
  • [platform-tools] bundled ADB runtime의 포함 파일, version pinning, 업데이트 책임, NOTICE 보존 방식을 문서화한다.
  • [release-checklist] 배포 전 검증 checklist를 작성한다.

완료 리뷰

  • 상태: 없음
  • 요청일: 없음
  • 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증 충족 후 기록한다.
  • 리뷰 필요:
    • 사용자가 완료 결과를 확인했다
    • archive 이동을 승인했다
  • 리뷰 코멘트: 없음

범위 제외

  • Auth Broker 또는 Jenkins plugin 구현
  • 중앙 감사 서버
  • 사용자 Mac의 Android Studio 또는 Android Platform Tools 설치를 기본 전제로 삼는 배포 방식
  • Windows/Linux desktop target

작업 컨텍스트

  • 관련 경로: macos/Runner/, macos/Runner.xcodeproj/, pubspec.yaml
  • 표준선(선택): sandbox는 가능한 유지하고, 불가능한 경우 사유와 대안을 문서화한다.
  • 표준선(선택): 내부 ops 도구 기준으로 ADB는 AppSok-managed bundled runtime을 기본 제공하고, 사용자 환경의 adb는 override/fallback으로만 둔다.
  • 검증 메모: bundled adb, 필요한 lib64/*.dylib, NOTICE.txt, source.properties를 포함하고 signing/notarization 전후 실행 여부를 remote Mac runner에서 확인한다.
  • 선행 작업: 사용 가능한 MVP
  • 후속 작업: Auth Broker와 Jenkins Plugin 후보 검토
  • 확인 필요: 구현 잠금의 사용자 리뷰 체크리스트가 AppSok 표시명 승인, Developer ID 사용 승인, notary credential profile, 배포 산출물 형식, universal build 필요 여부, 조직 배포 정책, sandbox/ADB 실행 검증을 다룬다.