🗓 프로젝트 소개 : 신발 커뮤니티 앱
🗓 기간 : 2022.10.15 ~ 2023.3.21
🗓 팀원: 로이, 민, 영, 소낙, 리넴, 루비
많은 인기를 얻고 있는 신발이 무엇이 있는지를 확인해볼 수 있습니다.
신발과 관련하여 자유롭게 이야기를 나눌 수 있는 커뮤니티 기능을 담고 있습니다.
- 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
@EnvironmentObject
Combine
커스텀 폰트
커스텀 컬러
extension view
Moya 통신
컴포넌트 분리
Search bar
Firebase RemoteConfig
Firebase Crashlytics
Firebase 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- 각 스텝 뱔로 브런치 생성해서 관리