사회에 첫 발걸음을 내딛기 전 필수 요소라고 할 수 있는 인턴 경험, 어떻게 준비해야할 지 막막하다면?
인턴을 처음 준비하는 대학생에게, 인턴을 준비하지만 어려움을 겪고 있는 대학생에게, 인턴을 경험했거나 하고 있는 대학생에게
가장 먼저 생각나는 서비스가 되길 바라며 제안하게 되었습니다.
- 개발 기간 : 2019년 12월 21일 ~ 2020년 1월 3일
- 커밋 메세지는 영어로
- 변수 명은 low camel 사용
- 강제 옵셔널 금지
- 각자 분담한 스토리보드 외에 건들기 금지
- 커밋시 반드시 서로에게 알릴것
- pod 'Alamofire', '~> 4.8.2'
- pod 'Kingfisher', '~> 4.10.1'
- pod 'CHIPageControl', '~> 0.1.3'
- pod 'Tabman', '~> 2.6'
- pod 'FSCalendar'
- 11.3
| 기능 | 개발 여부 | 기타사항 | 담당 |
|---|---|---|---|
| 스플래쉬 | ○ | 주연 | |
| 온보딩 | ○ | 어플 첫 실행 시 동작 | 담 |
| 로그인 | ○ | 주연,담 | |
| 회원가입(기본정보) | ○ | 이메일 중복 체크 ○ | 담 |
| 회원가입(관심직무 + 프로필 설정) | △ | 첫 번째 로그인 한 경우에만 지정 | 담 |
| 프로필 설정 | △ | 첫 번째 로그인 한 경우에만 지정 | 담 |
| 홈(맞춤 공고) | △ | 회사 url 연결 | 담 |
| 홈(추천 프로필) | △ | 상세 프로필 연결 | 담 |
| 홈(오늘의 스토리) | △ | 상세 스토리뷰 연결 | 담 |
| 공고 | ○ | 전체공고 / 지난 공고 순으로 정렬 | 담 |
| 공고 추가 | ○ | 관심있는 공고를 캘린더 일정에 추가 | 담 |
| 공고 필터 | △ | 보고 싶은 직무를 필터에 따라 설정 | 담 |
| 공고 캘린더 | ○ | 월별 공고 조회, 추가한 공고 리스트를 캘린더에 표시 | 담 |
| 스토리 | ○ | 최신순 / 조회순 정렬 | 담 |
| 카테고리 별 스토리 조회 | 인턴 / 대외활동 / 공모전 / 동아리 / 자격증 / 기타 에 따라 조회 | 담 | |
| 스토리 상세글 | ○ | 담 | |
| 스토리 댓글 | ○ | 댓글보기 + 댓글쓰기 | 담 |
| 개인 프로필 | △ | 정보: 회원가입시의 한 줄 소개 + 프로필 사진 + 관심 직무 | 주연 |
| 개인 프로필 쪽지 | ○ | 대화를 나눈 유저 리스트 | 주연, 담 |
| 개인 프로필 쪽지 상세 내용 | △ | 주연 | |
| 개인 프로필 타임라인 조회 | ○ | 주연 | |
| 개인 프로필 타임라인 추가 | △ | 플러팅버튼을 통해 타임라인 추가 | 주연 |
| 타임라인 스토리 리스트 조회 | ○ | 주연, 담 | |
| 개인 프로필 스토리 추가 | △ | 주연 | |
| 개인 프로필 스토리 팔로우 리스트 | ○ | 주연, 담 |
- splash
- onBoarding
- Login & Signup
- FirstLogin
- home tab : 추천 공고, 추천 프로필, 최신 스토리
- announcement tab
- 전체 공고, 지난 공고 정렬 선택
- 공고 필터 : 보고 싶은 직무 1개 선택, 필터에 따라 정렬
- 공고 캘린더 : 관심 추가한 공고를 캘린더에 추가
- story tab
- 스토리 최신순, 조회순 정렬
- 탭 바 : 인턴, 대외활동, 공모전, 동아리, 자격증, 기타에 따른 스토리 조회
- 스토리 상세글
- 스토리 댓글
- profile tab
- 개인 프로필 정보 조회
- 개인 활동에 대한 타임라인 작성 및 조회
- 개인 프로필 > 타임라인 > 각 타임라인에 대해 작성한 스토리 리스트 조회
- 팔로잉 / 팔로워 조회
- 쪽지 주고 받기
- 서버에서 받아온 데이터가 decode 되지 않음
-> ResponseString 수정 (https://app.quicktype.io 참고 )
enumCodingKeys:String,CodingKey{case timelineIdx, userIdx, title
case start_date ="start_date"case end_date ="end_date"case category
}init(from decoder:Decoder)throws{letvalues=try decoder.container(keyedBy:CodingKeys.self)
timelineIdx =(try? values.decode(Int.self, forKey:.timelineIdx))??0
userIdx =(try? values.decode(Int.self, forKey:.userIdx))??0
title =(try? values.decode(String.self, forKey:.title))??""
start_date =(try? values.decode(String.self, forKey:.start_date))??""
end_date =(try? values.decode(String.self, forKey:.end_date))??""
category =(try? values.decode(String.self, forKey:.category))??""}- UIPicker + Tool Bar 생성 -> 코드로 작성
// 1. 전체를 잡는 view 생성 + constraint 걸기
self.picker.isHidden =falseself.picker.frame =CGRect(x:0, y: view.frame.height -220, width: view.frame.width, height:150)
view.addSubview(self.picker)
// 2. Tool Bar 에 들어갈 버튼 생성
letbtnDone=UIBarButtonItem(barButtonSystemItem:.done, target:self, action: #selector(self.testfunc))
// 3. UIPicker Toolbar 생성 + 속성 setting
letbarAccessory=UIToolbar(frame:CGRect(x:0, y:0, width: picker.frame.width, height:44))
barAccessory.barStyle =UIBarStyle.default
barAccessory.isTranslucent =true
barAccessory.items =[btnDone]
picker.addSubview(barAccessory)
// 4. UIPickerView 생성
self.pickerView.frame =CGRect(x:0, y: barAccessory.frame.height, width: view.frame.width, height: picker.frame.height - barAccessory.frame.height)self.pickerView.delegate =selfself.pickerView.dataSource =selfself.pickerView.backgroundColor =UIColor.whiteFour
picker.addSubview(self.pickerView)- CalendarView 를 기획에 맞게 커스텀 하기
- FSCalendar Library 설치 ( https://rhammer.tistory.com/126 )
- DateFormatter 를 사용해 원하는 날짜에 이벤트 생성
letformatter=DateFormatter()
formatter.locale =Locale(identifier:"ko_KR")
formatter.dateFormat ="yyyy-MM-dd"letxmas= formatter.date(from:"2019-12-25")letsampledate= formatter.date(from:"2019-12-22")
dates =[xmas!, sampledate!]extensionCalendarViewController:FSCalendarDataSource{func calendar(_ calendar:FSCalendar, numberOfEventsFor date:Date)->Int{ifself.dates.contains(date){return1}return0}}- UITabBar 사용하기
- Tabman Library 설치 ( https://github.com/uias/Tabman )
- TMBarItem 공식 문서 참조해 custom
// Create bar
letbar=TMBar.ButtonBar()
bar.layout.transitionStyle =.snap
// Customize button color
bar.buttons.customize{(button)in
button.tintColor =UIColor.brownishGreyTwo
button.selectedTintColor =UIColor.marigold
}
bar.indicator.tintColor =UIColor.marigold
addBar(bar, dataSource:self, at:.top)- Navigation Bar Line Custom
overridefunc viewWillAppear(_ animated:Bool){
super.viewWillAppear(animated)if shadowImageView ==nil{
shadowImageView =findShadowImage(under: navigationController!.navigationBar)}
shadowImageView?.isHidden =true}overridefunc viewWillDisappear(_ animated:Bool){
super.viewWillDisappear(animated)
shadowImageView?.isHidden =false}privatefunc findShadowImage(under view:UIView)->UIImageView?{if view is UIImageView && view.bounds.size.height <=1{return(view as!UIImageView)}forsubviewin view.subviews {iflet imageView =findShadowImage(under: subview){return imageView
}}returnnil}iOS 개발 경험이 없어 시행착오를 많이 겪으며 성장하는 중입니다. 인턴즈 체고 주연이 체체고
‼️ 😘
앱개발은 처음이라 능숙치 못했지만 좋은 팀원 덕분에 많이 성장할 수 있던 뜻깊은 시간이었습니다! 은자이 체체고 ❣️


























