결정 매트릭스 · iOS 서명

이천이십육 공유 원격 Mac 결정 매트릭스: Fastlane Match 동시 pull·키체인 분할·Codesign 큐 타임아웃

2026.05.19 Meshmac Team 10분 읽기

이에서 팔인 iOS 엔지니어가 한 대의 공유 원격 Mac에서 Fastlane Match git pull이 겹치고, 배포 인증서가 잘못된 login 키체인에 들어가며, Codesign 큐가 타임아웃 없이 멈출 때 시간이 새어 나갑니다. 본문은 결정 매트릭스·flock·큐 파라미터 표·다섯 단계·FAQ로 Match·서명·감사를 런북에 붙일 수 있게 정리합니다.

· SSH 대 VNC 선택 · 공유 빌드 권한 FAQ

풀드 Mac에서 Match가 깨지는 세 가지

  1. 첫째 두 레인이 match development를 동시에 push해 암호화 git 저장소가 깨집니다
  2. 둘째 배포 인증서가 GUI login.keychain에 들어가 SSH 잡과 섞입니다
  3. 셋째 Codesign이 flock 대기 없이 멈추고 락 보유자가 로그에 없습니다

결정 매트릭스: 레인 레이아웃 vs 영향 범위

MeshMac M4 풀에서 이에서 팔인 시트는 기본으로 레인 키체인·직렬 쓰기를 선택합니다

패턴 Match + 레인 키체인 공유 login만
동시 pullshallow fetch + 읽기 락, 쓰기 직렬push 경쟁·인증서 유실
Codesign 큐호스트당 archive 1, CI 레인 대기병렬 archive가 USB 인증 경쟁
프로덕션권장랩 전용

Match git 동시성과 shallow 클론 전략

인증서 저장소는 프로덕션 데이터입니다. 읽기는 겹쳐도 되고, 쓰기는 한 번에 하나만 허용합니다.

  • Shallow git clone --depth 1·git fetch --depth 1 후 Match
  • 읽기 병렬 쓰기 락 없을 때 development fetch 병렬 허용
  • 쓰기 직렬 development·appstore·nuke는 match-repo.lock 하나로 감쌉니다
MATCH_GIT_URL=git@github.com:org/certificates.git
export GIT_SSH_COMMAND="ssh -o ControlMaster=auto -o ControlPath=/tmp/ssh-%r@%h:%p"
flock -w 180 /var/run/meshmac/match-repo.lock \
  fastlane match development --readonly false

login 키체인 분할(헤드리스 서명)

SSH 사용자 격리는 서명 파티션을 대체하지 않습니다. archive 단계는 Xcode Codesign 큐 매트릭스와 맞추세요.

  • 레인 파일 /srv/keychains/team-a-ci.keychain-db 앱·테넌트별
  • Unlock Codesign 래퍼 안에서만 security unlock-keychain
  • 환경 MATCH_KEYCHAIN_NAME·비밀번호는 레인 env, 공유 login 금지
security list-keychains -s "$LANE_KEYCHAIN" login.keychain-db
security set-keychain-settings -lut 21600 "$LANE_KEYCHAIN"
security find-identity -v -p codesigning "$LANE_KEYCHAIN"

빌드 락·flock 대기·Codesign 큐 타임아웃

아래 기본값을 런북에 붙인 뒤 실제 빌드의 lock-wait 백분위로 조정하세요

리소스 flock / 큐 잡 타임아웃
Match git 쓰기flock -w 180레인 15분 상한
Codesign archiveflock -w 60045~90분
DerivedDataflock -w 6035~60분 통합
대기 깊이레인당 최대 12잡디스크 15% 미만 fail-fast

실패 재시도·감사 필드·운영 신호

  • 재시도 git fetch 일시 오류 최대 2회, 키체인 unlock 실패는 0회
  • 감사 JSON lane·match_git_sha·keychain_path·lock_wait_ms
  • 알림 archive 연속 3회 lock-wait p95 > 120초면 당번 호출

MeshMac 다섯 단계 롤아웃

  1. 하나 archive 배수·공유 호스트 match nuke 차단
  2. MATCH_GIT_BRANCH 고정·/var/run/meshmac/ 락 설치
  3. 레인 keychain 생성·레인당 배포 인증서 1회 import
  4. archive를 codesign.queue flock으로 감싸고 표의 타임아웃 적용
  5. 다섯 JSON 감사를 채팅 웹훅으로 보내고 unlock 실패 드릴 1회

설계 리뷰에 붙일 인용 수치

  • Shallow 병렬 읽기 M4 풀에서 Match 콜드스타트 git 시간을 줄이고 쓰기 경쟁은 넓히지 않습니다
  • 레인 키체인 배포 인증서를 권한 FAQ의 GUI login 세션 밖에 둡니다
  • flock -w 600 두 레인이 한 빌더를 쓸 때 archive 45~90분 기준 합리적 기본값입니다

FAQ

두 명이 동시에 match development?
shallow fetch·읽기 락·쓰기 flock 직렬화일 때만. nuke·비밀번호 회전은 병렬 금지.
CI가 login.keychain을 풀까?
아니요. 레인 keychain-db를 Codesign 래퍼 안에서만 unlock. VNC GUI는 SSH 대 VNC대로 별도 계정.
두 번째 MeshMac 노드는 언제?
튜닝 후 lock-wait p95가 2분을 넘거나 archive를 동시에 2개 돌려야 할 때. flock만 늘리지 말고 레인을 노드로 분리.

요약: Match 쓰기 직렬화·키체인 분할

MeshMac 다중 노드는 큐가 포화될 때 레인마다 Apple Silicon을 나눕니다. 공개 요금·로드밸런스·페일오버·에서 노드를 예약한 뒤 Match 마이그레이션을 진행하세요.

Mac 노드·Fastlane Match 준비

공유 원격 Mac으로 Match용 SSH를 연 뒤 SSH 대 VNC· 권한 FAQ로 계정을 맞추세요. · 요금에서 큐 파라미터를 확정하세요.