![[Ting] 프로젝트 Ting 종료 및 회고](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcGMIDH%2FbtsNP8BKwYn%2FAAAAAAAAAAAAAAAAAAAAAHYJ3Mud0yEp7TXfI1640vhjAJb5Y4OGYXqhXyTtwuH0%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DjSRuPpcyP13TftkwZSN32F8JkeA%253D)
다른 개발자들과 함께 앱을 직접 출시할 수 있는 경험을 할 수 있었던 소중한 프로젝트였습니다.저를 포함한 4명의 개발진은, 프로젝트의 주제로 어떤 앱을 만들지 고민을 하다가,오래전에 제가 아이디어 노트에 적어놓은, IT 직종 관련자들이 서로 프로젝트를 진행할 수 있도록 팀원을 구하고,기존의 팀에 조인할 수 있는 등, 구인 구직 플랫폼을 만들어보자고 팀원들에게 제안했고,팀원들이 수락하여 진행할 수 있었습니다! 따라서 저는 주도적으로 이 프로젝트를 기획할 수 있었고, 팀원들과 함께 하면서 협업과 소통의 가치를 배울 수 있었던 프로젝트였습니다. 또 팀원들과 앱 개발자로 성장하기 위한 다양한 경험을 했습니다.- 기획- 구조 설계- 디자인- 구현- 출시- 유저피드백 및 버그 수정 등의 유지보수 등을 경험했으며, ..
![[Ting] 유저피드백 / Textfield 공백검증, 특수문자 검증 구현, 키보드 내리는 기능 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbcLFE4%2FbtsMraVxbCm%2FAAAAAAAAAAAAAAAAAAAAAGSmgsWxXNpqZ88P44gDurFXwyj2qGd6uglYFj561jni%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DKWUdSN6FLmtVxnqywJCHzcn2aHo%253D)
유저피드백을 받았다. 1. 닉네임 이외에 다른 필드에서 공백 한번으로 비어있는 정보 생성 가능2. 특정 필드의 정보만 변경하고 싶은데, 한번 클릭하면 마지막 필드까지 내려갈때까지 키보드를 내릴 수 없음. 위 두가지 사항을 피드백 받았다.수정해야할 부분이다. 닉네임 중복검증 및 공백, 특수문자 검증에만 신경 쓴 나머지 다른 부분들을 체크하지 못했다.키보드도 마찬가지. 텍스트필드간의 이동 및 작성 완료시 키보드가 내려가는것에만 집중한 나머지 한가지 필드만 수정할지도 모르는 케이스를 간과하고 말았다. 수정해보자. 먼저 텍스트필드에 예외처리를 해보자 다른 파일에서도 코드를 재사용할 수 있도록, 별도의 파일로 분리를 해두었다.import UIKit// MARK: - 공백, 줄바꿈으로만 입력되었는지 체크func ..
![[Ting / 유저피드백] 키보드 관련 UX 개선 (returnKeyType 설정으로 다음 TextField로 이동)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FB0aUA%2FbtsMl842HkY%2FAAAAAAAAAAAAAAAAAAAAAFAoP7MxCSXHk29k_uDmW8GL101S3DTkExD8oZ-n6pHi%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DQA6JiXoOsG44koArBNPkei%252FaHm0%253D)
키보드 관련 UX를 개선하였다.위의 스크린 캡처와 같이, 텍스트 필드를 많이 사용하는 두개의 뷰가 있다.첫 회원가입시에 회원정보를 추가하는 뷰, 그리고 회원정보를 수정하는 뷰.이 부분에서 유저피드백을 받아서 키보드 관련 UX를 개선하였다. 개선전키보드의 Return키는 Done(완료). 값을 입력하고 Return키를 누르면, 키보드가 내려가고 다음 텍스트 필드를 직접 클릭해서 키보드를 또 띄워야한다.FirstResponder 설정이 안되어있기 때문에, 텍스트필드를 직접 선택해야함. 개선 후FisrtResponder를 첫번째 텍스트필드로 지정해서 자동으로 키보드가 뜬다.마지막 텍스트필드는 Done(완료). 따라서 키보드가 내려간다.이외에는 다음(Next), 다음 텍스트필드로 자동으로 넘어간다. 코드Cu..
![[Ting] TextField 공백, 특수문자 검사 로직 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbqiliN%2FbtsMlitN6ws%2FAAAAAAAAAAAAAAAAAAAAAP6GdvqqxtoikraI7djgp7q0Y78m4gSDoalSQN0wKghY%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dl69CV1rPfDhwPkD008iSVNucPlM%253D)
닉네임 같은 값은 중복되지 않고, 유효한 Unique값으로 구현되는 것이 중요하다.Unique값으로 갈지, 태그를 붙여서 중복 닉네임을 허용할지는 각자 선택할 문제지만, Ting에서는 Unique값으로 결정.또한 닉네임간의 공백, 특수문자 사용을 허가하지 않기로 결정했기 때문에,해당 항목들에 대한 검사 로직이 필요하다. 중복검사 로직 구현 글 [Ting / 트러블슈팅] 회원정보 수정 시 닉네임 변경을 강제하는 현상 수정개요마이페이지에서 회원정보 수정하러 들어가서 저장하기 버튼을 누르면, 회원정보 수정을 강제하는 문제가 생겼다.우리는 닉네임을 유니크 값으로 유지하기로 결정했기 때문에, 중복 닉네임quaker.tistory.com 따라서 오늘은 TextField에서 공백 및 특수문자를 검사하는 로직을 구..
![[Ting / 트러블슈팅] 회원정보 수정 시 닉네임 변경을 강제하는 현상 수정](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FegvyVW%2FbtsMe33ZExY%2FAAAAAAAAAAAAAAAAAAAAAHx42cE-QJ-6G2uB6N4RaQMvwFJ0TYToABwvhyRQUeit%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DUbyu2n%252B7ekfvkjMAoU4PlGKwyQk%253D)
개요마이페이지에서 회원정보 수정하러 들어가서 저장하기 버튼을 누르면, 닉네임 수정을 강제하는 문제가 생겼다.우리는 닉네임을 유니크 값으로 유지하기로 결정했기 때문에, 중복 닉네임을 허용하지 않는다. 코드를 보자. Firebase를 사용하기 위한 API Serviceclass UserInfoService { static let shared = UserInfoService() private let db = Firestore.firestore() private init() {} // MARK: 중복 닉네임 확인 로직 func checkNicknameDuplicate(nickname: String, completion: @escaping (Bool) -> Void) { ..
import UIKitimport SnapKitimport Thenclass EditInfoVC: UIViewController { //MARK: - UI Components // 페이지 제목 private let label = UILabel().then { $0.text = "회원정보 수정" $0.textColor = .brownText $0.font = .boldSystemFont(ofSize: 20) } // 카드 뷰 private let cardView = UIView().then { $0.backgroundColor = .white $0.layer.cornerRadius = 12 $..
![[Ting] UISearchBar, Custom Navigation Bar 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FurF3p%2FbtsLV0mD2Bn%2FAAAAAAAAAAAAAAAAAAAAAC6VY0-4dtG2_7RHlqUkEv5BdusaOEN5ix4RiwZVruwZ%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DMc2%252B3PGO2H0k4R%252BmpV4SqN%252FWEOo%253D)
Project Ting작업내용SearchBar 구현 (클릭시 뷰 이동)Custom Navigation Bar 구현SearchBar 구현SearchBar UI 구현 let searchBar = UISearchBar().then { $0.placeholder = "검색" $0.searchBarStyle = .minimal $0.backgroundImage = UIImage() } override func viewDidLoad() { super.viewDidLoad() navigationBar() configureUI() searchBar.delegate = self // 서치바 del..

최종 프로젝트로개발자, 디자이너, 기획자 등의 협업 프로젝트 멤버나, 프로젝트를 매칭시키는 플랫폼, "Ting"을 기획하였다. 팀원 - 4명개발기간 - MVP 3주, 유저 피드백 & 개선 & 추가기능 구현 3주 MVP팀원 구인 게시판프로젝트 구직 게시판신고하기애플로그인검색 현재까지 올라온 대략적인 와이어 프레임. 리젝 방지로그인일단 최소 목표는 MVP를 최대한 빠르게 완성하는게 목표이기 때문에,로그인은 애플아이디 단독으로,어차피 소셜 로그인을 구현했을 때, 애플로그인은 반드시 구현해야한다.구현하지 않으면 -> 리젝 신고하기커뮤니티 기능이 있으면,이상한 글이나, 댓글같은건 무조건 신고할 수 있어야함즉 신고기능이 반드시 필요함.최소 MVP 구현을 위해, 일단 신고하면 신고자에게는 얼럿으로 알리기.추후 신고..