Skip to content

INTENRZ/iOS-Internz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

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 참고 )
    enum CodingKeys: String, CodingKey {
        case timelineIdx, userIdx, title
        case start_date = "start_date"
        case end_date = "end_date"
        case category
    }
    
    init(from decoder: Decoder) throws {
        let values = 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 = false
        self.picker.frame = CGRect(x: 0, y: view.frame.height - 220, width: view.frame.width, height: 150)
        view.addSubview(self.picker)
        
        // 2. Tool Bar 에 들어갈 버튼 생성
        let btnDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.testfunc))
        
        // 3. UIPicker Toolbar 생성 + 속성 setting
        let barAccessory = 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 = self
        self.pickerView.dataSource = self
        self.pickerView.backgroundColor = UIColor.whiteFour
        
        picker.addSubview(self.pickerView)


  1. CalendarView 를 기획에 맞게 커스텀 하기
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "ko_KR")
    formatter.dateFormat = "yyyy-MM-dd"
        
    let xmas = formatter.date(from: "2019-12-25")
    let sampledate = formatter.date(from: "2019-12-22")
        
    dates = [xmas!, sampledate!]
extension CalendarViewController: FSCalendarDataSource{
    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {
        
        if self.dates.contains(date){
            return 1
        }
        
        return 0
    }
}


  1. UITabBar 사용하기
       // Create bar
        let bar = 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
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if shadowImageView == nil {
            shadowImageView = findShadowImage(under: navigationController!.navigationBar)
        }
        shadowImageView?.isHidden = true
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        shadowImageView?.isHidden = false
    }
    
    private func findShadowImage(under view: UIView) -> UIImageView? {
        if view is UIImageView && view.bounds.size.height <= 1 {
            return (view as! UIImageView)
        }
        
        for subview in view.subviews {
            if let imageView = findShadowImage(under: subview) {
                return imageView
            }
        }
        return nil
    }




👶 Contributor

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

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


About

iOS Power 🤘

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •