Skip to content
Merged
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
242 changes: 241 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,241 @@
# 27th-App-Team-1-iOS
# NDGL-iOS

<p align="center">
<img src="https://img.shields.io/badge/Swift-5.0-orange.svg" />

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# Check for Swift version configuration in the project
rg -n "swiftVersion|swift_version|SWIFT_VERSION" --type-list | head -20

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 464


🏁 Script executed:

# Check if this is a Swift package, find Package.swift or similar config
fd -e "Package.swift" -e "package.json" -e "Podfile" -e ".swift-version" -e "project.pbxproj" | head -20

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 57


🏁 Script executed:

# Read the README to check line 198 and surrounding context
wc -l README.md

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 88


🏁 Script executed:

# Check what's around line 198 in README
sed -n '190,205p' README.md

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 343


🏁 Script executed:

# Find and check Project.swift or similar configuration
find . -name "Project.swift" -o -name "project.pbxproj" | head -5

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 251


🏁 Script executed:

# Check for .swift-version file
cat .swift-version 2>/dev/null || echo "No .swift-version file found"

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 103


🏁 Script executed:

# Search for Swift version configuration in all files
rg "5\.0|5\.9|swiftLanguageVersion|minimumDeploymentVersion" -n --max-count 20

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 50387


🏁 Script executed:

# Check Tuist configuration if it exists
fd -name "Project.swift" -exec head -100 {} \;

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 305


🏁 Script executed:

# Read the main App project configuration
head -150 "./Projects/App/Project.swift" | cat -n

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 889


🏁 Script executed:

# Search for swiftVersion or language version settings in Project files
rg "swiftVersion|languageVersion|\.swift" "./Projects/App/Project.swift" -A 2 -B 2

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 291


🏁 Script executed:

# Search for appSettings function and Swift version configuration
rg "appSettings|swiftLanguageVersion" "./Projects" -A 5 -B 2

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 357


🏁 Script executed:

# Check Tuist configuration files
fd "Settings\|settings" "./Projects" --type f | head -10

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 57


🏁 Script executed:

# Look for Swift version in ConfigPlugin or similar
rg "\.swift\(\"5\|swiftLanguageVersion" "./Projects" -A 2 -B 2

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 57


🏁 Script executed:

# Find where appSettings is defined
rg "appSettings" --type swift -A 10

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 1648


🏁 Script executed:

# Look for ConfigPlugin definition
find . -name "ConfigPlugin*" -o -name "*Config*" | grep -E "\.(swift|yml)$" | head -10

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 218


🏁 Script executed:

# Check Plugins directory for configuration
fd "Config" "./Plugins" --type f

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 144


🏁 Script executed:

# Check the full Settings+Extension.swift file to see complete Swift version configuration
cat "./Plugins/EnvPlugin/ProjectDescriptionHelpers/Settings+Extension.swift"

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 3591


🏁 Script executed:

# Check if there's any minimum iOS deployment version that could hint at Swift version
rg "IPHONEOS_DEPLOYMENT_TARGET|deploymentTarget" "./Plugins" -A 2 -B 2

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 4767


🏁 Script executed:

# Check Environment.swift for complete Xcode/deployment configuration
cat "./Plugins/EnvPlugin/ProjectDescriptionHelpers/Environment.swift" | head -50

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 827


🏁 Script executed:

# Check README for exact Xcode requirement
sed -n '190,205p' README.md

Repository: YAPP-Github/27th-App-Team-1-iOS

Length of output: 343


Swift 버전 뱃지를 업데이트하세요.

Xcode 16.0+를 요구사항으로 명시했는데(README 198줄), 뱃지는 Swift 5.0으로 표시되어 있습니다. Xcode 16.0은 Swift 5.9 이상과 함께 제공되고, iOS 17.0 지원에는 최소 Swift 5.8이 필요합니다. 뱃지를 Swift 5.9로 업데이트하거나 최소 Swift 5.8 이상으로 변경해야 합니다.

🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

4-4: Images should have alternate text (alt text)

(MD045, no-alt-text)

🤖 Prompt for AI Agents
In `@README.md` at line 4, The Swift version badge in README uses "Swift-5.0" (the
img badge string Swift-5.0-orange.svg) but the README requires Xcode 16.0+;
update that badge to reflect the correct Swift version (change the badge to
Swift-5.9, or at minimum Swift-5.8) and ensure the badge text matches the Xcode
requirement mentioned elsewhere in README (line referencing Xcode 16.0+).

<img src="https://img.shields.io/badge/iOS-17.0+-blue.svg" />
<img src="https://img.shields.io/badge/Tuist-4.x-purple.svg" />
<img src="https://img.shields.io/badge/Architecture-RIBs-green.svg" />
Comment on lines +4 to +7

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

뱃지 이미지에 대체 텍스트(alt text)를 추가하세요.

접근성 향상을 위해 모든 뱃지 이미지에 alt 속성을 추가해야 합니다. 스크린 리더 사용자를 위해 각 뱃지가 나타내는 내용을 설명하는 텍스트가 필요합니다.

♿ 접근성 개선을 위한 제안
 <p align="center">
-  <img src="https://img.shields.io/badge/Swift-5.0-orange.svg" />
-  <img src="https://img.shields.io/badge/iOS-17.0+-blue.svg" />
-  <img src="https://img.shields.io/badge/Tuist-4.x-purple.svg" />
-  <img src="https://img.shields.io/badge/Architecture-RIBs-green.svg" />
+  <img src="https://img.shields.io/badge/Swift-5.0-orange.svg" alt="Swift 5.0" />
+  <img src="https://img.shields.io/badge/iOS-17.0+-blue.svg" alt="iOS 17.0 이상" />
+  <img src="https://img.shields.io/badge/Tuist-4.x-purple.svg" alt="Tuist 4.x" />
+  <img src="https://img.shields.io/badge/Architecture-RIBs-green.svg" alt="RIBs 아키텍처" />
 </p>

Based on learnings: "markdownlint-cli2 flagged missing alt text for images (MD045)"

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<img src="https://img.shields.io/badge/Swift-5.0-orange.svg" />
<img src="https://img.shields.io/badge/iOS-17.0+-blue.svg" />
<img src="https://img.shields.io/badge/Tuist-4.x-purple.svg" />
<img src="https://img.shields.io/badge/Architecture-RIBs-green.svg" />
<p align="center">
<img src="https://img.shields.io/badge/Swift-5.0-orange.svg" alt="Swift 5.0" />
<img src="https://img.shields.io/badge/iOS-17.0+-blue.svg" alt="iOS 17.0 이상" />
<img src="https://img.shields.io/badge/Tuist-4.x-purple.svg" alt="Tuist 4.x" />
<img src="https://img.shields.io/badge/Architecture-RIBs-green.svg" alt="RIBs 아키텍처" />
</p>
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

4-4: Images should have alternate text (alt text)

(MD045, no-alt-text)


5-5: Images should have alternate text (alt text)

(MD045, no-alt-text)


6-6: Images should have alternate text (alt text)

(MD045, no-alt-text)


7-7: Images should have alternate text (alt text)

(MD045, no-alt-text)

🤖 Prompt for AI Agents
In `@README.md` around lines 4 - 7, Add descriptive alt text to each badge <img>
tag (e.g., the Swift-5.0, iOS-17.0+, Tuist-4.x, and Architecture-RIBs badges) so
screen readers can convey their meaning; locate the four <img src="...">
elements and add an alt="..." attribute describing the badge text (for example
"Swift 5.0", "iOS 17.0+", "Tuist 4.x", "Architecture: RIBs").

</p>

## 📱 프로젝트 소개

NDGL은 여행 콘텐츠를 따라가며 나만의 여행을 계획할 수 있는 iOS 앱입니다.

## 🛠 기술 스택

| 구분 | 기술 |
|:---:|:---|
| **Architecture** | RIBs (Router-Interactor-Builder-Presenter) |
| **UI** | UIKit, SnapKit, Then |
| **Reactive** | RxSwift, RxCocoa |
| **Network** | Moya, Alamofire |
| **Image** | Kingfisher |
| **Animation** | Lottie |
| **Push** | Firebase Cloud Messaging (FCM) |
| **Project** | Tuist |
| **CI/CD** | GitHub Actions, Fastlane |

## 📁 모듈 구조

```
NDGL-iOS
├── Projects
│ ├── App # 앱 타겟
│ ├── Features # Feature 모듈
│ │ ├── RootFeature # 앱 진입점 RIB
│ │ ├── TabBarFeature # 탭바 RIB
│ │ ├── HomeFeature # 홈 화면
│ │ ├── FollowFeature # 따라가기 콘텐츠
│ │ ├── TravelFeature # 다가오는 여행
│ │ └── BaseFeatureDependency
│ ├── Domain # Entity, UseCase, Repository Interface
│ ├── Data # Repository 구현체, DTO
│ ├── Core # 공통 유틸리티
│ └── Modules
│ ├── DSKit # 디자인 시스템 (Color, Font, Component)
│ ├── Networks # 네트워크 레이어
│ └── ThirdPartyLibs # 외부 라이브러리 의존성
├── Plugins
│ └── EnvPlugin # 환경 설정 플러그인
├── Tuist # Tuist 설정
├── fastlane # CI/CD 스크립트
└── Scripts # 빌드 스크립트
```

## 🏗 아키텍처

### RIBs Architecture

```
┌─────────────────────────────────────────────────┐
│ Router │
│ (화면 전환, Child RIB Attach/Detach) │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Interactor │
│ (비즈니스 로직, 상태 관리) │
└─────────────────────────────────────────────────┘
┌──────────┴──────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Presenter │ │ Builder │
│ (View ↔ 통신) │ │ (DI, RIB 생성) │
└──────────────────┘ └──────────────────┘
┌──────────────────┐
│ ViewController │
│ (UI 렌더링) │
└──────────────────┘
```

### 모듈 의존성

```
┌─────────┐
│ App │
└────┬────┘
┌────────────────────┼────────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌───────────┐
│ Data │ │ Networks │ │ Root │
└────┬─────┘ └────┬─────┘ │ Feature │
│ │ └─────┬─────┘
│ ┌────┴────┐ │
│ ▼ ▼ ▼
│ ┌────────┐┌────────┐ ┌───────────┐
│ │ Domain ││ Core │ │ TabBar │
│ └────────┘└────────┘ │ Feature │
│ └─────┬─────┘
│ │
▼ ▼
┌──────────┐ ┌───────────┐
│ Domain │ │ Home │
│ Networks │ │ Feature │
└──────────┘ └─────┬─────┘
┌─────────────────────┐
│ BaseFeatureDependency│
└──────────┬──────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌───────┐
│ Core │ │ Domain │ │ DSKit │
└────┬───┘ └────┬───┘ └───┬───┘
│ │ │
└──────────────┴──────────────┘
┌────────┐
│ Core │
└────┬───┘
┌───────────────┐
│ ThirdPartyLibs│
└───────────────┘
```

### 주요 의존성 관계

| 모듈 | 의존성 |
|:---:|:---|
| **App** | Data, Networks, RootFeature |
| **RootFeature** | TabBarFeature |
| **TabBarFeature** | HomeFeature |
| **HomeFeature** | BaseFeatureDependency |
| **BaseFeatureDependency** | Core, Domain, DSKit |
| **Data** | Domain, Networks |
| **Networks** | Core, Domain |
| **Domain** | Core |
| **DSKit** | Core |
| **Core** | ThirdPartyLibs (RxSwift, RIBs, SnapKit, Then, Moya, Kingfisher) |

## 🌿 브랜치 전략

| 브랜치 | 설명 |
|:---:|:---|
| `main` | 프로덕션 배포 브랜치 |
| `develop` | 개발 통합 브랜치 |
| `feat/#이슈번호-작업내용` | 기능 개발 브랜치 |
| `fix/#이슈번호-작업내용` | 버그 수정 브랜치 |
| `hotfix/#이슈번호-작업내용` | 긴급 수정 브랜치 (develop에서 분기) |

### PR 규칙
- **2명 이상 승인** 시 머지 가능
- CI 통과 필수

## 🔄 CI/CD

| 환경 | 트리거 | 동작 |
|:---:|:---:|:---|
| **CI** | `develop` PR/Push | 빌드 체크, 린트 검사 |
| **CD** | `main` Push | Fastlane을 통한 TestFlight 배포 |

## 📝 커밋 컨벤션

```
feat: #이슈번호 - 작업 내용
```

| 타입 | 설명 |
|:---:|:---|
| `feat` | 새로운 기능 추가 |
| `fix` | 버그 수정 |
| `docs` | 문서 수정 |
| `style` | 코드 포맷팅 (기능 변경 없음) |
| `refactor` | 코드 리팩토링 |
| `test` | 테스트 코드 추가/수정 |
| `chore` | 빌드, 패키지 매니저 설정 |
| `design` | UI/UX 디자인 변경 |

## 📐 코드 컨벤션

[StyleShare Swift Style Guide](https://github.com/StyleShare/swift-style-guide) 준수

### SwiftLint
프로젝트 루트의 `.swiftlint.yml` 설정 파일 사용

## 🚀 시작하기

### 요구사항
- Xcode 16.0+
- iOS 17.0+
- [mise](https://mise.jdx.dev/) (Tuist, Ruby 버전 관리)

### 설치 및 실행

```bash
# 1. 저장소 클론
git clone https://github.com/YourOrg/NDGL-iOS.git

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

플레이스홀더 URL을 실제 저장소 URL로 수정하세요.

YourOrg는 플레이스홀더입니다. 실제 GitHub 조직명과 저장소명으로 교체해야 합니다. 이 상태로는 사용자가 저장소를 클론할 수 없습니다.

PR URL을 기반으로 실제 저장소는 YAPP-Github/27th-App-Team-1-iOS인 것으로 보입니다. 저장소명을 NDGL-iOS로 변경할 예정인지, 아니면 현재 저장소명을 사용해야 하는지 확인이 필요합니다.

🔧 제안된 수정

저장소명을 NDGL-iOS로 변경하는 경우:

-git clone https://github.com/YourOrg/NDGL-iOS.git
+git clone https://github.com/YAPP-Github/NDGL-iOS.git
 cd NDGL-iOS

현재 저장소명을 유지하는 경우:

-git clone https://github.com/YourOrg/NDGL-iOS.git
-cd NDGL-iOS
+git clone https://github.com/YAPP-Github/27th-App-Team-1-iOS.git
+cd 27th-App-Team-1-iOS
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
git clone https://github.com/YourOrg/NDGL-iOS.git
git clone https://github.com/YAPP-Github/NDGL-iOS.git
🤖 Prompt for AI Agents
In `@README.md` at line 206, Replace the placeholder clone URL in README.md (the
line "git clone https://github.com/YourOrg/NDGL-iOS.git") with the real
repository URL: either update the org/name to "YAPP-Github/27th-App-Team-1-iOS"
if that is the intended repo (e.g., git clone
https://github.com/YAPP-Github/27th-App-Team-1-iOS.git), or change the org/name
to the actual GitHub org and repo if you are renaming to NDGL-iOS; also search
README.md for any other occurrences of "YourOrg" or "NDGL-iOS" and make
consistent updates and confirm which canonical repo name to use before
committing.

cd NDGL-iOS

# 2. mise로 도구 설치
mise install

# 3. 의존성 설치
bundle install
tuist install

# 4. 프로젝트 생성
tuist generate

# 5. Xcode에서 NDGL-iOS.xcworkspace 열기
```

## 👥 팀원

<table>
<tr>
<td align="center">
<a href="https://github.com/KimNahun">
<img src="https://github.com/KimNahun.png" width="120" />
<br />
<b>김나훈</b>
</a>
</td>
<td align="center">
<a href="https://github.com/ChoiAnYong">
<img src="https://github.com/ChoiAnYong.png" width="120" />
<br />
<b>최안용</b>
</a>
</td>
</tr>
Comment on lines +222 to +240

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

팀원 프로필 이미지에 대체 텍스트를 추가하세요.

접근성 향상을 위해 팀원 프로필 이미지에도 alt 속성을 추가해야 합니다.

♿ 접근성 개선을 위한 제안
     <td align="center">
       <a href="https://github.com/KimNahun">
-        <img src="https://github.com/KimNahun.png" width="120" />
+        <img src="https://github.com/KimNahun.png" width="120" alt="김나훈 프로필" />
         <br />
         <b>김나훈</b>
       </a>
     </td>
     <td align="center">
       <a href="https://github.com/ChoiAnYong">
-        <img src="https://github.com/ChoiAnYong.png" width="120" />
+        <img src="https://github.com/ChoiAnYong.png" width="120" alt="최안용 프로필" />
         <br />
         <b>최안용</b>
       </a>
     </td>

Based on learnings: "markdownlint-cli2 flagged missing alt text for images (MD045)"

🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

228-228: Images should have alternate text (alt text)

(MD045, no-alt-text)


235-235: Images should have alternate text (alt text)

(MD045, no-alt-text)

🤖 Prompt for AI Agents
In `@README.md` around lines 222 - 240, The team member profile images in
README.md (the <img> tags for 김나훈 and 최안용) are missing alt attributes; update
each <img> to include descriptive alt text (e.g., alt="김나훈 GitHub profile" and
alt="최안용 GitHub profile") so the images are accessible and satisfy markdownlint
MD045.

</table>