Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions .github/workflows/testflight-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ jobs:
# PR 이 머지된 경우 또는 수동 실행일 때만 동작 (단순 close 는 스킵)
if: github.event.pull_request.merged == true || github.event_name == 'workflow_dispatch'
runs-on: macos-15
# 서명 단계가 매달려도 러너를 오래 점유하지 않도록 상한을 둔다
# (concurrency 가 cancel-in-progress: false 라 멈춘 잡이 후속 배포를 전부 막는다)
timeout-minutes: 60
env:
# Appfile / Fastfile
APP_IDENTIFIER: ${{ secrets.APP_IDENTIFIER }}
Expand All @@ -26,6 +29,9 @@ jobs:
# match
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
MATCH_KEYCHAIN_PASSWORD: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }}
# 러너에 이미 있는 login 키체인은 비밀번호를 알 수 없어 match 의 set-key-partition-list 가 실패한다
# → 전용 키체인을 새로 만들어 쓴다 (Matchfile 이 이 값을 참조)
MATCH_KEYCHAIN_NAME: build.keychain
# 인증서 repo(private) 클론용 토큰 — Deploy 스텝에서 MATCH_GIT_BASIC_AUTHORIZATION 로 인코딩
CONFIG_PRIVATE_REPO_TOKEN: ${{ secrets.CONFIG_PRIVATE_REPO_TOKEN }}
# App Store Connect API (Fastfile 변수명)
Expand Down Expand Up @@ -62,14 +68,16 @@ jobs:
echo "GITHUB_ACCESS_TOKEN=${CONFIG_PRIVATE_REPO_TOKEN}" > .env
make download-privates

# Matchfile 이 keychain_name("login") 을 고정 사용하므로 CI 에서 login 키체인을 준비
# 생성 실패를 무시하면 러너의 기존 키체인을 그대로 쓰게 되고, 비밀번호 불일치로
# codesign 이 뜰 수 없는 승인 팝업을 기다리며 무한 대기한다. 실패 시 즉시 잡을 멈춘다.
- name: Prepare keychain
run: |
security create-keychain -p "$MATCH_KEYCHAIN_PASSWORD" login.keychain-db || true
security set-keychain-settings -lut 21600 login.keychain-db
security unlock-keychain -p "$MATCH_KEYCHAIN_PASSWORD" login.keychain-db
security list-keychains -d user -s login.keychain-db
security default-keychain -s login.keychain-db
security create-keychain -p "$MATCH_KEYCHAIN_PASSWORD" build.keychain
security set-keychain-settings -lut 21600 build.keychain
security unlock-keychain -p "$MATCH_KEYCHAIN_PASSWORD" build.keychain
# xcodebuild 가 시스템 인증서를 찾을 수 있도록 login 키체인도 검색 목록에 남긴다
security list-keychains -d user -s build.keychain login.keychain-db
security default-keychain -s build.keychain

# SPM 의존성 설치 (fastlane 의 ensure_workspace 가 generate 하기 전 선행)
- name: Install dependencies
Expand Down
3 changes: 2 additions & 1 deletion fastlane/Matchfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ include_all_certificates(true)
shallow_clone(true)
skip_certificate_matching(true)
skip_confirmation(true)
keychain_name("login")
# 로컬은 login 키체인을 그대로 쓰고, CI 는 MATCH_KEYCHAIN_NAME 으로 전용 키체인을 지정한다
keychain_name(ENV["MATCH_KEYCHAIN_NAME"] || "login")
keychain_password(ENV["MATCH_KEYCHAIN_PASSWORD"])

# .env 파일에서 API 키가 있으면 임시 JSON 파일 생성 후 사용 완료시 자동 삭제
Expand Down
Loading