βλ€μν λͺ©μ리λ₯Ό ν΅ν΄ λ λμ νμ μ¬ν, λ λμ λν μνμ λ§λ€κΈ° μν΄μβ
νμνμ νμλ€μ λͺ©μλ¦¬λ‘ ν¨κ» λ§λ€μ΄κ°λ λν μν νμ μ±, μ λ보μ΄μ€ μ λλ€.
- 34κΈ° NOW SOPT APPJAM (2024.06.15 ~ )
KakaoTalk_Video_2024-07-20-00-00-28.mp4
| λ°λ―Όμ | μμ λΉ | μ΄μλ―Ό | μ€μ°μ |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| [Team Leader] λ‘κ·ΈμΈ ν΅μ€μΊ μ μ₯ νμ΄μ§ |
[Team Member] νμκ°μ (νμμ¦ ν) API ꡬ쑰 μ€κ³ ν ꡬν |
[Team Member] νμκ°μ (νμμ¦ μ ) 곡μ§μ¬ν λ±λ‘ |
[Team Member] λ©μΈ ν μΈλΆκ³΅μ§ νμΈ λ§μ΄ νμ΄μ§ |
| Library | Version | Description |
|---|---|---|
| SnapKit | 5.7.1 | λ μ΄μμ μ½λμ μ§κ΄μ±, κ°κ²°μ± κ°ν, UI Constraint μ€μ κ°λ¨ν |
| Then | 3.0.0 | κ°μ²΄λ₯Ό μ΄κΈ°νν ν νλ‘νΌν°λ₯Ό μ€μ νλ κ³Όμ κ°λ¨ν, κ°λ μ± μ¦κ° |
| Moya | 15.0.3 | λ€νΈμν¬ λ‘μ§μ μΆμν, ꡬ쑰ν, νμ₯μ± μ¦κ° |
| KingFisher | 7.12.0 | μ΄λ―Έμ§ μΊμ±, μ΄λ―Έμ§ μ²λ¦¬ κ°νΈμ± |
| RxSwift | 6.7.1 | λΉλκΈ° μμ κ΄λ¦¬ λ° λ€μν μ°μ°μλ₯Ό νμ©ν λ°μ΄ν° μ€νΈλ¦Ό μ²λ¦¬ |
| RxDataSource | 5.0.2 | ν μ΄λΈ λ·°μ 컬λ μ λ·°μ λ°μ΄ν° μμ€λ₯Ό λ°μνμΌλ‘ κ΄λ¦¬ λ° λ°μ΄ν° λ°μΈλ©μ κ°νΈνκ² μ²λ¦¬ |
| RxMoya | 15.0.3 | Moyaλ₯Ό μ¬μ©νμ¬ λ€νΈμν¬ μμ²μ κ΄λ¦¬νκ³ , RxSwiftλ₯Ό ν΅ν΄ λΉλκΈ° λ€νΈμν¬ μμ μ μ²λ¦¬ |
| Lottie | 4.5.0 | JSON κΈ°λ°μ μ λλ©μ΄μ μ μ½κ² ꡬν |
- StyleShare μ Swift Style Guideλ₯Ό κΈ°λ³ΈμΌλ‘ ν©λλ€.
- μΈλΆμ μΈ μ¬νμ μλ μμΉμ λ°λ₯Έλ€.
- ν¨μ, λ©μλ :Β lowerCamelCaseΒ μ¬μ©νκ³ , λμ¬λ‘ μμνλ€.
- λ³μ, μμ :Β lowerCamelCaseΒ μ¬μ©νλ€.
- ν΄λμ€, ꡬ쑰체, enum, extension λ± :Β UpperCamelCaseΒ μ¬μ©νλ€.
- νμΌ, ν΄λμ€ λͺ
μ½μ΄ μ¬μ©. λ¨, UI μ μΈ κ΅¬λ¬Έκ³Ό λ©μλμμλ μ½μ΄λ₯Ό μ¬μ©νμ§ μλλ€.
- μμ) ViewController βΒ `VC`
- μμ) CollectionViewCell βΒ `CVC`
- λ·° μ€μ μ μν ν¨μμμλΒ setΒ ν€μλλ₯Ό μ¬μ©νλ€.
- μμ) func configureUI βΒ `func setUI`
- μμ) func setDelegate ... βΒ `func configureDelegate`
- μ΄μΈ κΈ°λ³Έ λͺ
λͺ
κ·μΉμΒ [Swift Style Guide]λ₯Ό μ°Έκ³ νλ€.
- μμλ°μ§ μλ ν΄λμ€λΒ final ν€μλλ₯Ό λΆμΈλ€.
- λ¨μΌ μ μ λ΄μμλ§ μ¬μ©λλ νΉμ κΈ°λ₯ ꡬνμΒ private μ κ·Ό μ νμλ₯Ό μ κ·Ή μ¬μ©νλ€.
- ν΅ν¬νκΈ°λ₯μ νμ©ν λ§ν¬μ
λ¬Έλ²μ νμ©ν μ£Όμμ μ κ·Ή μ¬μ©νλ€.
- μ΄μΈλ 컀μ€ν
νΒ SwiftLint Ruleμ μ μ©νλ€.
- image asset μΆκ° μ img_{name}μ μ΄λ¦μΌλ‘ μμ±νλ€. snakecaseλ‘ μμ±
- color asset μΆκ° μ Figma λ€μ΄λ°μ λ°λ¦.
-
λͺ¨λ νμΌμ λΉ μ€λ‘ λλλλ‘ ν©λλ€.
-
MARK ꡬ문μ μμλ§ ν μ€ μ€λ°κΏ ν©λλ€.
// MARK: - Layout override func layoutSubviews() { // doSomething() } // MARK: - Actions override func menuButtonDidTap() { // doSomething() }
-
ν¨μ μ€λ°κΏμ λ€μκ³Ό κ°μ΄ ν©λλ€.
override func layoutSubviews() { // doSomething() }
-
ν¨μ μ μκ° λ무 κΈΈμ΄μ§λ©΄ λ€μκ³Ό κ°μ΄ μ€λ°κΏν©λλ€.
νλΌλ―Έν° κΈ°μ€μΌλ‘ μ€λ°κΏνλ©°, 리ν΄μ λ°λ‘ μ€λ°κΏνμ§ μμ΅λλ€.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { // doSomething() }
-
ν¨μ μλ ν μΉΈ, ν΄λμ€ μλ ν μΉΈμ μ€λ°κΏνλ©° μλ―Έμλ 곡백μ λ§λ€μ§ μμ΅λλ€.
func ν¨μ1() { } func ν¨μ2() { }
-
μ½λκ° μ§§μλ μ€μ λ°κΏλλ€.
switch ~~ { case 0: print("") }
- guardλ¬Έμ΄ μ§§μ μ ν μ€μ λ€ μ μΈνλ€.
- guardλ¬Έμ΄ κΈΈ μ, μλμ κ°μ΄ guard λ¬Έμ κ°ννλ€.
- κ°ν μ,
elseλguardμ κ°μ λ€μ¬μ°κΈ°λ₯Ό μ μ©νλ€.
guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
user.gender == .female
else { return }git-flowμ μ¬μ©λλ λΈλμΉλ μ΄ 5κ° μ
λλ€. ποΈΒ (mainκ³Ό develop, feature νμ λλ¨Έμ§λ optional)
- **main(master)**:
μ νμΌλ‘ μΆμλ μ μλ λΈλμΉ
- **develop(κ°λ°)**:
λ€μ μΆμ λ²μ μ κ°λ°νλ λΈλμΉ
- **feature(κΈ°λ₯)**:
κΈ°λ₯μ κ°λ°νλ λΈλμΉ
- **release(λ°°ν¬)**:
μ΄λ² μΆμ λ²μ μ μ€λΉνλ λΈλμΉ(λ³΄ν΅ QAλ₯Ό μ¬κΈ°μ ν¨)
- **hotfix(빨리 κ³ μΉκΈ°)**:
μΆμ λ²μ μμ λ°μν λ²κ·Έλ₯Ό μμ νλ λΈλμΉ- [Feat] :Β μλ‘μ΄ κΈ°λ₯ μΆκ° β’ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν λ μ¬μ©λ©λλ€. μ΄μ μ μ‘΄μ¬νμ§ μμλ μλ‘μ΄ κΈ°λ₯μ΄λ κΈ°λ₯μ νμ₯μ ν¬ν¨ν©λλ€.
- [Fix] :Β λ²κ·Έ μμ β’ κΈ°μ‘΄ κΈ°λ₯μ μ€λ₯λ₯Ό μμ νλλ° μ¬μ©λ©λλ€. μ ν리μΌμ΄μ μ κΈ°λ₯ λλ λμμ΄ μλν λλ‘ μλνμ§ μμ λ μ¬μ©λ©λλ€.
- [Docs] :Β λ¬Έμ μμ± β’ λ¬Έμλ₯Ό μΆκ°νκ±°λ λ³κ²½ν λ μ¬μ©λ©λλ€. μ£Όλ‘ README νμΌ, μ¬μ© μ€λͺ μ, μ£Όμ λ±μ λ³κ²½μ μλ―Έν©λλ€.
- [Setting] : νλ‘μ νΈ μΈν
- [Chore] : κ·Έ μ΄μΈμ μ‘μΌ/ λ²μ μ½λ μμ , ν¨ν€μ§ ꡬ쑰 λ³κ²½, νμΌ μ΄λ, νμΌμ΄λ¦ λ³κ²½
- [Add] :Β νμΌμΆκ°, μμ μΆκ° β’ μλ‘μ΄ νμΌμ΄λ μ½λμ μΆκ°μ μ¬μ©λ©λλ€. μλ‘μ΄ νμΌμ΄λ μ½λλ₯Ό νλ‘μ νΈμ μΆκ°ν λ μ¬μ©λ©λλ€.
- [Design] : UI λμμΈμ λ³κ²½νμ λ
- [Refactor] : μ λ©΄ μμ μ΄ μμ λ μ¬μ©ν©λλ€
βββ ci_scripts
β βββ .swiftlint
βββ Application
β βββ AppDelegate
β βββ SceneDelegate
β βββ LaunchScreen
βββ Global
β βββ Extension
β βββ Literals
β β βββ Font
β βββ Resources
β β βββ Assets
β β βββ Lottie Animation
β βββ Utility
β β βββ Info.plist
β β βββ Config.xcconfig
βββ Domain
βββ Data
β βββ DTO
β βββ Router
β βββ Base
βββ Presentation
β βββ Scene1
β β βββ View
β β β βββ Cell
β β βββ ViewController
β β βββ ViewModel




