diff --git a/agent-roadmap/phase/security-distribution/milestones/macos-distribution.md b/agent-roadmap/archive/phase/security-distribution/milestones/macos-distribution.md similarity index 80% rename from agent-roadmap/phase/security-distribution/milestones/macos-distribution.md rename to agent-roadmap/archive/phase/security-distribution/milestones/macos-distribution.md index 8b57af0..558dc51 100644 --- a/agent-roadmap/phase/security-distribution/milestones/macos-distribution.md +++ b/agent-roadmap/archive/phase/security-distribution/milestones/macos-distribution.md @@ -11,7 +11,7 @@ AppSok을 사내 Mac에서 안정적으로 배포할 수 있도록 signing, nota ## 상태 -[검토중] +[완료] ## 승격 조건 @@ -56,16 +56,16 @@ AppSok을 사내 Mac에서 안정적으로 배포할 수 있도록 signing, nota ## 완료 리뷰 -- 상태: 요청됨 +- 상태: 통과 - 요청일: 2026-06-17 - 완료 근거: - - 원격 Mac runner에서 `./scripts/build-certified-macos.sh`가 Flutter gate, macOS build, Developer ID signing, notarization `Accepted`, stapling, Gatekeeper assessment를 모두 통과했다. - - certified artifact `AppSok-certified.zip`과 `.sha256`이 생성됐고, bundle metadata, signing identity, sandbox/network entitlement, bundled ADB runtime, universal binary 여부를 확인했다. + - 원격 Mac runner의 current HEAD `4aaedc8`에서 `./scripts/build-certified-macos.sh`가 Flutter gate, macOS build, Developer ID signing, notarization `Accepted`, stapling, Gatekeeper assessment를 모두 통과했다. + - certified artifact `AppSok-certified.zip`과 `.sha256`이 생성됐고, bundle metadata, signing identity, sandbox/network entitlement, bundled ADB runtime, universal binary 여부를 확인했다. 최신 checksum은 `0b379602777efcf51b662581bcbaea9d2ab7c10737cab932b1aaf614c540bc6a`다. - 배포 방식 Epic의 모든 기능 Task가 문서와 원격 evidence로 충족됐다. - 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 배포 산출물 사용 중 발견한 문제는 이 Milestone의 기능 Task가 아니라 별도 Milestone 또는 follow-up Task로 추가한다. + - [x] 사용자가 완료 결과를 확인했다 + - [x] archive 이동을 승인했다 +- 리뷰 코멘트: 2026-06-17 22:10 UTC certified build evidence 기준으로 완료한다. 배포 산출물 사용 중 발견한 문제는 이 Milestone의 기능 Task가 아니라 별도 Milestone 또는 follow-up Task로 추가한다. ## 범위 제외 @@ -79,9 +79,9 @@ AppSok을 사내 Mac에서 안정적으로 배포할 수 있도록 signing, nota - 관련 경로: `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에서 확인한다. -- 2026-06-17 원격 검증: `toki@toki-labs.com` checkout `03df593`에서 `./scripts/build-certified-macos.sh`가 `flutter analyze`, `flutter test`, `flutter build macos`, bundled `adb` Developer ID signing, app signing, notarization `Accepted`, `stapler`, `spctl --assess`를 모두 통과했다. -- 2026-06-17 certified artifact: `build/macos/Build/Products/Release/AppSok-certified.zip`, size `23M`, sha256 `1bcefb7acf70c36cdddd8e9de82bf7c7fd79ddcdd2f2b8fffbee36f2c59280a1`. +- 검증 메모: bundled `adb`, `NOTICE.txt`, `source.properties`를 포함하고 signing/notarization 전후 실행 여부를 remote Mac runner에서 확인한다. 현 pinned `adb`는 `otool -L` 기준 비시스템 dylib 의존성이 없어 별도 `lib64/*.dylib` bundle이 필요하지 않다. +- 2026-06-17 원격 검증: `toki@toki-labs.com` checkout `4aaedc8`에서 `./scripts/build-certified-macos.sh`가 `flutter analyze`, `flutter test`, `flutter build macos`, bundled `adb` Developer ID signing, app signing, notarization `Accepted`, `stapler`, `spctl --assess`를 모두 통과했다. +- 2026-06-17 certified artifact: `build/macos/Build/Products/Release/AppSok-certified.zip`, size `23M`, sha256 `0b379602777efcf51b662581bcbaea9d2ab7c10737cab932b1aaf614c540bc6a`. - 2026-06-17 bundle metadata: built app의 `CFBundleName=AppSok`, `CFBundleIdentifier=com.tokilabs.appsok`, URL scheme `appsok`을 확인했다. - 2026-06-17 signing/runtime: signed app의 `TeamIdentifier=AWA82DP9WD`, authority `Developer ID Application: Dongmyung Lee (AWA82DP9WD)`, hardened runtime, entitlements `com.apple.security.app-sandbox=true`, `com.apple.security.network.client=true`를 확인했다. - 2026-06-17 ADB runtime: certified app bundle resource의 `adb version`은 `35.0.0-11411520`, `adb devices -l`은 Android emulator를 감지했고, AppSok app binary와 bundled `adb`는 모두 `x86_64 arm64` universal binary다. diff --git a/agent-roadmap/phase/security-distribution/PHASE.md b/agent-roadmap/phase/security-distribution/PHASE.md index 3973fbb..b9e21ad 100644 --- a/agent-roadmap/phase/security-distribution/PHASE.md +++ b/agent-roadmap/phase/security-distribution/PHASE.md @@ -17,9 +17,9 @@ AppSok을 개인용 도구에서 사내 표준 도구로 확장하기 위한 배 - [완료] Jenkins 얇은 빌드와 artifact 다운로드 - 경로: `agent-roadmap/archive/phase/security-distribution/milestones/jenkins-thin-artifact-ci.md` - 요약: OTO 없이 Jenkins job만 얇게 구성해 AppSok 인증 ZIP을 빌드하고 Jenkins artifact 링크로 바로 다운로드할 수 있게 한다. -- [검토중] macOS 배포와 sandbox 검증 - - 경로: `agent-roadmap/phase/security-distribution/milestones/macos-distribution.md` - - 요약: Developer ID signing/notarization 배포 기준과 sandbox entitlement, bundled ADB packaging을 certified build evidence로 검증한다. +- [완료] macOS 배포와 sandbox 검증 + - 경로: `agent-roadmap/archive/phase/security-distribution/milestones/macos-distribution.md` + - 요약: Developer ID signing/notarization 배포 기준과 sandbox entitlement, bundled ADB packaging을 certified build evidence로 검증했다. - [스케치] Auth Broker와 Jenkins Plugin 후보 검토 - 경로: `agent-roadmap/phase/security-distribution/milestones/auth-broker-evaluation.md` - 요약: 별도 서버 또는 Jenkins plugin으로 Web Login callback을 제공할지, 사용자별 token 자동화로 충분한지 결정한다. diff --git a/docs/macos-certified-build.md b/docs/macos-certified-build.md index a2b6b77..45a9ab1 100644 --- a/docs/macos-certified-build.md +++ b/docs/macos-certified-build.md @@ -76,6 +76,7 @@ artifact 다운로드는 Jenkins 로그인 사용자 또는 사용자별 API tok 최종 산출물은 `build/macos/Build/Products/Release/AppSok-certified.zip`이다. Jenkins archived artifact 대상은 이 ZIP과 같은 경로의 `AppSok-certified.zip.sha256` 파일이다. +현재 pinned platform-tools `adb`는 `otool -L` 기준 비시스템 dylib 의존성이 없어서 certified bundle의 `Contents/Resources/adb-runtime/`에는 `adb`, `NOTICE.txt`, `source.properties`만 포함된다. 향후 Android platform-tools 구조가 바뀌어 별도 dylib가 필요해지면 Xcode "Copy ADB Runtime" phase와 signing/notarization 검증을 함께 갱신한다. ## 검증 기준 @@ -86,7 +87,7 @@ Jenkins archived artifact 대상은 이 ZIP과 같은 경로의 `AppSok-certifie - `spctl --assess --type execute --verbose=4`가 Notarized Developer ID source를 보고한다. - 최종 ZIP의 `shasum -a 256` 값이 `AppSok-certified.zip.sha256`에 기록된다. -2026-06-14 검증에서는 `AppSok-certified.zip` 생성, notarization accepted, stapling, Gatekeeper assessment를 통과했다. 기록된 checksum은 `1c8e89816d4cbf92bcf7c70aa40a4e36ae29efeaeb3cc64ce391c22bc6deef2a`다. +2026-06-17 검증에서는 `AppSok-certified.zip` 생성, notarization accepted, stapling, Gatekeeper assessment를 통과했고, `AppSok.app`과 bundled `adb`가 모두 `x86_64 arm64` universal binary임을 확인했다. 기록된 checksum은 `0b379602777efcf51b662581bcbaea9d2ab7c10737cab932b1aaf614c540bc6a`다. ## 주의 사항