Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
c2c0206
ignore Xcode user state files
chaewon-45 Dec 30, 2025
c68d4b6
2nd~
jparkitrighthere Dec 30, 2025
ea2f860
Add location usage description to Info.plist settings
jparkitrighthere Dec 30, 2025
b5388d1
edit CoreLocation
chaewon-45 Dec 31, 2025
770ecb3
OCR 3rd
jparkitrighthere Dec 31, 2025
ad25552
SelectView edit
chaewon-45 Dec 31, 2025
6485023
ignore Xcode user state files
chaewon-45 Dec 31, 2025
67fbae5
Merge remote-tracking branch 'origin/main' into branch_CW
chaewon-45 Dec 31, 2025
67f21ed
ignore baseURL
chaewon-45 Dec 31, 2025
c67d2ce
remove Xcode user state file
chaewon-45 Dec 31, 2025
bc9b171
chore: remove Xcode user state file
chaewon-45 Dec 31, 2025
88d1f68
Merge branch 'main' into branch_JS
jparkitrighthere Jan 1, 2026
97f7472
Merge pull request #1 from Club-PARD/branch_JS
jparkitrighthere Jan 1, 2026
6bb8f7c
add PartnerView
chaewon-45 Jan 1, 2026
3410bdb
CoreLocation edit and add DetailView
chaewon-45 Jan 1, 2026
bc545ef
before merge
chaewon-45 Jan 2, 2026
2aa989a
Merge branch 'branch_CW'
chaewon-45 Jan 2, 2026
db8432a
create UUID
chaewon-45 Jan 2, 2026
824af75
startview control
chaewon-45 Jan 3, 2026
4581e26
file upload function
chaewon-45 Jan 3, 2026
8ca10dd
edit partnerview
chaewon-45 Jan 3, 2026
7c33dbe
mart information post
chaewon-45 Jan 3, 2026
adc0c00
partnerview submitbutton
chaewon-45 Jan 4, 2026
d4e6fbc
Camera OCR flow development
jparkitrighthere Jan 4, 2026
cf8065f
Merge branch 'branch_JS'
jparkitrighthere Jan 4, 2026
bd70dd3
delete all partnerview
chaewon-45 Jan 4, 2026
742ad44
connect onboardingview to resultview
chaewon-45 Jan 4, 2026
2aae898
clback code edit
chaewon-45 Jan 4, 2026
f7c0b1e
Ignore BaseURL.swift and remove it from tracking
jparkitrighthere Jan 5, 2026
fa2310d
add baseURL
jparkitrighthere Jan 5, 2026
644ea94
edit gitignore
chaewon-45 Jan 5, 2026
c9ab82d
Resolve merge conflict: replace BaseURL.swift with baseURL.swift
chaewon-45 Jan 5, 2026
9b4cf26
selectview change
chaewon-45 Jan 5, 2026
04fd4e7
Merge branch 'branch_CW'
chaewon-45 Jan 5, 2026
6528814
add map
chaewon-45 Jan 5, 2026
92ae3a2
POST function call edit
chaewon-45 Jan 5, 2026
fbf172d
RecognitionView UI final
jparkitrighthere Jan 5, 2026
9e1b1df
Navigation custom
jparkitrighthere Jan 5, 2026
6a637d5
Customize camera button
jparkitrighthere Jan 5, 2026
d40ac30
Fix guestlogin button
jparkitrighthere Jan 6, 2026
e5cedb1
LocationView Button edit
chaewon-45 Jan 6, 2026
7a1b63d
Merge branch 'branch_CW'
chaewon-45 Jan 6, 2026
13acd9d
Fix login button
jparkitrighthere Jan 6, 2026
ece0160
Add OCR Filter
jparkitrighthere Jan 6, 2026
ab30784
location function edit
chaewon-45 Jan 6, 2026
953f3fc
Fix thumbnails
jparkitrighthere Jan 6, 2026
2e383f7
UUID post logic
chaewon-45 Jan 6, 2026
ad8b3c5
Merge branch 'branch_CW'
chaewon-45 Jan 7, 2026
bd2a165
Add thumbnail delete
jparkitrighthere Jan 7, 2026
752340b
edit mapView navigation
chaewon-45 Jan 7, 2026
6f2b409
Edit RecognitionView
jparkitrighthere Jan 7, 2026
ed7ba09
Merge branch 'branch_JS'
jparkitrighthere Jan 7, 2026
28be884
Fix ROI coordination
jparkitrighthere Jan 7, 2026
3064c53
before merge confirm
chaewon-45 Jan 7, 2026
91b6eaa
Merge branch 'branch_CW'
chaewon-45 Jan 7, 2026
bae711d
OCRView custom finish
jparkitrighthere Jan 7, 2026
c4e4882
edit OCRResultView toolbar
chaewon-45 Jan 7, 2026
c3a7160
edit detailView UI
chaewon-45 Jan 8, 2026
5a1817d
Merge branch 'branch_JS'
jparkitrighthere Jan 8, 2026
bbcabb4
LocationPatch
chaewon-45 Jan 8, 2026
2b16188
Resultview XButton delete
chaewon-45 Jan 8, 2026
8c177d9
비상
jparkitrighthere Jan 8, 2026
68e5317
Merge branch 'branch_CW'
chaewon-45 Jan 8, 2026
8971888
PATCH Location success
chaewon-45 Jan 8, 2026
9413ac1
DetailView UI Add
chaewon-45 Jan 8, 2026
c491d1d
Apply saved main_mistake onto branch_JS
jparkitrighthere Jan 8, 2026
f9c600a
get scan
jparkitrighthere Jan 8, 2026
aa97951
합체 레스고
jparkitrighthere Jan 8, 2026
8d70a2e
main backup
chaewon-45 Jan 8, 2026
8ecb933
Merge branch 'main' of https://github.com/Club-PARD/eegaupnae_FE
chaewon-45 Jan 8, 2026
db2c15a
get gemini successgit add .git add .
chaewon-45 Jan 8, 2026
aa81acb
Fix Location
jparkitrighthere Jan 8, 2026
fb46769
merge backup
chaewon-45 Jan 9, 2026
cb3c28f
Merge branch 'branch_JS'
jparkitrighthere Jan 9, 2026
041f276
Initialize README
chaewon-45 Jan 9, 2026
d168e30
almost there
jparkitrighthere Jan 9, 2026
a2b62c6
Merge branch 'branch_JS'
jparkitrighthere Jan 9, 2026
0cd73d2
DetailView Info edit
chaewon-45 Jan 9, 2026
4ee7576
Merge branch 'branch_CW'
chaewon-45 Jan 9, 2026
335bd00
Add screenshots
chaewon-45 Jan 9, 2026
44439f0
Replace images in README
chaewon-45 Jan 9, 2026
2b1c433
update detailView
chaewon-45 Jan 9, 2026
bf296b7
Merge branch 'branch_CW'
chaewon-45 Jan 9, 2026
b1c6272
hihi
jparkitrighthere Jan 9, 2026
91c0099
Merge branch 'branch_JS'
jparkitrighthere Jan 9, 2026
da0285f
about saleInfo
chaewon-45 Jan 9, 2026
49485f0
Merge branch 'main' into branch_CW
chaewon-45 Jan 9, 2026
4b526a5
Fix Camera Preview
jparkitrighthere Jan 9, 2026
d31b968
patch response ok
jparkitrighthere Jan 9, 2026
317e45c
BottomRoundRect cornerR
jparkitrighthere Jan 9, 2026
ecba127
change sale logic
chaewon-45 Jan 9, 2026
9290af2
Merge branch 'branch_CW'
chaewon-45 Jan 9, 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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,9 @@ Packages/

# Environment variables
.env

# Xcode user state
*.xcuserstate
xcuserdata/

baseURL.swift
117 changes: 117 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# 📱 PicPick

> 복잡한 가격표를 스캔 1번으로 '가성비 확신'과 '최적 타이밍'으로 바꿔주는 쇼핑의 어시스턴트

> 마트 가격표의 가공되지 않은 '로우 데이터'를 사용자가 즉각 행동할 수 있는 '의사결정 정보'로 전환하는 쇼핑 보조 서비스입니다.

---

## 🧩 프로젝트 개요

- **프로젝트명**: PicPick
- **플랫폼**: iOS
- **개발 인원**: iOS 2명 / Backend 1명 / Design 1명 / PM 1명
- **타겟 사용자**: 실용 중심의 구매를 추구하는 오프라인 소비자
---

## ✨ 주요 기능

- OCR 기반 제품 분석
- 네이버 API를 통한 온오프라인 가격 비교
- AI 가성비 분석
- 오프라인 마트 행사정보 제공

---

## 🛠 기술 스택

### iOS
- SwiftUI
- UIKit
- Combine
- MapKit
- CoreLocation

### Tools
- Xcode
- Git / GitHub
- Figma
- Notion

---


## 🔄 화면 흐름

1. 온보딩
2. 게스트 로그인
3. 위치 설정
4. OCR 기능 실행
5. OCR 결과 화면
6. 가성비 세부정보 화면

---

## 📸 스크린샷


### 1) 온보딩
앱에 들어가는 첫 화면입니다.

<img width="300" alt="Onboarding" src="https://github.com/user-attachments/assets/77971298-d550-45d9-8858-533872d21494" />


---

### 2) 게스트 로그인
UUID를 통해 게스트 로그인을 할 수 있습니다.

<img width="300" alt="IMG_9013" src="https://github.com/user-attachments/assets/84ed3812-d23f-4a24-bc2a-a2b8d13edf22" />


---

### 3) 위치 설정
현재 위치를 기반으로 주변 마트를 보여줍니다.

<img width="300" alt="Map" src="https://github.com/user-attachments/assets/1f466ebf-afd6-4d3c-8ce8-08da4361a9c0" />


---

### 4) OCR 기능 실행
가격표를 촬영하여 상품 정보를 자동으로 인식합니다.

1) OCR 화면 실행 직후
<img width="300" alt="OCRScan1" src="https://github.com/user-attachments/assets/a5f0a50c-328f-41d3-a1cf-490bd2bcbf1e" />

2) OCR 스캔 화면
<img width="300" alt="OCRScan2" src="https://github.com/user-attachments/assets/5fde809b-d660-4fe6-8b91-6aca8d4442bd" />

---

### 5) OCR 결과 화면
온·오프라인 가격을 비교하고, 1회 사용 당 가격 정보를 제공합니다.

<img width="300" alt="OCRResult" src="https://github.com/user-attachments/assets/583c81be-d87b-4f85-91c4-e597e351bd2d" />


---

### 6) 가성비 세부정보 화면
AI를 통해 가성비 점수를 산출하고, 구매 추천 및 품질과 가격 요약, 해당 제품의 상세 정보를 제공합니다.

<img width="300" alt="DetailTop" src="https://github.com/user-attachments/assets/a1cc0f73-44ab-4699-b61f-f21a9352f425" />

<img width="300" alt="DetailMiddle" src="https://github.com/user-attachments/assets/47a58ba3-bb53-44a3-ba87-b153b759c482" />

<img width="300" alt="DetailBottom" src="https://github.com/user-attachments/assets/d337c06a-07b7-40bb-86ca-310d970e543e" />

---

## 👩‍💻 개발자

| 이름 | 역할 |
|----|----|
| 손채원 | iOS 개발 |
| 박진수 | iOS 개발 |
14 changes: 14 additions & 0 deletions Shoppingmate-Frontend-Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleGetInfoString</key>
<string></string>
<key>UIAppFonts</key>
<array>
<string>Pretendard-Regular.otf
Pretendard-Bold.otf</string>
<string>Pretendard-Bold.otf</string>
</array>
</dict>
</plist>
18 changes: 12 additions & 6 deletions Shoppingmate_Frontend.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -255,11 +255,14 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 73GWX5Y7JS;
DEVELOPMENT_TEAM = 56MQCL972R;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Shoppingmate-Frontend-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "";
INFOPLIST_KEY_LSApplicationCategoryType = "";
INFOPLIST_KEY_NSCameraUsageDescription = "사진 촬영을 위해 카메라 접근이 필요합니다.\n";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "가격표를 촬영한 위치를 저장하기 위해 필요합니다.";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "사용자 위치를 저장하기 위해 필요합니다.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
Expand All @@ -271,7 +274,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chaewon.Shoppingmate.Frontend;
PRODUCT_BUNDLE_IDENTIFIER = "com.jinsoo.Shoppingmate-Frontend";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
Expand All @@ -290,11 +293,14 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 73GWX5Y7JS;
DEVELOPMENT_TEAM = 56MQCL972R;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Shoppingmate-Frontend-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "";
INFOPLIST_KEY_LSApplicationCategoryType = "";
INFOPLIST_KEY_NSCameraUsageDescription = "사진 촬영을 위해 카메라 접근이 필요합니다.\n";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "가격표를 촬영한 위치를 저장하기 위해 필요합니다.";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "사용자 위치를 저장하기 위해 필요합니다.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
Expand All @@ -306,7 +312,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chaewon.Shoppingmate.Frontend;
PRODUCT_BUNDLE_IDENTIFIER = "com.jinsoo.Shoppingmate-Frontend";
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
Expand Down
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions Shoppingmate_Frontend/Assets.xcassets/Check.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "Check.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "LegendDelete.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "PICPICK.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions Shoppingmate_Frontend/Assets.xcassets/Pin.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "Pin.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
4 changes: 4 additions & 0 deletions Shoppingmate_Frontend/Assets.xcassets/Pin.imageset/Pin.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "bArrow.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "backArrow.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "bubble.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "cameraBack.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "currentLocation.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading