iOS 앱 개발 포트폴리오 | 캐리커쳐 소개팅 앱
내일배움캠프 7기 앱 개발 과정 iOS 트랙 수료생 최종 프로젝트 'Catcher'를 소개합니다.
Mar 07, 2024
Catcher
캐리커처로 만나는 소개팅 앱
- 캐리커처 변환
- 사용자의 얼굴 사진을 가져와 아름다운 캐리커처로 변환합니다. 이를 통해 사용자는 자신을 특별하게 표현할 수 있습니다.
- 부담 없는 소개팅
- 다양한 이유로 얼굴 노출을 꺼리는 사용자들을 위한 부담 없는 소개팅 경험을 제공합니다.
- 개성과 유머
- 캐리커처 이미지는 개성적이고 유머러스하여 상대방에게 강력한 첫인상을 전달합니다.
아키텍쳐
배포 절차
1. 버전 확인
2. 프로비저닝 파일 확인
3. 배포 아카이빙
4. TestFlight 테스트 진행
5. 심사 올리기
전체 프로젝트
프로젝트 | 태그 |
1.0.4 | 심사 |
1.0.3 | 심사 |
1.0.2 | 심사 |
1.0.1 | 심사 |
1.0.0 | 심사 |
ImageFactory | 기능 개발 |
ResetPassword | 기능 개발 |
1:1 Contact | 기능 개발 |
MyPage | 기능 개발 |
Register | 기능 개발 |
Firebase Cloud Message | 기능 개발 |
Chat | 기능 개발 |
Package Manager | 기능 개발 |
Report | 기능 개발 |
UserInfo | 기능 개발 |
Main | 기능 개발 |
VersionPage | UI개발 |
OpenSourceLicensePage | UI개발 |
1:1 ContactPage | UI개발 |
ResetPasswordPage | UI개발 |
Extension | UI개발 |
BasePage | UI개발 |
ImageFactoryPage | UI개발 |
RegisterPage | UI개발 |
LoginPage | UI개발 |
MyPage | UI개발 |
ReportPage | UI개발 |
UserInfoPage | UI개발 |
ChatPage | UI개발 |
MainPage | UI개발 |
Figma 작업 | 디자인 |
Login | 기능 개발 |
코드 리뷰
원칙
코드 리뷰를 하는 이유는 무엇이고 리뷰의 기본 원칙은 무엇인가요?
엔지니어링 가이드라인 템플릿처럼 관련된 다른 페이지를 멘션하는 것도 좋은 방법입니다. 페이지 내에 다른 페이지를 링크하려면
@
다음에 페이지 이름을 입력하세요(예: ).코드 리뷰 준비
리뷰가 필요한 코드를 준비하세요.
1. 메시지
커밋 메시지에는 충분한 설명을 담아 주세요.
2. Github PR 설명
PR 설명도 매우 중요합니다. 이번 커밋의 변경 사항과, 어떻게 변경되었는지 적어주세요.
코드 리뷰 수행
리뷰 방법
- 리뷰가 중요한 코드의 경우 두 차례에 걸쳐 리뷰합니다.
- 첫 번째 리뷰에서는 코드 변경 사항을 개략적으로 파악합니다.
- 두 번째 리뷰에서는 세부 사항을 집중적으로 검토합니다.
예시
var commentCount = 0;
이 예시에서는
var
이 아니라 let
을 사용할 것을 제안합니다.Code Convention
1. dev
에서 브랜치 만들기
다음과 같이 feat/fix를 앞에 추가하여 브랜치 이름을 지정하세요. 브랜치 이름은 소문자(snake case)
feat/화면명
fix/화면명
2 Github에서 Pull Request 생성
PR 설명에 Notion 작업 링크를 포함하세요.
3. 리뷰 요청 및 제출
- Github에서 완료한 작업을 적절한 리뷰어에게 요청하세요.
4. main
브랜치는 배포용
배포할 때만 PR 올려주세요.
Git Rule
Tag | Description |
[FEAT] : ⚙️ | 새로운 기능을 추가 |
[FIX] : 🐛 | 버그 수정 |
[FIX] : 🔧 | 잔잔바리 수정 |
[DESIGN] : 🎨 | CSS 등 사용자 UI 디자인 변경 |
[!BREAKING CHANGE] : 🚧 | 커다란 API 변경의 경우(URI 주소 외 Request, Response 가 변경되는 경우) |
[!HOTFIX] : 💥 | 급하게 치명적인 버그를 고쳐야하는 경우 |
[STYLE] : 🖍️ | 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우 |
[REFACTOR] : ♻️ | 프로덕션 코드 리팩토링 |
[DOCS] : 📚 | 문서 수정, 필요한 주석 추가 및 변경 |
[TEST] : 📝 | 테스트 코드, 리펙토링 테스트 코드 추가, Production Code(실제로 사용하는 코드) 변경 없음 |
[PACK] : 🎁 | 빌드 업무 수정, 패키지 매니저 수정, 패키지 관리자 구성 등 업데이트, Production Code 변경 없음 |
[RENAME] : ✏️ | 파일 혹은 폴더명을 수정하거나 옮기는 작업만인 경우 |
[REMOVE] : ✂️ | 파일을 삭제하는 작업만 수행한 경우 |
[COMPLETION] : 🎉 | 작업을 완료하고 마지막 커밋을 작성하는 경우 |
[MERGE] : ✅ | 병합 |
[CONFLICT] : 💥🚚 | 병합 시 충돌 해결 |
[DEPLOY] : 🚀 | 배포 관련 커밋 |
Git Convention
MARK 구문
class ViewController: UIViewController { // MARK: - Properties // MARK: - UI Properties ''' // MARK: - Life Cycle (init - Life Cycle - deinit ''' } extension ViewController { // MARK: - Layout // MARK: - @objc // MARK: - Private Methods } // MARK: - UITableView Delegate . . .
코드 들여쓰기
- 콜론(
:
)을 쓸 때에는 콜론의 오른쪽에만 공백을 둡니다.
let names: [String: String]?
빈줄
- 빈줄에는 공백이 포함되지 않도록 합니다.
- MARK 구문 위와 아래에는 공백이 필요합니다.
// MARK: Layout override func layoutSubviews() { // doSomething() } // MARK: Actions override func menuButtonDidTap() { // doSomething() }
임포트
- 모듈 임포트는 알파벳 순으로 정렬합니다. 내장 프레임워크를 먼저 임포트하고, 빈줄로 구분 후, 서드파티 프레임워크를 임포트합니다.
import UIKit import SwiftyColor import SwiftyImage import Then import URLNavigator
클래스와 구조체의 네이밍
- 클래스와 구조체의 이름에는 UpperCamelCase를 사용합니다
class SomeClass { // class definition goes here } struct SomeStructure { // structure definition goes here }
함수의 네이밍
- 함수 이름에는 lowerCamelCase를 사용합니다.
func name(for user: User) -> String?
- Action 함수의 네이밍은 ‘주어+동사+목적어’형태를 사용합니다.
- Tap(눌렀다 뗌)*은
UIControlEvents
의.touchUpInside
에 대응하고, *Press(누름)*는.touchDown
에 대응합니다.
- will~은 특정 행위가 일어나기 직전이고, did~는 특정 행위가 일어난 직후입니다.
- should~는 일반적으로
Bool
을 반환하는 함수에 사용됩니다.
func backButtonDidTap() { // ... }
변수 & 상수 네이밍
- lowerCamelCase를 사용합니다.
let maximumNumberOfLines = 3
열거형
- enum의 이름은 UpperCamelCase, enum case는 lowerCamelCase를 사용합니다.
enum Result { case .success case .failure }
프로토콜
- 프로토콜 이름에는 UpperCamelCase를 사용합니다.
protocol SomeProtocol { // protocol definition goes here } struct SomeStructure: SomeProtocol, AnotherProtocol { // structure definition goes here } class SomeClass: SomeSuperclass, SomeProtocol, AnotherProtocol { // class definition goes here } extension UIViewController: SomeProtocol, AnotherProtocol { // doSomething() }
약어
- 약어로 시작하는 경우 소문자로 표기하고, 그외의 경우에는 항상 대문자로 표기합니다.
let userID: Int? let html: String? let websiteURL: URL? let urlString: String?
Additional Rules
약어 지양
→ TVC보다는 TableViewCell
get
set
지양- 국룰이다….
- 프로퍼티 public 함수 안에서는 ok
- fetch(get 대신에 사용)
- set → setup
- config→ configure
- 동사 + 명사
취업 준비, 어디서부터 시작해야 할지 모르겠다면?
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
Share article
Subscribe to our newsletter