Skip to content
Open
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
280 changes: 279 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,279 @@
# 2025-C6-A6-HonestHouse
<div align="center">

![Bracket Banner](https://github.com/user-attachments/assets/4bca99a7-5b37-4c6d-a059-212e9458a096)


</div>

---

## πŸ“‹ Overview

Bracket은 DSLR/미러리슀 카메라 μ‚¬μš©μžλ₯Ό μœ„ν•œ 촬영 보쑰 μ•±μž…λ‹ˆλ‹€.

---

## ✨ μ£Όμš” κΈ°λŠ₯

<div align="center">

<!-- TODO: GIF둜 이미지 λ³€κ²½ -->

### πŸ“Έ Tri-Shot

| ![Tri-Shot](https://github.com/user-attachments/assets/700a89d7-90f5-4c97-b0c6-472685aee9bd) | ![Preset](https://github.com/user-attachments/assets/fc50ce99-efb0-4c73-b0bf-e941b5583c29) | ![Camera UI](https://github.com/user-attachments/assets/ba00c874-c9cb-4acc-829f-5e6356cd9313) |
|:---:|:---:|:---:|
| **Tri-Shot 메인** | **프리셋 μ œμž‘** | **카메라 UI** |

</div>

미리 μ €μž₯ν•œ 3κ°€μ§€ 프리셋(촬영 λͺ¨λ“œ, 쑰리개, μ…”ν„°, ISO, μƒ‰μ˜¨λ„, ν‹΄νŠΈ, ν”½μ²˜μŠ€νƒ€μΌ)을 μ…”ν„°λ₯Ό λˆ„λ₯Όλ•Œλ§ˆλ‹€ μ μš©ν•©λ‹ˆλ‹€.

**기술 κ΅¬ν˜„**
- [ ] **개발자 μž‘μ„±**: 프리셋 μˆœν™˜ 둜직 및 μƒνƒœ 관리 방식
- [ ] **개발자 μž‘μ„±**: Canon Camera Control API 호좜 ꡬ쑰
- [ ] **개발자 μž‘μ„±**: 비동기 처리 및 동기화 λ©”μ»€λ‹ˆμ¦˜

```swift
// 핡심 μ½”λ“œ μŠ€λ‹ˆνŽ« (개발자 μž‘μ„±)
// 예: PresetCycleManager, CameraService λ“±
```
---

<div align="center">

### πŸ€– 아카이빙

<!-- TODO: GIF둜 이미지 λ³€κ²½ -->

![Archiving](https://github.com/user-attachments/assets/4d84fab9-a794-4ebb-9599-5edc4628831b)

</div>

Vision Frameworkλ₯Ό ν™œμš©ν•œ 이미지 μœ μ‚¬λ„ 뢄석과 μ‹œκ°„λŒ€μ— λ”°λ₯Έ κ°€μ€‘μΉ˜ κ³„μ‚°μœΌλ‘œ λΉ„μŠ·ν•œ 사진끼리 κ·Έλ£Ήν™”ν•©λ‹ˆλ‹€.

**기술 κ΅¬ν˜„**
- [ ] **개발자 μž‘μ„±**: Vision Framework νŠΉμ§•μ  μΆ”μΆœ 방식
- [ ] **개발자 μž‘μ„±**: μœ μ‚¬λ„ 계산 μ•Œκ³ λ¦¬μ¦˜ (거리 μΈ‘μ • 방법 λ“±)
- [ ] **개발자 μž‘μ„±**: κ·Έλ£Ήν™” κΈ°μ€€ 및 μ„±λŠ₯ μ΅œμ ν™” μ „λž΅

```swift
// 핡심 μ½”λ“œ μŠ€λ‹ˆνŽ« (개발자 μž‘μ„±)
// 예: ArchivingService, VisionAnalyzer λ“±
```

**μ„±λŠ₯ μ§€ν‘œ**
- [ ] **개발자 μž‘μ„±**: 이미지 뢄석 속도 (nμž₯ κΈ°μ€€ 처리 μ‹œκ°„)
- [ ] **개발자 μž‘μ„±**: λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 및 μ΅œμ ν™” κ²°κ³Ό
- [ ] **개발자 μž‘μ„±**: κ·Έλ£Ήν™” 정확도

---

## πŸ›  기술 μŠ€νƒ

<div align="center">

### Core Technologies

<img src="https://img.shields.io/badge/SwiftUI-0D96F6?style=for-the-badge&logo=swift&logoColor=white" alt="SwiftUI" />
<img src="https://img.shields.io/badge/Combine-FA7343?style=for-the-badge&logo=swift&logoColor=white" alt="Combine" />
<img src="https://img.shields.io/badge/MVVM-orange?style=for-the-badge" alt="MVVM" />

### Frameworks & APIs

<img src="https://img.shields.io/badge/Vision-blue?style=for-the-badge&logo=apple&logoColor=white" alt="Vision" />
<img src="https://img.shields.io/badge/Core_Bluetooth-007AFF?style=for-the-badge&logo=bluetooth&logoColor=white" alt="Core Bluetooth" />
<img src="https://img.shields.io/badge/Core_Data-FA7343?style=for-the-badge&logo=apple&logoColor=white" alt="Core Data" />

<img src="https://img.shields.io/badge/Canon_Camera_Control_API-CE0000?style=for-the-badge&logo=canon&logoColor=white" alt="Canon API" />
<img src="https://img.shields.io/badge/RESTful_API-009688?style=for-the-badge" alt="RESTful API" />
<img src="https://img.shields.io/badge/Digest_Auth-4CAF50?style=for-the-badge&logo=lock&logoColor=white" alt="Digest Auth" />

</div>

<br/>

| 기술 | μ‚¬μš© λͺ©μ  | 핡심 κ΅¬ν˜„ |
|------|----------|----------|
| **SwiftUI** | μ„ μ–Έν˜• UI | [개발자 μž‘μ„±: MVVM νŒ¨ν„΄, μƒνƒœ 관리 방식 λ“±] |
| **Combine** | λ°˜μ‘ν˜• ν”„λ‘œκ·Έλž˜λ° | [개발자 μž‘μ„±: Publisher/Subscriber ν™œμš© 사둀] |
| **Vision Framework** | 이미지 뢄석 | [개발자 μž‘μ„±: νŠΉμ§•μ  μΆ”μΆœ, μœ μ‚¬λ„ 계산 방법] |
| **Core Bluetooth** | 무선 톡신 | [개발자 μž‘μ„±: WiFi μ—°κ²° 및 데이터 전솑 κ΅¬ν˜„] |
| **Canon Camera Control API** | 카메라 μ œμ–΄ | [개발자 μž‘μ„±: HTTP 톡신, Digest Auth κ΅¬ν˜„] |
| **Core Data** | 데이터 μ˜μ†μ„± | [개발자 μž‘μ„±: 프리셋 μ €μž₯, 사진 메타데이터 관리] |

---

## πŸ— μ•„ν‚€ν…μ²˜

### System Architecture

```
[개발자 μž‘μ„±: μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨]
μ˜ˆμ‹œ ꡬ쑰:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ View (SwiftUI) β”‚
β”‚ - Tri-shot UI β”‚
β”‚ - Preset Management β”‚
β”‚ - Archiving UI β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ @Published
β”‚ @StateObject
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ViewModel (Combine) β”‚
β”‚ - TrishotViewModel β”‚
β”‚ - PresetViewModel β”‚
β”‚ - ArchivingViewModel β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ Protocol
β”‚ Dependency Injection
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Repository (Protocol-oriented) β”‚
β”‚ - CameraRepository β”‚
β”‚ - PresetRepository β”‚
β”‚ - PhotoRepository β”‚
β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Service β”‚ β”‚ Core Data β”‚
β”‚ - Camera β”‚ β”‚ - Preset Entity β”‚
β”‚ - Vision β”‚ β”‚ - Photo Entity β”‚
β”‚ - Bluetooth β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
Comment on lines +111 to +144
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟑 Minor

μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨ μ½”λ“œ 블둝에 μ–Έμ–΄ μ§€μ • ν•„μš”

ASCII λ‹€μ΄μ–΄κ·Έλž¨μ„ ν¬ν•¨ν•œ μ½”λ“œ 블둝에 μ–Έμ–΄λ₯Ό μ§€μ •ν•˜μ„Έμš”.

 ### System Architecture
 
-```
+```plaintext
 [개발자 μž‘μ„±: μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨]
 μ˜ˆμ‹œ ꡬ쑰:
 
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
-```
+```
🧰 Tools
πŸͺ› markdownlint-cli2 (0.18.1)

124-124: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

πŸ€– Prompt for AI Agents
In README.md around lines 124 to 157, the fenced code block containing the ASCII
architecture diagram lacks a language tag; change the opening fence from ``` to
```plaintext (and keep the closing ``` intact) so the diagram is explicitly
marked as plain text for proper rendering and syntax highlighting.


### 데이터 흐름

- [ ] **개발자 μž‘μ„±**: μ£Όμš” κΈ°λŠ₯별 데이터 흐름 μ„€λͺ…
- [ ] **개발자 μž‘μ„±**: 비동기 처리 및 μ—λŸ¬ 핸듀링 μ „λž΅

```
μ˜ˆμ‹œ:
User Tap Shutter
↓
View.onTapGesture
↓
ViewModel.captureWithTrishotMode()
↓
CameraRepository.applyPreset()
↓
CameraService.sendCommand()
↓
Canon Camera (WiFi)
↓
ViewModel.@Published μ—…λ°μ΄νŠΈ
↓
View μžλ™ λ¦¬λ Œλ”λ§
```
Comment on lines +151 to +168
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟑 Minor

데이터 흐름 μ½”λ“œ 블둝에 μ–Έμ–΄ μ§€μ • ν•„μš”

ν”Œλ‘œμš° 차트λ₯Ό ν¬ν•¨ν•œ μ½”λ“œ 블둝에 μ–Έμ–΄λ₯Ό μ§€μ •ν•˜μ„Έμš”.

 ### 데이터 흐름
 
 - [ ] **개발자 μž‘μ„±**: μ£Όμš” κΈ°λŠ₯별 데이터 흐름 μ„€λͺ…
 - [ ] **개발자 μž‘μ„±**: 비동기 처리 및 μ—λŸ¬ 핸듀링 μ „λž΅
 
-```
+```plaintext
 μ˜ˆμ‹œ:
 User Tap Shutter
-```
+```
🧰 Tools
πŸͺ› markdownlint-cli2 (0.18.1)

164-164: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

πŸ€– Prompt for AI Agents
In README.md around lines 164 to 181, the fenced code block showing the
data-flow example lacks a specified language; update the opening fence to
include a language (e.g., change ``` to ```plaintext) so the block is explicitly
marked as plain text and ensure the closing fence remains a matching ``` to keep
the block valid.


---

## πŸš€ 기술적 도전과 ν•΄κ²°

### 1. [Challenge 제λͺ© - 개발자 μž‘μ„±]

**문제 상황**
- [ ] **개발자 μž‘μ„±**: ꡬ체적인 기술적 문제 μ„€λͺ…
- [ ] **개발자 μž‘μ„±**: μ™œ 이 λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€
- [ ] **개발자 μž‘μ„±**: κΈ°μ‘΄ μ ‘κ·Ό λ°©μ‹μ˜ ν•œκ³„

**ν•΄κ²° 방법**
- [ ] **개발자 μž‘μ„±**: μ±„νƒν•œ μ†”λ£¨μ…˜ 및 이유
- [ ] **개발자 μž‘μ„±**: κ΅¬ν˜„ 세뢀사항

```swift
// 핡심 ν•΄κ²° μ½”λ“œ (개발자 μž‘μ„±)
```

**κ²°κ³Ό**
- [ ] **개발자 μž‘μ„±**: μΈ‘μ • κ°€λŠ₯ν•œ κ°œμ„  κ²°κ³Ό (μ„±λŠ₯, μ•ˆμ •μ„± λ“±)

---

### 2. [Challenge 제λͺ© - 개발자 μž‘μ„±]

**문제 상황**
- [ ] **개발자 μž‘μ„±**

**ν•΄κ²° 방법**
- [ ] **개발자 μž‘μ„±**

```swift
// 핡심 ν•΄κ²° μ½”λ“œ
```

**κ²°κ³Ό**
- [ ] **개발자 μž‘μ„±**

---

### 3. [Challenge 제λͺ© - 개발자 μž‘μ„±]

**문제 상황**
- [ ] **개발자 μž‘μ„±**

**ν•΄κ²° 방법**
- [ ] **개발자 μž‘μ„±**

```swift
// 핡심 ν•΄κ²° μ½”λ“œ
```

**κ²°κ³Ό**
- [ ] **개발자 μž‘μ„±**

---

## πŸ“Š μ„±λŠ₯ 및 ν’ˆμ§ˆ μ§€ν‘œ

### μ„±λŠ₯ μΈ‘μ •

| ν•­λͺ© | μΈ‘μ •κ°’ | μΈ‘μ • ν™˜κ²½ |
|------|--------|----------|
| [개발자 μž‘μ„±] | [개발자 μž‘μ„±] | [개발자 μž‘μ„±] |
| 이미지 κ·Έλ£Ήν™” 속도 | [μΈ‘μ • ν•„μš”] | 100μž₯ κΈ°μ€€ |
| 프리셋 μ „ν™˜ 속도 | [μΈ‘μ • ν•„μš”] | 연속 촬영 μ‹œ |
| λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ | [μΈ‘μ • ν•„μš”] | 피크 μ‹œ |
| 배터리 μ†Œλͺ¨ | [μΈ‘μ • ν•„μš”] | 1μ‹œκ°„ μ‚¬μš© κΈ°μ€€ |

### μ½”λ“œ ν’ˆμ§ˆ

- [ ] **개발자 μž‘μ„±**: ν…ŒμŠ€νŠΈ 컀버리지
- [ ] **개발자 μž‘μ„±**: μ£Όμš” ν…ŒμŠ€νŠΈ μ „λž΅ (Unit Test, Integration Test λ“±)
- [ ] **개발자 μž‘μ„±**: μ½”λ“œ 리뷰 ν”„λ‘œμ„ΈμŠ€

---

## πŸ‘₯ νŒ€

<div align="center">

<!-- TODO: 개인 이미지, 링크 λ³€κ²½ -->

| ![Sandeul](https://github.com/user-attachments/assets/7159c61b-af06-4281-84f6-d076b30682fc) | ![Hari](https://github.com/user-attachments/assets/7159c61b-af06-4281-84f6-d076b30682fc) | ![Ivy](https://github.com/user-attachments/assets/7159c61b-af06-4281-84f6-d076b30682fc) | ![Minbol](https://github.com/user-attachments/assets/7159c61b-af06-4281-84f6-d076b30682fc) | ![Rama](https://github.com/user-attachments/assets/7159c61b-af06-4281-84f6-d076b30682fc) | ![Soop](https://github.com/user-attachments/assets/7159c61b-af06-4281-84f6-d076b30682fc) |
|:---:|:---:|:---:|:---:|:---:|:---:|
| **양희쀀** | **μœ€ν•˜μ •** | **μ΄ν˜„μ£Ό** | **이보민** | **λ¬Έν˜•κ·Ό** | **ν•œμˆ˜λΉˆ** |
| **Sandeul** | **Hari** | **Ivy** | **Minbol** | **Rama** | **Soop** |
| 🎯 PM | 🎨 Design | πŸ“± iOS | πŸ“± iOS | πŸ“± iOS | πŸ“± iOS |
Comment on lines +254 to +258
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟑 Minor

νŒ€ μ„Ήμ…˜: 이미지에 alt ν…μŠ€νŠΈ μΆ”κ°€ ν•„μš”

νŒ€ 멀버 ν”„λ‘œν•„ 이미지 6개 λͺ¨λ‘ alt ν…μŠ€νŠΈκ°€ λˆ„λ½λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ ‘κ·Όμ„± κ°œμ„ μ„ μœ„ν•΄ 각 이미지에 μ„€λͺ…적인 alt ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜μ„Έμš”.

-| ![Sandeul](...) | ![Hari](...) | ![Ivy](...) | ![Minbol](...) | ![Rama](...) | ![Soop](...) |
+| ![Sandeul ν”„λ‘œν•„](...)| ![Hari ν”„λ‘œν•„](...) | ![Ivy ν”„λ‘œν•„](...) | ![Minbol ν”„λ‘œν•„](...) | ![Rama ν”„λ‘œν•„](...) | ![Soop ν”„λ‘œν•„](...) |

각 이미지 λ§ˆν¬λ‹€μš΄μ˜ λŒ€κ΄„ν˜Έ μ•ˆμ— 멀버 이름과 역할을 ν¬ν•¨ν•œ μ„€λͺ…을 μΆ”κ°€ν•˜μ„Έμš”.

πŸ€– Prompt for AI Agents
In README.md around lines 254 to 258 the six team member image markdown tags
lack descriptive alt text; update each image's alt text (the text inside the
square brackets) to include the member's name and role (for example "양희쀀 - PM" /
"Sandeul - PM"), replacing the empty or generic alt with "Name - Role" for all
six images so each <img> markdown reads e.g. ![양희쀀 - PM](url); repeat this for
Hari, Ivy, Minbol, Rama, and Soop using their corresponding Korean and English
names/roles.


**Apple Developer Academy @ POSTECH | Team A6 (HonestHouse)**

</div>
[![Notion](https://img.shields.io/badge/ν”„λ‘œμ νŠΈ_μŠ€ν† λ¦¬-Notion-000000?style=flat-square&logo=notion&logoColor=white)](https://slime-shirt-140.notion.site/Bracket-2a202aff8b528063be0ff432c107e135)

---

## πŸ“ž Contact

πŸ“§ **honesthouse2025@gmail.com**

[![Notion](https://img.shields.io/badge/ν”„λ‘œμ νŠΈ_기획_κ³Όμ •-Notion-000000?style=flat-square&logo=notion&logoColor=white)](https://slime-shirt-140.notion.site/Bracket-2a202aff8b528063be0ff432c107e135)

---

<div align="center">

*Β© 2025 Team A6 (HonestHouse). Apple Developer Academy @ POSTECH*

</div>