iOS 앱 개발 포트폴리오 | 캐리커쳐 소개팅 앱

내일배움캠프 7기 앱 개발 과정 iOS 트랙 수료생 최종 프로젝트 'Catcher'를 소개합니다.
Mar 07, 2024
iOS 앱 개발 포트폴리오 | 캐리커쳐 소개팅 앱
notion image
notion image
notion image
notion image
notion image

Catcher

캐리커처로 만나는 소개팅 앱
  1. 캐리커처 변환
      • 사용자의 얼굴 사진을 가져와 아름다운 캐리커처로 변환합니다. 이를 통해 사용자는 자신을 특별하게 표현할 수 있습니다.
  1. 부담 없는 소개팅
      • 다양한 이유로 얼굴 노출을 꺼리는 사용자들을 위한 부담 없는 소개팅 경험을 제공합니다.
  1. 개성과 유머
      • 캐리커처 이미지는 개성적이고 유머러스하여 상대방에게 강력한 첫인상을 전달합니다.
 

아키텍쳐

notion image

앱 대표 색상 (Color Schemes)

notion image

앱 아이콘 (App Icon)

notion image

배포 절차

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
  • 동사 + 명사
Code Convention (2)
Code Convention (2)
 
 
Share article
Subscribe Newsletter
Stay connected for the latest news and insights.
RSSPowered by inblog