Skip to content

Latest commit

History

234 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

💛 INTERNZ_iOS 🐥🐤

사회에 첫 발걸음을 내딛기 전 필수 요소라고 할 수 있는 인턴 경험, 어떻게 준비해야할 지 막막하다면?
인턴을 처음 준비하는 대학생에게, 인턴을 준비하지만 어려움을 겪고 있는 대학생에게, 인턴을 경험했거나 하고 있는 대학생에게
가장 먼저 생각나는 서비스가 되길 바라며 제안하게 되었습니다.


workflow

screenshots


🔥 WITH SOPT 25th iOS Project

  • 개발 기간 : 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'

📱 Xcode Version

  • 11.3



💻 기능 소개

기능개발 여부기타사항담당
스플래쉬주연
온보딩어플 첫 실행 시 동작
로그인주연,담
회원가입(기본정보)이메일 중복 체크 ○
회원가입(관심직무 + 프로필 설정)첫 번째 로그인 한 경우에만 지정
프로필 설정첫 번째 로그인 한 경우에만 지정
홈(맞춤 공고)회사 url 연결
홈(추천 프로필)상세 프로필 연결
홈(오늘의 스토리)상세 스토리뷰 연결
공고전체공고 / 지난 공고 순으로 정렬
공고 추가관심있는 공고를 캘린더 일정에 추가
공고 필터보고 싶은 직무를 필터에 따라 설정
공고 캘린더월별 공고 조회, 추가한 공고 리스트를 캘린더에 표시
스토리최신순 / 조회순 정렬
카테고리 별 스토리 조회인턴 / 대외활동 / 공모전 / 동아리 / 자격증 / 기타 에 따라 조회
스토리 상세글
스토리 댓글댓글보기 + 댓글쓰기
개인 프로필정보: 회원가입시의 한 줄 소개 + 프로필 사진 + 관심 직무주연
개인 프로필 쪽지대화를 나눈 유저 리스트주연, 담
개인 프로필 쪽지 상세 내용주연
개인 프로필 타임라인 조회주연
개인 프로필 타임라인 추가플러팅버튼을 통해 타임라인 추가주연
타임라인 스토리 리스트 조회주연, 담
개인 프로필 스토리 추가주연
개인 프로필 스토리 팔로우 리스트주연, 담



📌 screenshots

  1. splash


  1. onBoarding


  1. Login & Signup


  1. FirstLogin


  1. home tab : 추천 공고, 추천 프로필, 최신 스토리


  1. announcement tab
  • 전체 공고, 지난 공고 정렬 선택
  • 공고 필터 : 보고 싶은 직무 1개 선택, 필터에 따라 정렬
  • 공고 캘린더 : 관심 추가한 공고를 캘린더에 추가


  1. story tab
  • 스토리 최신순, 조회순 정렬
  • 탭 바 : 인턴, 대외활동, 공모전, 동아리, 자격증, 기타에 따른 스토리 조회
  • 스토리 상세글
  • 스토리 댓글



  1. profile tab
  • 개인 프로필 정보 조회
  • 개인 활동에 대한 타임라인 작성 및 조회
  • 개인 프로필 > 타임라인 > 각 타임라인에 대해 작성한 스토리 리스트 조회
  • 팔로잉 / 팔로워 조회
  • 쪽지 주고 받기





문제점과 해결 방법

  1. 서버에서 받아온 데이터가 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))??""}


  1. 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)


  1. CalendarView 를 기획에 맞게 커스텀 하기
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}}


  1. UITabBar 사용하기
 // 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)


  1. 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}




👶 Contributor

iOS 개발 경험이 없어 시행착오를 많이 겪으며 성장하는 중입니다. 인턴즈 체고 주연이 체체고‼️😘

앱개발은 처음이라 능숙치 못했지만 좋은 팀원 덕분에 많이 성장할 수 있던 뜻깊은 시간이었습니다! 은자이 체체고 ❣️


About

iOS Power 🤘

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages