🗓 프로젝트 소개 : 신발 커뮤니티 앱
🗓 기간 : 2022.10.15 ~ 2023.3.21
🗓 팀원: 로이, 민, 영, 소낙, 리넴, 루비
많은 인기를 얻고 있는 신발이 무엇이 있는지를 확인해볼 수 있습니다.
신발과 관련하여 자유롭게 이야기를 나눌 수 있는 커뮤니티 기능을 담고 있습니다.
- 신발 상세 페이지에 들어가면 커뮤니티 기능을 구현해주세요
- 댓글 달기 같은 기능을 만들어주세요
- 앱 리스트에 border 맞게 수정해주세요!
- 그리고 처음 로그인 후 프로필에 들어가서 프로필 수정 할때 로그인 뷰가 보이는데 숨겨주세요!
- 1.0.5
- 프로필 화면 수정
- 배너 이미지 변경
- 로딩 화면 변경
- 로딩 화면 수정
- 로그인 이슈수정
- 앱 삭제 했을 경우 로그아웃 수정
- 버그 수정
| Developer | Product Manger | Developer | Developer | Developer | Designer |
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
|
| Roy | Min | Sonak | Young | Linem | Ruby |
| Environment | Version |
|---|---|
| Swift | |
| Xcode | |
| iOS Deployment Target |
Notion,Figma
Kingfisher,SwiftLint,Firebase,Moya,PopupView,lottie
Fastlane,Slack
- MVVM 패턴
let url = URL(string : "https://640de3d61a18a5db83827295.mockapi.io/shoes")let url = URL(string : "https://640de3d61a18a5db83827295.mockapi.io/shoes/id")@published@State@EnvironmentObjectCombine커스텀 폰트커스텀 컬러extension viewMoya 통신컴포넌트 분리Search barFirebase RemoteConfigFirebase CrashlyticsFirebase FCM앱이 삭제 되었을때 로그아웃공유
로그인 안했을경우 프로필뷰 숨김처리프로필 사진 변경push 알림커스텀 폰트커스텀 팝업소셜 로그인신발 검색앱 공유
📦── MarketApp
│ ├── Info.plist
│ 📦── Resources
│ │ 📂── Firebase
│ │ 📂── Assets.xcassets
│ │ 📂── ColorAssets.xcassets
│ │ 📂── IconImage
│ │ 📂── Loading.json
│ │ 📂── MarketApp.entitlements
│ │ 📂── Preview Content
│ │ 📂── mockData.json
│ 📦── Sources
│ │ 📂── Application
│ │ 📂── Util
│ │ │ 📂── AppCheck
│ │ │ 📂── Authoriation
│ │ │ 📂── Color
│ │ │ 📂── Extensions
│ │ │ 📂── Font
│ │ │ │ 📂── CustomFont
│ │ │ └─ 📂── FontAsset
│ │ │ 📂── ImageManger
│ │ │ 📂── SignUPCheck
│ │ │ 📂── View
│ │ │ │ 📂── ModalView
│ │ │ │ 📂── ScrollView
│ │ │ │ 📂── ACarousel
│ │ │ │ 📂── EditImage
│ │ │ └─ 📂── ScreenSize
│ │ 📂── UI
│ │ │ 📂── View
│ │ │ │ 📂── Component
│ │ │ │ │ 📂── Alert
│ │ │ │ │ 📂── Lanch
│ │ │ │ │ 📂── List
│ │ │ │ │ 📂── Lottie
│ │ │ │ │ 📂── Page
│ │ │ │ │ 📂── Search
│ │ │ │ │ 📂── Share
│ │ │ │ │ 📂── TextField
│ │ │ │ └─ 📂── WebView
│ │ │ │ 📂── Authorization
│ │ │ │ │ 📂── FindEmail
│ │ │ │ │ 📂── FindPassword
│ │ │ │ │ 📂── Login
│ │ │ │ └─ 📂── SignUP
│ │ │ │ 📂── Home
│ │ │ │ 📂── Notice
│ │ │ │ 📂── ProductDetail
│ │ │ │ 📂── ProductList
│ │ │ │ 📂── Profile
│ │ │ │ 📂── Search
│ │ │ │ 📂── Tab
│ │ │ └─ 📂── Favorite
│ │ 📂── ViewModel
│ │ │ 📂── MainShoesViewModel
│ │ │ 📂── ProfileViewModel
│ │ └─ 📂── SignUpViewModel
│ │ 📂── Model
│ │ │ 📂── ShoesModel
│ │ 📂── Network
│ │ │ 📂── MainService
│ │ │ 📂── MarketAPI
│ │ └─ 📂── APIError
│ 📦── MarketAppTests
│ │ │ 📂── MainViewModelTest
│ │ │ 📂── SignUPViewModelTest
│ │ │ 📂── ProfileViewModelTest
│ 📦── MarketAppUITests
📦── fastlane
│ 📂── metadata
│ │ 📂── ko
│ │ 📂── review_information
│ 📂── output
│ 📂── screenshots
│ │ 📂── ko
└── 📂── test_output
import Foundation
import Moya
enum MainShoesService {
case mainShoesData
}
extension MainShoesService: TargetType {
var baseURL: URL {
return URL(string: "https://640de3d61a18a5db83827295.mockapi.io")!
}
var path: String {
switch self {
case .mainShoesData:
return AffinityAPI.MainShoes
}
}
var method: Moya.Method {
switch self {
case .mainShoesData:
return .get
}
}
var task: Task {
switch self {
case .mainShoesData:
return .requestPlain
}
}
var headers: [String : String]? {
switch self {
case .mainShoesData:
return [
"Accept": "application/json",
"Content-Type": "application/json"
]
}
}
}
import UIKit
import SwiftUI
enum NanumSquareNeoFamily: String {
case aLt, bRG, cBd, dEb, eHv
}
struct NanumSquareNeoFont: ViewModifier {
var family: NanumSquareNeoFamily
var size: CGFloat
var color: Color
func body(content: Content) -> some View {
return content.font(.custom("NanumSquareNeoTTF-\(family)", fixedSize: size))
.foregroundColor(color)
}
}
extension View {
func nanumSquareNeo(family: NanumSquareNeoFamily, size: CGFloat, color: Color) -> some View {
return self.modifier(NanumSquareNeoFont(family: family, size: size, color: color))
}
}
extension UIFont {
static func nanumSquareNeo(family: NanumSquareNeoFamily, size: CGFloat, color: Color) -> UIFont?{
let font = UIFont(name: "NanumSquareNeo-\(family)", size: size)
return font
}
}
extension Font {
static func nanumSquareNeo(family: NanumSquareNeoFamily, size: CGFloat, color: Color) -> Font{
let font = Font.custom("NanumSquareNeo-\(family)", size: size)
return font
}
}import Foundation
import SwiftUI
struct ColorAsset {
let backGroudColor = Color("BackgroundColor")
let mauve = Color("mauve")
let mainColor = Color("MainColor")
let mauve2 = Color("mauve2")
let gray = Color("Gray")
let lightBlack = Color("LightBlack")
let black = Color("Black")
let blueGray = Color("BlueGray")
let lightGray = Color("LightGray")
let beige = Color("Beige")
let white = Color("White")
}
extension Color {
static let colorAsset = ColorAsset()
}-
Origin(main branch)
- Origin(dev branch)
- Local(feature branch)
- Origin(dev branch)
-
Branch
- Main
- Dev
- Feature
- Fix
-
방법
-
- Pull the Dev branch of the Origin
-
- Make a Feature branch in the Local area
-
- Developed by Feature branch
-
- Push the Feature from Local to Origin
-
- Send a pull request from the origin's Feature to the Origin's Dev
-
- In Origin Dev, resolve conflict and merge
-
- Fetch and rebase Origin Dev from Local Dev
-
커밋 제목은 최대 50자 입력
본문은 한 줄 최대 72자 입력
Commit 메세지
🪛[chore]: 코드 수정, 내부 파일 수정.
✨[feat]: 새로운 기능 구현.
🎨[style]: 스타일 관련 기능.(코드의 구조/형태 개선)
➕[add]: Feat 이외의 부수적인 코드 추가, 라이브러리 추가
🔧[file]: 새로운 파일 생성, 삭제 시
🐛[fix]: 버그, 오류 해결.
🔥[del]: 쓸모없는 코드/파일 삭제.
📝[docs]: README나 WIKI 등의 문서 개정.
💄[mod]: storyboard 파일,UI 수정한 경우.
✏️[correct]: 주로 문법의 오류나 타입의 변경, 이름 변경 등에 사용합니다.
🚚[move]: 프로젝트 내 파일이나 코드(리소스)의 이동.
⏪️[rename]: 파일 이름 변경이 있을 때 사용합니다.
⚡️[improve]: 향상이 있을 때 사용합니다.
♻️[refactor]: 전면 수정이 있을 때 사용합니다.
🔀[merge]: 다른브렌치를 merge 할 때 사용합니다.
✅ [test]: 테스트 코드를 작성할 때 사용합니다.
제목 끝에 마침표(.) 금지
한글로 작성
브랜치 이름 규칙
STEP1,STEP2,STEP3
main브랜 치는 앱 출시Dev는 테스트 및 각종 파일 merge- 각 스텝 뱔로 브런치 생성해서 관리





