Skip to content

Commit 895744a

Browse files
authored
[merge/#388] feat/#388 -> main
[release] v1.0.1
2 parents 453afdc + 983678b commit 895744a

File tree

575 files changed

+26233
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

575 files changed

+26233
-3
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
name: SOLPLY issue template
3+
about: "\U0001F3A7 솔플리 이슈 템플릿입니다."
4+
title: "[태그(소문자] 작업 내용"
5+
labels: ''
6+
assignees: ''
7+
8+
---
9+
10+
<!-- 작업 태그와 본인의 이름 태그를 label로 꼭 달아주세요! 본인을 assignees로 추가해주세요! -->
11+
12+
## 📝 작업 페이지 캡쳐
13+
<!-- UI 구현이 아닐 경우 생략하셔도 됩니다. 생략하시는 경우 제목까지 완전히 지워주세요! -->
14+
| 페이지 | 캡쳐 |
15+
| :-------------: | :----------: |
16+
| 피그마 | <img src = "" width ="250">
17+
18+
## 🏖️ 작업할 브랜치
19+
- `` 브랜치에서 작업합니다.
20+
21+
## ✔️ To-Do
22+
- [ ] todo

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## 📄 작업 내용
2+
<!-- 작업한 내용을 두괄식으로 작성해주세요 -->
3+
- 세부적으로 적어주세요
4+
5+
| 구현 내용 | iPhone 13 mini | iPhone 16 pro |
6+
| :-------------: | :----------: | :----------: |
7+
| A 기능 | <img src = "" width ="250"> | <img src = "" width ="250"> |
8+
| B 기능 | <img src = "" width ="250"> | <img src = "" width ="250"> |
9+
10+
## 💻 주요 코드 설명
11+
<!-- 코드 설명, 없다면 생략해도 됩니다! -->
12+
### 주제 1 (제목을 바꿔주세요)
13+
```Swift
14+
// 여기에 설명할 코드를 작성해 주세요
15+
```
16+
코드에 대한 내용
17+
18+
### 주제 2 (제목을 바꿔주세요)
19+
```Swift
20+
// 여기에 설명할 코드를 작성해 주세요
21+
```
22+
코드에 대한 내용
23+
24+
## 🔗 연결된 이슈
25+
<!-- 해결한 이슈 번호를 작성하고 이슈가 해결되었다면 해결 여부에 체크해주세요! (Ex. #4) -->
26+
- Connected: #이슈번호
27+
28+
## 📚 참고자료
29+
<!-- 있으면 작성하고 없으면 제목까지 완전히 지워주세요! -->
30+
31+
## 👀 기타 더 이야기해볼 점
32+
<!-- 있으면 작성하고 없으면 제목까지 완전히 지워주세요! -->

.gitignore

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
# Created by https://www.toptal.com/developers/gitignore/api/swift,xcode,macos,cocoapods
2+
# Edit at https://www.toptal.com/developers/gitignore?templates=swift,xcode,macos,cocoapods
3+
4+
### CocoaPods ###
5+
## CocoaPods GitIgnore Template
6+
7+
# CocoaPods - Only use to conserve bandwidth / Save time on Pushing
8+
# - Also handy if you have a large number of dependant pods
9+
# - AS PER https://guides.cocoapods.org/using/using-cocoapods.html NEVER IGNORE THE LOCK FILE
10+
Pods/
11+
12+
### macOS ###
13+
# General
14+
.DS_Store
15+
.AppleDouble
16+
.LSOverride
17+
18+
# Icon must end with two \r
19+
Icon
20+
21+
22+
# Thumbnails
23+
._*
24+
25+
# Files that might appear in the root of a volume
26+
.DocumentRevisions-V100
27+
.fseventsd
28+
.Spotlight-V100
29+
.TemporaryItems
30+
.Trashes
31+
.VolumeIcon.icns
32+
.com.apple.timemachine.donotpresent
33+
34+
# Directories potentially created on remote AFP share
35+
.AppleDB
36+
.AppleDesktop
37+
Network Trash Folder
38+
Temporary Items
39+
.apdisk
40+
41+
### macOS Patch ###
42+
# iCloud generated files
43+
*.icloud
44+
45+
### Swift ###
46+
# Xcode
47+
#
48+
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
49+
50+
## User settings
51+
xcuserdata/
52+
53+
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
54+
*.xcscmblueprint
55+
*.xccheckout
56+
57+
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
58+
build/
59+
DerivedData/
60+
*.moved-aside
61+
*.pbxuser
62+
!default.pbxuser
63+
*.mode1v3
64+
!default.mode1v3
65+
*.mode2v3
66+
!default.mode2v3
67+
*.perspectivev3
68+
!default.perspectivev3
69+
70+
## Obj-C/Swift specific
71+
*.hmap
72+
73+
## App packaging
74+
*.ipa
75+
*.dSYM.zip
76+
*.dSYM
77+
78+
## Playgrounds
79+
timeline.xctimeline
80+
playground.xcworkspace
81+
82+
# Swift Package Manager
83+
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
84+
# Packages/
85+
# Package.pins
86+
# Package.resolved
87+
# *.xcodeproj
88+
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
89+
# hence it is not needed unless you have added a package configuration file to your project
90+
# .swiftpm
91+
92+
.build/
93+
94+
# CocoaPods
95+
# We recommend against adding the Pods directory to your .gitignore. However
96+
# you should judge for yourself, the pros and cons are mentioned at:
97+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
98+
# Pods/
99+
# Add this line if you want to avoid checking in source code from the Xcode workspace
100+
# *.xcworkspace
101+
102+
# Carthage
103+
# Add this line if you want to avoid checking in source code from Carthage dependencies.
104+
# Carthage/Checkouts
105+
106+
Carthage/Build/
107+
108+
# Accio dependency management
109+
Dependencies/
110+
.accio/
111+
112+
# fastlane
113+
# It is recommended to not store the screenshots in the git repo.
114+
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
115+
# For more information about the recommended setup visit:
116+
# https://docs.fastlane.tools/best-practices/source-control/#source-control
117+
118+
fastlane/report.xml
119+
fastlane/Preview.html
120+
fastlane/screenshots/**/*.png
121+
fastlane/test_output
122+
123+
# Code Injection
124+
# After new code Injection tools there's a generated folder /iOSInjectionProject
125+
# https://github.com/johnno1962/injectionforxcode
126+
127+
iOSInjectionProject/
128+
129+
### Xcode ###
130+
131+
## Xcode 8 and earlier
132+
133+
### Xcode Patch ###
134+
*.xcodeproj/*
135+
!*.xcodeproj/project.pbxproj
136+
!*.xcodeproj/xcshareddata/
137+
!*.xcodeproj/project.xcworkspace/
138+
!*.xcworkspace/contents.xcworkspacedata
139+
/*.gcno
140+
**/xcshareddata/WorkspaceSettings.xcsettings
141+
142+
### Env
143+
*.xcconfig
144+
.env
145+
146+
147+
# End of https://www.toptal.com/developers/gitignore/api/swift,xcode,macos,cocoapods

README.md

Lines changed: 158 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,159 @@
1-
# SOLPLY-iOS
2-
나는 SOL로 36기입니다.
1+
<img src="https://github.com/user-attachments/assets/92a6a8f2-c387-4570-8602-e684ba97529f" width="1200">
32

4-
<img src="https://github.com/user-attachments/assets/f17727b2-4413-42a8-976d-f28762ced849" width="350">
3+
# <img width="30" height="30" alt="image" src="https://github.com/user-attachments/assets/f9d51f5a-e868-4276-975e-1e4275667fe5" /> 솔플리
4+
5+
> 혼자보내는 여가가 일상이 된 지금, 나만의 방식과 취향에 맞는 시간을 보내고 싶은 사람들을 위한 장소 및 코스 큐레이션 서비스
6+
7+
8+
# 🍏 iOS Developer
9+
| 김승원 | 이수용 | 서주영 | 선영주 |
10+
| :-------------: | :----------: | :----------: |:----------: |
11+
| <img src = "https://github.com/user-attachments/assets/15bbd7a5-bb83-4573-9244-343db687020f" width ="250"> | <img src = "https://github.com/user-attachments/assets/9673cecd-0049-41a1-9526-c51fff959f8b" width ="250"> | <img src = "https://github.com/user-attachments/assets/6e71a47c-9702-4db8-a573-5064c8b76c19" width ="250"> | <img src = "https://github.com/user-attachments/assets/b6ed38a6-b0b1-4a1d-b969-8a34f472e23b" width ="250"> |
12+
| `장소, 코스 상세`<br>`지도` | `수집함` | `장소, 코스 추천` | `온보딩` |
13+
14+
# 📷 Screenshot
15+
| 온보딩 | 장소 추천 | 코스 추천 |
16+
| :-------------: | :----------: | :----------: |
17+
| <img src = "https://github.com/user-attachments/assets/8205340c-1164-4f0c-80f3-979561215996" width ="200"> | <img src = "https://github.com/user-attachments/assets/4c1e517e-eb20-4c43-a5d2-870d0793db76" width ="200"> | <img src = "https://github.com/user-attachments/assets/a31cb5e4-0561-49c6-b5b2-7603049fab2a" width ="200"> |
18+
19+
| 자주 가는 동네 설정 <br> & 탭바 스와이핑 | 장소 필터링 | 장소 상세 |
20+
| :-------------: | :----------: | :----------: |
21+
| <img src = "https://github.com/user-attachments/assets/c202851f-1f82-46ad-bb1d-2cffe7e4e440" width ="200"> | <img src = "https://github.com/user-attachments/assets/e19af057-a78f-40cf-93a7-f731a5c2008f" width ="200"> | <img src = "https://github.com/user-attachments/assets/8f63672e-9531-49e6-9ea2-5bf7dc93b2eb" width ="200"> |
22+
23+
| 수집함 | 수집함 삭제 | 길찾기 |
24+
| :-------------: | :----------: | :----------: |
25+
| <img src = "https://github.com/user-attachments/assets/c55878fe-46dd-46a5-866e-d68a519ca632" width ="200"> | <img src = "https://github.com/user-attachments/assets/3bbae3e8-f41b-418d-9e37-b8eab7019c8e" width ="200"> | <img src = "https://github.com/user-attachments/assets/6716aca5-8ad4-4a94-ab68-981ab77193e0" width ="200"> |
26+
27+
| 내 코스에 추가 | 코스 상세 | 코스 수정 |
28+
| :-------------: | :----------: | :----------: |
29+
| <img src = "https://github.com/user-attachments/assets/66bd0472-1e7d-4fdf-9502-d828958ced59" width ="200"> | <img src = "https://github.com/user-attachments/assets/75f94b39-d99c-4bd2-93d6-79e752a23331" width ="200"> | <img src = "https://github.com/user-attachments/assets/2027212f-d3c0-4096-ac32-0ed5dbb09d21" width ="200"> |
30+
31+
# 🛠️ Tech stack & Architecture
32+
<img src = "https://github.com/user-attachments/assets/d09f4f01-6bb1-4d4c-a57f-7e75a7367b0b" width ="600">
33+
34+
MVI 패턴을 도입해 단방향 데이터 흐름과 역할을 명확히 했고, DIP 기반의 의존성 분리로 테스트와 유지보수가 유연해졌습니다.
35+
36+
# 🎨 Project Design
37+
<img src = "https://github.com/user-attachments/assets/2ffcc061-2fd2-4888-910a-866f78c72570" width ="800">
38+
39+
# 📚 Library
40+
| 계층 | 기술 / 도구 | 역할 | 버전 |
41+
| --- | --- | --- | --- |
42+
| **IDE & SDK** | **Xcode** | Apple 공식 개발 도구 (Swift 6, iOS 18 SDK 포함) | 16.4 |
43+
| **UI 프레임워크** | **SwiftUI** | 선언형 UI 구성, <br>뷰 간 상태 동기화 및 반응형 업데이트 | Xcode 16.4 |
44+
| **상태 관리 / 아키텍처** | **MVI** | 단방향 데이터 흐름을 통한 구조적 상태 관리 및 사용자 이벤트 반영<br>직관적인 상태 흐름과 빠른 UI 구성에 적합 ||
45+
| **네트워크 계층** | **Moya** | `URLSession` 위에 구축된 추상화 네트워크 레이어, 간편한 API 관리 및 테스트 지원<br> API 요청의 타입 안정성과 테스트 편의성을 높임 | 15.0.3 |
46+
| **이미지 처리** | **Kingfisher** | 이미지 비동기 다운로드 및 캐싱 처리, <br>스크롤 성능 최적화 이미지 로딩 성능과 UI 반응성 향상에 기여 | 8.3.3 |
47+
| **지도** | **NMapsMap** | 네이버 지도를 활용한 지도 기능을 구현하기 위함 | 3.22.0 |
48+
| **카카오 SDK** | **KakaoSDKAuth** | 카카오 소셜 로그인을 구현하기 위함 | 2.24.4 |
49+
| **사용자 위치 정보** | **CoreLocation** | 사용자 위치 정보를 받아오기 위함 | - |
50+
| **Lottie** | **lottie-ios** | 애니메이션 구현하기 위함 | 4.5.2 |
51+
52+
# 🔥 Coding Convention
53+
[Swift 스타일쉐어 가이드](https://github.com/StyleShare/swift-style-guide)를 기반으로 합니다.<br>
54+
이는 솔플리 iOS 컨벤션에 따라 일부 수정되었으며, 구성원들의 의사결정에 따라 수시로 변경될 수 있습니다. <br>
55+
🎧 [SOPLY 코딩 컨벤션](https://rectangular-cream-d39.notion.site/215bbb00234d803d99c4c2f0342f88eb?source=copy_link)
56+
코딩 컨벤션 문서를 참고해주세요!
57+
58+
# 📂 Foldering
59+
60+
```bash
61+
├── 📁 Application
62+
│   └── 📃 SolplyApp.swift
63+
│   └── 📃 RootView.swift
64+
├── 📁 Global
65+
│   ├── 📁 Component
66+
│   ├── 📁 Enum
67+
│   ├── 📁 Extension
68+
│   ├── 📁 Coordinator
69+
│   │   ├── 📁 Destination
70+
│ │ │ ├── 📃 AppDestination.swift
71+
│ │ │ └── 📃 RootDestination.swift
72+
│   │   └── 📃 AppCoordinator.swift
73+
│   ├── 📁 Util
74+
│   └── 📁 Resource
75+
│      ├── 📃 Assets.xcassets
76+
│      └── 📁 Fonts
77+
├── 📁 Presentation
78+
│   ├── 📁 Core
79+
│   │   ├── 📁 Component
80+
│   │   └── 📃 TabBarView.swift
81+
│   ├── 📁 Place
82+
│   │   ├── 📁 PlaceRecommend
83+
│ │  │    ├── 📁 Effect
84+
│ │ │ │ └── 📃 PlaceRecommendEffect.swift
85+
│ │   │    ├── 📁 Entity
86+
│ │   │    ├── 📁 Intent
87+
│ │ │ │ ├── 📃 PlaceRecommendAction.swift
88+
│ │ │ │ └── 📃 PlaceRecommendStore.swift
89+
│ │   │    ├── 📁 State
90+
│ │ │ │ ├── 📃 PlaceRecommendReducer.swift
91+
│ │ │ │ └── 📃 PlaceRecommendState.swift
92+
│ │   │    └── 📁 View
93+
│ │ │ └── 📃 PlaceRecommendView.swift
94+
│   │   └── 📁 PlaceDetail
95+
│   └── 📁 Course
96+
└── 📁 Network
97+
   ├── 📁 API
98+
   │   └── 📃 PlaceRecommendAPI.swift
99+
   ├── 📁 Base
100+
   ├── 📁 DTO
101+
   ├── 📁 Mock
102+
   │   └── 📃 PlaceMockService.swift
103+
   ├── 📁 Service
104+
   │   └── 📃 PlaceService.swift
105+
   └── 📁 TargetType
106+
      └── 📃 PlaceTargetType.swift
107+
```
108+
109+
# 🔖 Tag Convention
110+
111+
| init | 가장 처음 Initial Commit에 태그 붙이기 |
112+
| :-------------: | :----------: |
113+
| feat | 새로운 기능 구현 시 사용 |
114+
| fix | 버그나 오류 해결 시 사용 |
115+
| docs | README, 템플릿 등 프로젝트 내 문서 수정 시 사용 |
116+
| setting | 프로젝트 관련 설정 변경 시 사용 |
117+
| add | 사진 등 에셋이나 라이브러리 추가 시 사용 |
118+
| refactor | 기존 코드를 리팩토링하거나 수정할 시 사용 |
119+
| chore | 별로 중요한 수정이 아닐 시 사용 (애매하면 이걸로!) |
120+
| merge | 브랜치 병합 시 사용 |
121+
| conflict | 충돌 해결 |
122+
123+
```
124+
(기본 커밋 메세지)
125+
[feat/#1] 로그인 기능 구현
126+
127+
(원격 develop → 로컬 develop merge)
128+
[merge/#1] pull develop
129+
130+
(원격 develop merge)
131+
[merge/#1] feat/#1 -> develop
132+
133+
(충돌 해결)
134+
[conflict/#1] 충돌 해결
135+
```
136+
137+
# 🌊 Git Flow
138+
```
139+
1. 작업할 내용에대한 이슈를 판다
140+
141+
2. 이슈 번호 확인 + 브랜치 컨벤션에 맞게 브랜치를 판다
142+
143+
a. 반드시 가장 최신화 된`develop`브랜치에서 파생된 것이어야 함 (깃허브에서 파기!)
144+
145+
b. 브랜치 파기 전 최신화 된 `develop`브랜치 pull 받기
146+
147+
3. 작업 중 내용을 적당히 쪼개어 로컬에서 `commit`을 해둔다
148+
149+
4. 작업이 완료되면 (깃크라켄을 통해) `push` 후 PR을 자세히 작성한다
150+
151+
a. `push`전 `develop`브랜치를 작업 완료한 브랜치에 `merge` 후 빌드가 되는지 꼭 확인해야 함
152+
153+
5. 코드 리뷰 후 모든 팀원의 `approve`를 받은 후에 `develop`브랜치에 `merge`한다
154+
155+
a. `merge`후, 브랜치를 삭제한다. (로컬은 남겨두는 것이 좋음)
156+
157+
6. `merge`가 된 후, 팀원에게 노티! 모든 팀원은 로컬 `develop` 브랜치 최신화를 진행한다
158+
159+
```

0 commit comments

Comments
 (0)