# 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를 이용 -> 내일 맞으면서 배우자 ### 소통법 * 해야되나 싶으면 하고 해도되나 싶으면 물어보기! * 소통중에 아니다 싶으면 항상 (좋은말로)이야기하기 * 금요일 회고 시간에 서운했던 점, 감사했던 점 서로 공유하기(꼭!)