Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
6c50e77
feat: Tokens Studio JSON 기반 디자인 토큰 코드젠 도입 #24
Roy-wonji May 6, 2026
6238466
chore: 스플래시 로고 자산 + Service 공용 Encodable+ 정리 #1 #19
Roy-wonji May 8, 2026
6ed569f
refactor: CustomButton 신규 디자인 토큰으로 마이그레이션 #24
Roy-wonji May 8, 2026
8447f73
feat: CTA 버튼 스타일과 디자인 토큰 확장 #24
Roy-wonji May 11, 2026
af5109e
feat: Tokens Studio JSON 기반 Component 토큰 코드젠 추가 #24
Roy-wonji May 11, 2026
072ed8a
refactor: Button/Navigation을 UI 폴더로 이동하고 CTA가 ComponentToken 참조 #24
Roy-wonji May 11, 2026
6d53841
docs: AGENTS.md에 디자인 토큰 워크플로우와 DesignSystem 폴더 가이드 추가 #24
Roy-wonji May 11, 2026
543bd20
feat: 스플래시 onAppear 지연과 AnimatedImage gif 로고 적용 #1
Roy-wonji May 11, 2026
4618505
feat: Presentation/Auth 모듈 신설과 Coordinator/Login 스캐폴드 #20
Roy-wonji May 11, 2026
06afa06
feat: AppReducer가 스플래시 onAppear 후 Auth Coordinator로 전환 #20
Roy-wonji May 11, 2026
e69b0d3
Merge branch 'feature/Auth' of github.com:SWYP-Find/Picke-iOS into fe…
Roy-wonji May 11, 2026
da8c6f8
ci: design-tokens 레포 변경을 자동 PR로 동기화하는 워크플로우 추가 #24
Roy-wonji May 11, 2026
9aa7698
ci: design-tokens 동기화 워크플로우를 파일 변경 시에만 트리거 #24
Roy-wonji May 11, 2026
055ff78
merge: develop 의 design-tokens 자동화 워크플로우와 코드젠 동기화 결과 반영 #24
Roy-wonji May 11, 2026
6e768b8
docs: design-tokens 자동화 흐름과 ComponentToken 출력 추가 반영 #24
Roy-wonji May 11, 2026
77a2878
Merge branch 'develop' of github.com:SWYP-Find/Picke-iOS into feature…
Roy-wonji May 14, 2026
4d5e379
chore: tuist 그래프 PNG 와 .tuist-spider 산출물 .gitignore 처리
Roy-wonji May 14, 2026
f0b1b70
feat: 소셜 로그인용 도메인 엔티티 추가 (Apple/Google/Kakao Payload + AuthError + Au…
Roy-wonji May 14, 2026
859b466
feat: Apple/Google/Kakao OAuth Repository/Provider 인터페이스 + Mock 정의 #20
Roy-wonji May 14, 2026
fb486c8
feat: Apple/Google/Kakao OAuth Repository 구현체 추가 #20
Roy-wonji May 14, 2026
5580c15
feat: UnifiedOAuthUseCase 와 Apple/Google/Kakao OAuth Provider 계층 추가 #20
Roy-wonji May 14, 2026
d4e2565
feat: 카카오 OAuth 용 Info.plist 헬퍼 추가 (LSApplicationQueriesSchemes + KAK…
Roy-wonji May 14, 2026
bc8f7f4
feat: WeaveDI 에 OAuth Repository/Provider 등록 + ASWebAuthenticationSes…
Roy-wonji May 14, 2026
e221c4b
feat: 스플래시 → 로그인 진입 플로우 + 소셜 로그인 UI 구성 #20
Roy-wonji May 14, 2026
e83bda9
feat: 로그인 화면 디자인 자산 추가 (PicK 로고 + 카카오/구글 소셜 아이콘 + ShapeStyle 보강) #20
Roy-wonji May 14, 2026
81f3961
chore: Data/Repository 모듈에 GoogleSignIn SPM 의존성 추가 및 코드 포맷 정리 #20
Roy-wonji May 14, 2026
4379fd2
chore: 카카오 OAuth 파일 들여쓰기를 프로젝트 컨벤션(2-space) 으로 정렬 #20
Roy-wonji May 14, 2026
5e887e7
feat: Auth 도메인 Entity 및 Repository 인터페이스 정의 #20 #2
Roy-wonji May 14, 2026
65dc70e
feat: 서버 공통 응답 봉투(BaseResponseDTO) 및 Auth DTO/매퍼 추가 #20 #2
Roy-wonji May 14, 2026
d3fb6d2
feat: PieckeDomain 도메인 라우팅 + AuthService(BaseTargetType) 도입 #20 #2
Roy-wonji May 14, 2026
8674fe6
feat: AuthRepositoryImpl 및 토큰 자동 갱신 인프라 추가 #20 #2
Roy-wonji May 14, 2026
f5f58aa
feat: AuthUseCaseImpl + UnifiedOAuthUseCase 백엔드 로그인 연동 #20 #2
Roy-wonji May 14, 2026
e093bb9
fix: Google 서버 인증 코드 반환 + Kakao redirect URI 를 picke.store 로 통일 #20 #2
Roy-wonji May 14, 2026
80a8083
fix: LoginFeature 카카오 로그인 트리거 토큰 누락 및 에러 처리 보강 #20 #2
Roy-wonji May 14, 2026
15cd3f5
feat: AuthCoordinator 보강 + 로그인 화면 컴포넌트 및 공용 Toast UI 추가 #20 #2
Roy-wonji May 14, 2026
e276154
chore: AppReducer 에 Auth 코디네이터 통합 + AuthRepositoryImpl DI 등록 활성화 #20 #2
Roy-wonji May 14, 2026
ca9a23c
chore: Tuist/Package.swift 에 GoogleMobileAds SPM 추가 및 들여쓰기 정리 #20 #2
Roy-wonji May 14, 2026
def7000
feat: Google OAuth 를 ASWebAuthenticationSession + 백엔드 콜백 방식으로 통일 #20 #2
Roy-wonji May 14, 2026
8fe32d2
refactor: Kakao OAuth PKCE 제거 및 콜백 code → POST API 흐름 정리 #20 #2
Roy-wonji May 14, 2026
c32494e
fix: #20 OAuth 웹 로그인 안정화를 위해 웹 인증 흐름을 정리
Roy-wonji May 14, 2026
d22117b
refactor: #20 OAuth 모달 상호작용을 Combine 기반으로 정리
Roy-wonji May 14, 2026
2cdbb2e
fix: #20 인증 만료와 탈퇴 응답 처리를 실제 스키마에 맞춤
Roy-wonji May 14, 2026
51aa2f3
fix: #20 OAuth 환경 분기와 리뷰 지적 인증 결함 수정
Roy-wonji May 14, 2026
4f4d653
fix: #20 회원 탈퇴 경로 정책을 기존 계약으로 복구
Roy-wonji May 14, 2026
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ iOSInjectionProject/
# Tuist derived files
graph.dot
Derived/
/Picke-*.png
docs/graph/
.tuist-spider/

# Tuist managed dependencies
**/Tuist/.build
Expand Down
68 changes: 68 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,74 @@ tuist graph --format pdf --path ./graph.pdf
- `Release.xcconfig` — 릴리즈 빌드 공통
- `Shared.xcconfig` — 모든 환경 공통 설정

## 🎨 디자인 시스템 & 토큰 워크플로우

### 디자인 토큰 코드젠 (`Tools/TokenGenerator.swift`)

Tokens Studio for Figma 가 export 한 `Mode 1.tokens.json`을 Swift 토큰으로 변환합니다.

**단일 소스**
- 토큰 JSON 은 `SWYP-Find/design-tokens` 레포(public)가 단일 소스
- Picke-iOS 의 `Projects/Shared/DesignSystem/Resources/Mode 1.tokens.json` 은 워크플로우 실행 시에만 다운로드되는 임시 파일이며 git 에 추적되지 않음 (`.gitignore` 처리)

**자동 생성 출력 (⚠️ 직접 수정 금지 — 헤더에 AUTO-GENERATED 마크)**
- `Sources/Color/ShapeStyle+.swift` — 색 토큰 (`.primary500`, `.bgDefault`, `.borderError` 등)
- `Sources/Extension/CGFloat/CGFloat+Radius+.swift` — radius (`.none` / `.default` / `.full`)
- `Sources/Extension/CGFloat/CGFloat+Spacing+.swift` — spacing (`.s0` ~ `.s96`)
- `Sources/UI/Token/ComponentToken.swift` — 컴포넌트 토큰 (`ComponentToken.Button.Primary.Background.default` 등)

**디자이너 핸드오프 흐름 (자동)**
1. 디자이너가 Tokens Studio → `Mode 1.tokens.json` export
2. `SWYP-Find/design-tokens` 의 `main` 브랜치에 push
3. (자동) `notify-ios.yml` → `repository_dispatch(design-tokens-updated)` 발사
4. (자동) Picke-iOS `sync-design-tokens.yml` 실행 → raw URL 로 JSON 다운로드 → `swift Tools/TokenGenerator.swift` → 4개 출력 파일을 `develop` 에 직접 commit + push

수동 트리거가 필요할 때:
```bash
gh workflow run sync-design-tokens.yml --repo SWYP-Find/Picke-iOS
```

**Component 토큰 해석 우선순위** (TokenGenerator 내부)
1. `"{Colors.brand.primary.500}"` 같은 string alias → `.primary500`
2. inline hex + `$extensions.com.figma.aliasData.targetVariableName` → 해당 변수명이 우리 토큰셋에 있으면 그쪽으로
3. inline hex가 brand/semantic 변수의 hex와 일치하면 그 변수로
4. 위 셋 다 실패 시 `.init(hex: "...")` inline

### DesignSystem 폴더 구조

```
Projects/Shared/DesignSystem/Sources/
├── Color/ # 색 토큰 (auto)
├── CustomFont/ # Pretendard 폰트 정의
├── Image/ # ImageAsset
├── Extension/
│ ├── CGFloat/ # radius / spacing (auto)
│ ├── Color/ # Color/UIColor hex 초기화 등
│ ├── Image/
│ └── ScreenSize/
└── UI/
├── Button/ # CTA 버튼 컴포넌트
├── Navigaion/ # UINavigationController gesture 확장
└── Token/ # 컴포넌트 토큰 (auto)
```

### UI 컴포넌트 작성 규칙

- **색·radius는 `ComponentToken.*` 또는 brand/semantic 토큰 참조**. hex 리터럴(`.init(hex: "...")`) 직접 사용 금지
- **CTA 버튼은 두 API 제공 (병행 유지):**
- `CustomButton(action:title:config:isEnable:trailingIcon:)` — Config 기반, 기존 호출처 호환
- `Button { } .ctaButtonStyle(.primary, size: .large, icon: nil)` — `ButtonStyle` 기반
- variant × size 확장 시 `CTAButtonStyle.swift`의 enum에 케이스 추가 → `ComponentToken.Button.*`을 통해 색 분기
- pressed 상태는 `configuration.isPressed`로 토큰의 `.Background.pressed` 색을 사용 (opacity 변경 X)

### 새 파일 추가 시 Tuist 재생성 필수

`Project.swift`의 `sources: ["Sources/**"]` glob이 새 파일을 자동 픽업하지만, xcodeproj 동기화는 별도:
```bash
tuist generate --no-open --path Projects/Shared/DesignSystem
```
재생성 전 SourceKit 에러가 떠도 실제 빌드는 정상일 수 있으니, **항상 `xcodebuild`로 실 빌드 확인**할 것.

## 📊 지원 스킬 목록

### TDD 자동화 스킬
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public extension ModulePath {

public static let name: String = "Presentation"

case Auth
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,40 +10,44 @@ import ProjectDescription

/// 🎯 프로젝트 설정을 한 곳에서 관리합니다
/// 여기서 프로젝트 이름을 바꾸면 모든 곳에 자동으로 적용됩니다!
public struct ProjectConfig {

// MARK: - 🎯 프로젝트 이름 설정 (여기만 바꾸면 됩니다!)
/// 프로젝트 이름을 여기서 설정하세요
public static let projectName: String = "Picke"

// MARK: - 📱 앱 정보 (자동 생성됨)
public static let appName = projectName
public static let appDisplayName = projectName // 🎯 앱 화면에 표시될 이름
public static let appStageName = "\(projectName)-Stage"
public static let appProdName = "\(projectName)-Prod"
public static let appDevName = "\(projectName)-Dev"

// MARK: - 🔧 기타 설정
public static let bundleIdPrefix = "io.Picke.co"
public static let teamId = "N94CS4N6VR"
public static let deploymentTarget: ProjectDescription.DeploymentTargets = .iOS("17.0")
public static let deploymentDestination: ProjectDescription.Destinations = [.iPhone]
public static let appVersion = "1.0.0"

// MARK: - 🎨 테마 설정 (필요시 수정)
public static let organizationName = "Roy"
public static let description = "🎵 Multi-module application template"
public enum ProjectConfig {
// MARK: - 🎯 프로젝트 이름 설정 (여기만 바꾸면 됩니다!)

/// 프로젝트 이름을 여기서 설정하세요
public static let projectName: String = "Picke"

// MARK: - 📱 앱 정보 (자동 생성됨)

public static let appName = projectName
public static let appDisplayName = projectName // 🎯 앱 화면에 표시될 이름
public static let appStageName = "\(projectName)-Stage"
public static let appProdName = "\(projectName)-Prod"
public static let appDevName = "\(projectName)-Dev"

// MARK: - 🔧 기타 설정

public static let bundleIdPrefix = "io.Picke.co"
public static let teamId = "N94CS4N6VR"
public static let deploymentTarget: ProjectDescription.DeploymentTargets = .iOS("17.0")
public static let deploymentDestination: ProjectDescription.Destinations = [.iPhone]
public static let appVersion = "1.0.0"

// MARK: - 🎨 테마 설정 (필요시 수정)

public static let organizationName = "Roy"
public static let description = "🎵 Multi-module application template"
}

// MARK: - 🛠 Helper Extensions

public extension ProjectConfig {
/// 워크스페이스 이름 (프로젝트 이름과 동일)
static var workspaceName: String {
return projectName
}

/// 메인 번들 ID
static var mainBundleId: String {
return bundleIdPrefix
}
/// 워크스페이스 이름 (프로젝트 이름과 동일)
static var workspaceName: String {
projectName
}

/// 메인 번들 ID
static var mainBundleId: String {
bundleIdPrefix
}
}
Loading
Loading