# Bool 바다
## 할일 목록
* ✅ Git Team 만들기 & repo 만들기
* repo : 팀 ID-프로젝트명(영문) 예) web01-boostproject
* Ground Rule 정립하기
* 우리의 목표 (뭘 해보자 등) 기술적인 도전?
* 위젯을 꼭 만들자 (SwiftUI 사용)
* Git commit message convention
* Naming convention
* Git 브랜치 전략 workflow
* 작업 관리 (Issue, Project 칸반보드 사용)
* 소통법, 스크럼 시간
* 주제 정하기
* 가제: 깐트윈(니꺼 내꺼 없는거여~)
* 에픽/스토리 정리
* 디자인 문서 만들기
## Git Team 만들기 & repo 만들기
[저장소](https://github.com/boostcampwm-2021/iOS07-Kkantween)
## Ground Rule
### Commit Convention
#### Gitmoji
| Feat | Doc | Chore | Refactor | Fix | Layout |
|:-:|:-:|:-:|:-:|:-:|:-:|
|<div style="width:70px;">✨</div>|<div style="width:70px;">:memo:</div>|<div style="width:70px;">🤪</div> | <div style="width:70px;">:recycle:</div> | <div style="width:70px;">🚨</div> | <div style="width:70px;">:art:</div> |
#### 컨벤션
* ``({이슈번호}) {깃모지}: {커밋메시지}``
* `(#1) 🎨: 레이아웃 수정`
### 브랜치 전략
* Github-flow를 상정하고 내일 정한다.. (내일 직접 맞으면서 배운다)
### Code Convention
[StyleShare Swift style guid](https://github.com/StyleShare/swift-style-guide)를 참조했습니다.
#### 들여쓰기 및 띄어쓰기
* 들여쓰기는 tab (space 4개) 사용합니다.
* 함수 정의 후 `{` 는 공백 한칸을 두고 사용합니다.
```Swift
func foo() {
//do something
}
```
#### 줄바꿈
* 함수를 호출하는 코드가 최대 길이를 초과하는 경우에는 파라미터 이름을 기준으로 줄바꿈합니다.
```Swift
let actionSheet = UIActionSheet(
title: "정말 계정을 삭제하실 건가요?",
delegate: self,
cancelButtonTitle: "취소",
destructiveButtonTitle: "삭제해주세요"
)
```
* if let 구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다.
```Swift
if let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
user.gender == .female {
// ...
}
```
* guard let 구문이 길 경우에는 줄바꿈하고 한 칸 들여씁니다. else는 guard와 같은 들여쓰기를 적용합니다.
```Swift
guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
user.gender == .female
else {
return
}
```
#### 최대 줄 길이
* 최대 줄 길이는 145로 합니다.
#### Import 구분
* 모듈 임포트는 알파벳 순으로 정렬합니다. 내장 프레임워크를 먼저 임포트하고, 빈 줄로 구분하여 서드파티 프레임워크를 임포트합니다.
```Swift
import UIKit
import SwiftyColor
import SwiftyImage
import Then
import URLNavigator
```
#### MARK/TODO 규칙
* `Static Properties` : `CellIdentifier` 등
* `Subviews` : ViewController/View에 자식으로 들어가게 될 View들
> 보여지는 순서대로?
* `Public Properties` : UILabel로 치면 title 같은 것
* `Private Properties`
> `Constant` 먼저 쓰고 개행 후 `Variable`을 작성해준다.
* `Initializers` : 생성자
* `Lifecycle Methods` : `viewDidLoad`, `viewWillAppear` 등 라이프사이클
* `Helpers` : Configure, bind 메소드들
* `Private Methods` : 내부에서 호출하게 되는 함수 e.g. `buttonTapped()`
* `Public Methods` : 외부에서 호출하게 되는 함수 e.g `setTitle()`
* `FIXME` : 이후에 고쳐져야하는 것들에 대한 표시
#### 프로그래밍 권장사항
* `self` 는 다 쓰기
* `final` 은 상속이 필요하지 않은 class에 모두 명시하기
* 프로토콜을 적용할 때에는 `extension`을 만들어서 관련된 메서드
* 컬러의 경우 `Assets.xcassetes`에 넣고, `UIColor`의 `extension`으로 관리한다.
#### Naming Convention
##### 함수
* Action 함수의 네이밍은 '주어 + 동사 + 목적어' 형태를 사용합니다.
* *Tap(눌렀다 뗌)* 은 UIControlEvents의 .touchUpInside에 대응하고, *Press(누름)* 는 .touchDown에 대응합니다.
* will~은 특정 행위가 일어나기 직전이고, did~는 특정 행위가 일어난 직후입니다.
* should~는 일반적으로 Bool을 반환하는 함수에 사용됩니다.
```Swift
func backButtonDidTap() {
// ...
}
```
-> 린트화는 내일...
### Bool바다의 약속
### Core Time
| 시간 | 내용 |
|:-:|:-:|
|`10:00` - `10:10` | 스크럼 |
|`10:10` - `12:00` | 코드리뷰 -> merge |
| `12:00` - `13:00` | 점심
| `13:00` - `19:00` | 개발 |
| `19:00` - `21:00` | 노터치 시간 |
| `22:00` | PR 권장시간(무리하지 말자, 다 쉬고있다. 지속가능한 개발자가 되자)|
### 작업 관리
Git 의 Project와 Issue를 이용 -> 내일 맞으면서 배우자
### 소통법
* 해야되나 싶으면 하고 해도되나 싶으면 물어보기!
* 소통중에 아니다 싶으면 항상 (좋은말로)이야기하기
* 금요일 회고 시간에 서운했던 점, 감사했던 점 서로 공유하기(꼭!)