Skip to content

31th-SOPT-SOPKATHON-14/SOPKATHON-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SOPKATHON-iOS

image 10@3x Slide 16_9 - 19@3x Slide 16_9 - 13@3x


✨ 서비스 이름과 소개

서비스명 서비스 소개
캐미 (Campus-mission: Cammi) 지루하고 반복되는 학교생활, 특별한 미션들과 함께 변화를 만들어보세요.

🔫 개발 담당 부분

담당 뷰 담당자 구현 기능 구현 기능 설명
상세 페이지 뷰 강윤서 프로젝트 세팅, 상세 페이지 뷰, 네트워크 세팅 및 연결 미션에 대한 상세 정보를 보여줌
마이 페이지 뷰 장석우 마이페이지 뷰, 네트워크 연결 사용자가 완료한 미션들과 이를 기반으로 한 사용자 등급을 보여줌
랭킹 뷰 배성호 랭킹 뷰, 네트워크 연결 사용자 등급과 사용자 친구들의 랭킹을 보여줌
초기화면 뷰, 선물상자 뷰 최효원 초기화면 뷰, 네트워크 연결 초기 앱 실행 시, 사용자의 학교 선택과 미션 화면 보여줌

🪧 Library

라이브러리 사용 목적 Version Management Tool
SnapKit UI Layout 5.6.0 SPM
Then UI 선언 3.0.0 SPM
Moya 서버 통신 15.0.3 SPM

🎈 Convention

✨ Git Branch Convention

  • Branch Naming Rule
    • Issue 작성 후 생성되는 번호와 Issue의 간략한 설명 등을 조합하여 Branch 이름 결정
    • feature/<#IssueNumber>
  • Commit Message Rule
    • [Prefix] #이슈번호 - <Description>

✨ Git Flow

1. 작업 단위별 Issue 생성

2. develop 브랜치에서 작업 브랜치 생성
 > 예시) feature/#3

3. Branch 생성 : git switch -c Prefix/#IssueNumber-description 
  > 예시) chore/#3-Project-Setting

4. 로컬 환경에서 작업 후 Add -> Commit -> Push -> Pull Request의 과정을 거친다.
  
  Prefix의 의미
  > [Feat] : 새로운 기능 구현
  > [Chore] : 코드 수정, 패키지 구조 변경, 파일 이동, 파일이름 변경 등
  > [Add] : 코드 변경 없는 단순 파일 추가, 에셋 및 라이브러리 추가
  > [Fix] : 버그, 오류 해결, 코드 수정
  > [Docs] : README나 WIKI 등의 문서 개정
  > [Refactor] : 전면 수정
  > [Setting] : 프로젝트 세팅


5. Pull Request 작성 

6. develop Branch로 merge하기

✨ Naming & Code Convention

  • 클래스/구조체 이름은 UpperCamelCase를 사용합니다.
  • 함수와 변수에는 lowerCamelCase를 사용합니다.
  • 파일, 메서드, 클래스 명 약어 사용 지양한다.
    • 예시) ViewController → VC (❌)
    • 예시) CollectionViewCell → CVC (❌)
    • 예시) loginButtonDidTap: UIButton -> loginBtnTapped (❌)
  • 이외 기본 명명규칙은 Swift Style Guide, API Design Guidelines , Swift Style Guide를 참고한다.

✨ Project Foldering

.
├── Application
│   ├── AppDelegate.swift
│   └── SceneDelegate.swift
├── Network
│   ├── API
│   ├── Base
│   │   ├── Encodable+.swift
│   │   ├── Enviroment.swift
│   │   ├── GeneralResponse.swift
│   │   ├── NetworkConstant.swift
│   │   ├── NetworkResult.swift
│   │   └── URLConstant.swift
│   ├── DataModel
│   │   └── ScreenModel
│   ├── Plugin
│   │   └── NetworkLoggerPlugin.swift
│   └── Service
├── Presentation
│   └── Scene
│       ├── Cells
│       └── ViewController
├── Resource
│   ├── Base.lproj
│   │   └── LaunchScreen.storyboard
│   ├── Color.xcassets
│   ├── Font
│   ├── Image.xcassets
│   │   ├── AccentColor.colorset
│   │   │   └── Contents.json
│   │   ├── AppIcon.appiconset
│   │   │   └── Contents.json
│   │   └── Contents.json
│   └── Info.plist
└── Utils
   ├── Constant
   └── Extension

🎨 UI Sketch

접기/펼치기

https://sulfuric-alphabet-33a.notion.site/iOS-1-d5a179be349642798efa425aaca8ead5


📸 우리 사진><

접기/펼치기

😂 개발 시 어려웠던 점

윤서☃️
  • 어려웠던 점 : 버튼에 addTarget이 되지 않았다.

  • 해결 방법 : 버튼의 superview의 너비를 정해주지 않아서 하위뷰인 버튼의 영역도 잡히지 않아서였다. .

효원🐰
  • 어려웠던 점 : viewType을 나눠서 미션을 성공했을 때의 화면과 달성했을 때의 Home 화면을 다르게 구성해줘야 했다...
    열심히 type 나눠서 해보았지만 적용이 되지 않았따...
  • 해결 방법 : 그냥.... View 2개 만들어서 present 해줬따..
석우🙈
  • 어려웠던 점 : tableView와 CollectionView가 유사하면서도 달라 혼란스러웠다.

  • 해결 방법 : 애플 공식문서를 정독하며 두 메소드 간의 차이점을 분석하여 사용하였다.

성호🦥
  • 어려웠던 점 : 똑같이 생긴 뷰를 구현하더라도, 어떤식으로 만들지에 대해 우선적으로 협의하지 않아 구현 방식이 서로 달랐다. 나중에 develop에 push하여 헤더뷰를 합치는 과정에서, AutoLayout을 잡는 것이 번거로웠다.

  • 해결 방법 : 다른 화면을 구현할 시에는 어떠한 UIView를 사용할 지를 미리 정해 충돌을 방지했다.


🎥 시연영상

Simulator Screen Recording - iPhone 14 Pro - 2022-11-20 at 08 13 16

About

2시까지 놀자 얘두라 ㅋㅋ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages