-
Notifications
You must be signed in to change notification settings - Fork 0
Build and Run
빌드 명령, 시크릿 설정, 테스트, CI. 모듈 구조 상세는 Module Structure 참고.
-
Xcode 26.4+ (CI는 러너의
Xcode_26.4*를 선택) - Deployment Target iOS 26.4 / watchOS 26.4
- Swift 6.3
-
mise — Tuist 버전 고정용 (
UMCApp/mise.toml→4.155.0)
모든 신규·유지보수 작업은 UMCApp/에서 수행합니다. Makefile이 mise exec -- 래퍼를 제공하므로
로컬 tuist 버전 차이가 발생하지 않습니다.
cd UMCApp
# 최초 1회 (신규 팀원)
brew install mise # mise가 없다면
make bootstrap # mise.toml 기반 tuist 설치
make install # SPM 의존성 (tuist install)
# 일상 작업
make generate # 워크스페이스/프로젝트 생성 (별칭: make gen)
make open # Xcode 워크스페이스 열기
make generate-open # 생성 후 바로 열기
make build # 빌드
make test # 빌드 + 테스트
make doctor # 환경 진단 (mise/tuist/xcode 버전)
make help # 전체 타겟 목록| 타겟 | 설명 |
|---|---|
help |
도움말 출력 |
bootstrap |
최초 환경 구축 (mise로 tuist 설치) |
check-mise |
mise 설치 여부 확인 |
doctor |
개발 환경 진단 |
install |
SPM 의존성 설치 (tuist install) |
generate / gen
|
워크스페이스/프로젝트 생성 |
generate-open |
생성 후 Xcode로 열기 |
edit |
Tuist 매니페스트 편집 모드 |
graph |
의존성 그래프(graph.png) 생성 |
cache-warm |
Tuist 바이너리 캐시 워밍업 |
open |
Xcode 워크스페이스 열기 |
build |
빌드 (CONFIGURATION) |
pick |
스킴을 골라 빌드 (fzf 있으면 fuzzy, 없으면 번호 선택) |
test |
테스트 실행 |
test-pick |
스킴을 골라 테스트 |
test-network |
CoreNetwork 단위+통합 테스트 (서버 살아있으면 통합도 자동 실행) |
clean |
Tuist Derived/빌드 산출물 제거 |
clean-dd |
로컬 DerivedData 제거 |
reset |
전체 초기화 (clean + clean-dd) |
환경 변수 오버라이드
make build SCHEME=AuthDomain # 모듈 단위 빌드
make test SCHEME=AuthDomain # 모듈 단위 테스트
make test DESTINATION='platform=iOS Simulator,name=iPhone 17'
make build CONFIGURATION=Release
TUIST_BUILD_NUMBER=42 make generate # 아카이브용 빌드 번호자세한 사용법은 저장소의 UMCApp/MAKEFILE_GUIDE.md 참고.
시크릿은 xcconfig → Info.plist → Config(UMCFoundation) 경로로 주입됩니다.
| 파일 | 경로 | 커밋 | 역할 |
|---|---|---|---|
Shared.xcconfig |
UMCApp/Secrets/ |
✅ | 앱 타겟이 참조하는 진입 xcconfig. 비밀 아닌 기본값 + 환경별 BASE_URL
|
Secrets.xcconfig.template |
UMCApp/Secrets/ |
✅ | 플레이스홀더 템플릿 |
Secrets.xcconfig |
UMCApp/Secrets/ |
❌ | 개발자별 실제 키 (KAKAO_KEY, TMAP_SECRET_KEY, GOOGLE_CLIENT_ID, GOOGLE_REVERSED_CLIENT_ID, BASE_URL) |
GoogleService-Info.plist |
UMCApp/UMCApp/Resources/ |
❌ | Firebase (FCM 푸시 · RemoteConfig) |
cd UMCApp/Secrets
cp Secrets.xcconfig.template Secrets.xcconfig
# 팀 공유 채널에서 받은 실제 값 입력
cd ..
# Firebase 설정 파일 배치 (buildableFolders 로 자동 포함)
cp ~/Downloads/GoogleService-Info.plist UMCApp/Resources/
make generate- 두 파일 모두 팀 공유 채널에서 수령합니다. (
GoogleService-Info.plist는 Firebase 콘솔 → 프로젝트 설정 → iOS 앱com.umc.product에서도 내려받을 수 있습니다.) - 실제 키·설정 파일은 원격 저장소에 업로드하지 않습니다.
- xcconfig에서
//는 주석이므로 URL은https:/$()/...형태로 escape 합니다. -
BASE_URL[config=Debug]/BASE_URL[config=Release]로 서버가 자동 선택됩니다.
앱 타겟 Pre-action 스크립트가 빌드 전에 키 누락·플레이스홀더 잔존·plist 유효성을 검사합니다.
| Configuration | 동작 |
|---|---|
Release |
error:로 빌드 실패 — 키 없는 아카이브가 스토어로 나가는 것을 막는다 |
Debug |
warning:만 출력하고 통과 — 신규 클론·CI는 시크릿 없이도 빌드돼야 한다 |
시크릿이 없으면 카카오/구글 로그인·TMap 지오코딩·FCM 푸시가 빌드는 성공한 채 런타임에만 죽기 때문에, 이 가드가 유일한 조기 경보입니다.
cd UMCApp
make test # 전체
make test SCHEME=AuthDomain # 모듈 단위
make test-pick # 스킴 골라서
make test-network # CoreNetwork 단위 + (서버 살아있으면) 통합테스트 타겟은 Tuist 매니페스트에서 레이어별로 켭니다
(includesTests / includesDomainTests / includesDataTests / includesPresentationTests).
develop 푸시와 develop 대상 PR에서 실행됩니다 (macos-26 러너).
- Xcode 26.4+ 선택
-
Secrets.xcconfig플레이스홀더 복사 ·GoogleService-Info.plist복원 (GOOGLE_SERVICE_INFO_PLIST_BASE64시크릿 — 없으면 스킵, fail-open) - mise/Tuist 설치 + SwiftPM/Tuist 캐시 복원
-
make install→make generate→make test - 결과를 Discord 웹훅으로 알림
레거시
AppProduct만 감시하던ios.yml은 폐기됐습니다. 필요하면 태그v2.2.0에서 복원합니다.
매주 월요일 00:00 UTC · develop 푸시(Stella/Router 변경 시) · 수동 실행.
자세한 내용은 Stella · API 커버리지 참고.
AppProduct/는v2.2.0에 동결되어 있습니다. 열람·참고 전용이며 수정하지 않습니다.
open AppProduct/AppProduct.xcodeproj- 빌드/생성이 꼬이면
cd UMCApp && make reset후 다시make generate. -
SwiftData CloudKit init failed로그는 CloudKit 실패 후 로컬 폴백 상황일 수 있습니다. - 시뮬레이터에서는 APNS 토큰 미설정으로 FCM 토큰 발급이 제한될 수 있습니다.
- Preview에서 ModelContainer 오류가 발생하면 in-memory 컨테이너 주입 여부를 확인하세요.
-
ENABLE_USER_SCRIPT_SANDBOXING=YES이므로 Run Script가 읽는 파일은inputPaths에 선언해야 합니다(미선언 시EPERM).
관련 문서: Module Structure · Git Workflow