feat(auth): Apple 로그인 구현 (#57)#58
Merged
Merged
Conversation
- PlatformAppleAuth 모듈 추가 (AppleAuthClient, AppleAuthCredential) - AppleLoginEndpoint, AppleLoginUserInfo 추가 (POST /auth/login/apple) - AppleServerLoginClient 추가 (서버 토큰 교환 + Keychain 저장) - IntroFeature에 appleLoginButtonTapped 액션 처리 추가 - IntroView에 Apple 로그인 버튼 UI 추가 - Sign in with Apple entitlement 추가 - Intro 스냅샷 baseline 갱신 (Apple 버튼 추가 반영) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Apple/Kakao 로그인 State 전이 검증 (성공·실패·에러 해제) - Apple 로그인 성공 → loginSucceeded=true, delegate(.loginSucceeded) - AppleAuthClient 실패 → errorMessage 설정 - AppleServerLoginClient 실패 → errorMessage 설정 - errorAlertDismissed → errorMessage=nil - Kakao 로그인 성공 동일 패턴 - KakaoServerLoginClient 실패 → errorMessage 설정 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Xcode 26에서 CombineSchedulers/Clocks 프레임워크의 -Swift.h 헤더를 의존성 스캔 시점에 찾지 못하는 빌드 에러 수정. SPM 패키지 타겟에만 SWIFT_ENABLE_EXPLICIT_MODULES=NO 적용. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Closed
Xcode 26 명시적 모듈 빌드 시 SPM 패키지의 -Swift.h 헤더를 의존성 스캔 단계에서 찾지 못하는 이슈 대응. build 및 test 커맨드 모두 적용. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CasePathsMacrosSupport 등 매크로 지원 프레임워크의 -Swift.h가 생성되기 전에 다른 타겟이 이를 import하는 경쟁 조건 해소. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SWIFT_ENABLE_EXPLICIT_MODULES은 앱 타겟에만 적용되어 매크로 호스트 (CasePathsMacrosSupport 등 macOS 빌드) 에는 미적용. SWIFT_PACKAGES_ENABLE_EXPLICIT_MODULES=NO 로 SPM 패키지 전체 커버. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CI는 매 실행 fresh 환경이므로 clean 불필요. tuist generate 캐시를 그대로 활용하여 매크로 호스트 빌드 순서 문제 우회. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… productTypes에 추가 PlatformAppleAuth 모듈 추가로 Xcode 26.3 병렬 빌드 시 explicit modules 스캐닝 race condition 노출. CombineSchedulers-Swift.h / CasePathsMacrosSupport-Swift.h 누락 근본 원인: productTypes 미등록 패키지가 Xcode 내장 SPM으로 빌드되어 SWIFT_ENABLE_EXPLICIT_MODULES=NO baseSettings 미적용. 핵심 TCA 의존성을 productTypes에 등록해 Tuist 관리 타겟으로 전환. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CasePathsMacrosSupport/CasePathsMacros/SwiftNavigationMacros는 macOS 매크로 호스트 타겟으로 baseSettings 미적용. targetSettings로 직접 명시해 SWIFT_ENABLE_EXPLICIT_MODULES=NO 적용. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
targetSettings는 productTypes 미등록 타겟에 효과 없음. CasePathsMacrosSupport를 Tuist 관리 framework 타겟으로 등록해야만 SWIFT_ENABLE_EXPLICIT_MODULES=NO baseSettings 적용 가능. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
swift-navigation 2.10.1 및 swift-case-paths 1.8.0 에서 macOS 매크로 호스트 빌드 시 CasePathsMacrosSupport-Swift.h not found 발생. develop 기준 CI 통과 버전인 2.8.x / 1.7.x 계열로 범위 제한. 불필요한 CasePathsMacrosSupport productTypes/targetSettings 롤백. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
swift-navigation을 direct dep으로 추가하면 IssueReporting trait 미선언 오류. swift-case-paths 1.7.x 고정만으로 swift-navigation도 2.8.0으로 transitive 제약되어 Xcode 26.3 CasePathsMacrosSupport-Swift.h 이슈 동일하게 해결. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
develop에서 독립적으로 수행된 CI 안정화: - runs-on: macos-15 고정 (Xcode 26.6 RC2 회귀 방지) - -jobs 1 직렬화 (framework -Swift.h race condition 방지) Package.swift 충돌: develop의 두 패키지(swift-navigation/swift-case-paths) 핀 방식 채택 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TCA 1.13+ 부터 swift-navigation을 직접 의존성으로 통합. TCA가 swift-navigation의 IssueReporting trait을 활성화하는데 2.8.0은 이 trait을 선언하지 않아 직접 pin 시 tuist generate 실패. swift-case-paths 1.7.x만 고정하면 SPM이 transitive로 swift-navigation 2.8.0을 제약하므로 동일 효과, trait 충돌 없음. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
About this PR
⚓ Related Issue
🥥 Contents
Apple 로그인 엔드포인트 연동 및 전체 인증 흐름 구현
PlatformAppleAuth모듈 신설 —AppleAuthClient,AppleAuthCredential(AuthenticationServices 기반)AppleLoginEndpoint추가 —POST /auth/login/apple, body:{identityToken, user?{name, email}}AppleServerLoginClient추가 — Apple identity token → 서버 토큰 교환 + Keychain 저장IntroFeature—appleLoginButtonTapped액션 처리 (AppleAuth → ServerLogin → delegate)IntroView— Apple 로그인 버튼 UI 추가테스트
IntroFeatureTests신설 — Reducer 단위 테스트 6 TC📸 Screenshot
Other information 🔥
AppleAuthClient.liveValue는ASAuthorizationAppleIDProvider를 사용하며 첫 로그인 시에만user정보(이름/이메일) 제공identityToken(RS256 JWT),user.name.{firstName,lastName},user.email최초 1회만 전달