[TIL / 25.03.07] IBOutlet이 모두 nil이 되는 현상, 캠프 1주차 회고
·
내일배움캠프
1. 문제 해결1.1 상황코드베이스 UI인 내 페이지에서 스토리보드 기반 페이지인 팀원분의 페이지로 네비게이션 이동해야 했는데, 모든 IBOutlet이 런타임에 nil로 잡히던 현상이 있었다. 해당 문제만 보면 기존 가끔 생겼던 스토리보드 단골 오류인 연결에 무언가 버그가 생겼거니 하며 모든 연결을 끊고 다시 연결하는 등 이런저런 시도를 해보며 print 함수로 단계별로 nil인지 찍어봤다. 달라지는 건 없었고 모든 컴포넌트에 대해 nil이라는 답이 돌아왔다. 1.2 해결 방안스토리보드로 정의된 UI에 대한 뷰, 페이지에 연결하려면 그냥 코드 베이스에서 쓰던 방식대로 하면 안된다. let vc = ViewController(); self.navigationController?.pushViewControl..
[TIL / 25.03.06] 컨플릭트 지옥에 갇히게 되,,, (feat. project.pbxproj)
·
Git, Github
어제까지만 해도 서로 맞지 않는 Main.storyboard에 대한 Conflict를 해결하느라 땀 좀 뺐는데,,저거 말고도 사실 꾸준히 괴롭혀오는 파일이 있음,, project.pbxproj라는 파일인데 project.pbxproj란?- Xcode를 켜고 프로젝트를 열면 좌측 네비게이터를 보면 파일들이 유저가 만든대로 정리가 되어있다. 이 파일들을 누르면 해당 파일의 내용을 에디터로 수정할 수 있게 해주는데, 이는 해당 파일(project.pbxproj)이 프로젝트의 모든 구조적 정보를 저장해놓는 데이터베이스 역할을 하기 때문이다. 파일 참조 관리, 빌드 설정, 단계, 그룹 구조, 의존성 관리 등 전반적인 중요한 설정에 관한 정보가 담겨있다. 이 파일이 Xcode 프로젝트 파일(.xcodeproj) 패..
[TIL / 25.03.05] 이미지 슬라이더 + 커스텀 인디케이터
·
iOS/Swift
1. 구현한 것 어느 팀원을 선택하면 해당 팀원의 상세 페이지를 보여주는 화면을 제작하도록 했다.해당 뷰에서 필요한 기술이 뭐가 있을지 만들기 전 생각해봤는데 1. 이미지 슬라이더 2. 그에 맞는 인디케이터 3. 칩 모양은 컬렉션뷰로 4. 화면 크기 생각해서 일부만 스크롤뷰로 구현이정도를 해야했고, 이 포스트에선 가장 애먹었던 부분인 커스텀 슬라이더와 인디케이터에 대해 다루겠다. 이미지 슬라이더 자체는 컨셉이 컬렉션뷰고 화면 꽉채우고 페이지 가능하게 해야 하는 부분이라 썩 어렵지만은 않아서 일단 패스하고, 저 상단에 인디케이터는 보통 라이브러리나 기본 제공되는 형태가 점(dot)으로 되어있기에 커스텀할 필요가 있었다. 2. 구현 내용우선 이런 커스텀 뷰 자체를 직접 만드는 능력이 아직 부족해 클로드에게 ..
[TIL / 25.03.04] 팀원분들을 위한 Git, Github 튜토리얼
·
Git, Github
1. GitGit이란 컴퓨터 파일의 변경 사항을 추적하고 파일들의 작업을 조율하는 분산 버전 관리 시스템입니다.변경 관리, 브랜치, 머지 등 다양한 기능을 제공하여 소스 코드를 관리하는 데에 주로 사용됩니다. 2. GithubGithub는 Git 저장소를 호스팅하는 클라우드 서비스를 말합니다.Pull Request, Issue, Projects 등 협업 기능을 제공하고, 이 깃허브를 통해 코드 리뷰 및 문서화 기능을 이용할 수 있습니다. 3. 자주 쓰는 용어Repository 레포지토리: 저장소로, 프로젝트 파일과 해당 파일의 변경 이력이 저장되는 곳이다.로컬 저장소, 원격 저장소 두 종류가 있다.Commit 커밋: 파일 또는 디렉토리의 변경 사항을 로컬 저장소에 기록한다. 커밋은 변경 내용, 작성자, ..
[TIL / 25.03.03] 소개팀 프로젝트 개발 시작 및 리뷰
·
내일배움캠프
2월 동안 진행된 사전캠프 기간이 끝나고 오늘부터 본캠프 기간에 들어왔다. 맨 처음 OT가 진행되고 팀 편성 및 팀 프로젝트를 시작했는데, 우리 팀을 소개하는 어플을 제작하게 되었다.팀에서는 조장을 맡게 되었는데 다들 열심히 해주셔서 부담이 많이 줄었고 너무 좋았던게, 팀원분들의 시너지가 정말 좋다. 스타터 반이라 다들 iOS 개발엔 초심자인 입장이지만, 두 분 중 한 분은 정말 아이디어 뱅크라 다채로운 기획이 가능해졌고 그 기획에 있어 나는 조금 신중히 전후 시나리오를 생각하며 조심스럽게 다듬고 고민할 때 다른 한 분께서 그 고민을 빠르게 끝내도록 도움을 주셨다.기획적으로 일정상 2일 정도를 잡은 것 같은데, 사실상 모든 기획이 7시간만에 이루어지고 와이어프레임까지 완성되었다. 소개팀우선 우리 팀을 소..
[TIL / 25.02.25] 자료구조, 메모리 구조, ARC에 대해 간략하게!
·
iOS/Swift
1. 자료구조1.1 배열(Array)데이터를 순차적으로 저장하는 자료구조인덱스를 사용해 특정 요소에 접근특징 : 빠른 조회 (O(1)), 삽입/삭제 시 성능 저하(O(n)).예시var numbers = [1, 2, 3, 4, 5]numbers.append(6)print(numbers) // [1, 2, 3, 4, 5, 6] 시간 복잡도를 연관지어 보는건 처음이라 왜 O(n)이 되는지 알아봤는데 삽입 혹은 삭제 시 최악의 경우 그 갯수만큼 값을 밀어야 하거나 당겨와야하기에 O(n)이 된다고 한다. 1.2 큐(Queue)선입선출(FIFO, First In First Out) 구조.데이터를 한쪽에서 삽입하고, 반대쪽에서 제거.사용 사례: 프린터 작업 대기열, BFS 탐색.예시struct Queue { priv..
[TIL / 25.02.21] SkeletonView 적용 및 생명주기 관련 문제 해결
·
iOS/Swift
1. 오늘 진행한 작업 전체적으로 데이터가 로드되어 나오는 페이지에 대해선 스켈레톤뷰를 입히기로 결정했다. SkeletonView란 데이터가 로드 되는 등 페이지 로딩 상황에 애니메이션을 제공함으로써 사용자에게 진행되고 있음을 느끼게 해줄 수 있도록 하는 뷰다.  이를 구현하려면 SkeletonView라는 라이브러리를 설치해 사용해야 한다. 사용법을 간단히 말하자면,import SkeletonView 를 통해 스켈레톤뷰를 사용하는 모듈에 임포트해주고스켈레톤뷰를 적용하고자 하는 뷰에 사용가능하도록 설정 -> 보여주고자 하는 타이밍에 show -> 데이터 로드 완료되거나 스켈레톤 뷰를 끄고 싶을 때 hide2. 겪었던 문제와 해결 테이블뷰의 모든 요소에 스켈레톤뷰를 적용했음에도 헤더 영역에는 적용되지 않는 ..
[TIL / 25.02.17] 뷰 맨 앞으로 보내기
·
iOS/Swift
1. 오늘 진행한 작업기존 사이드메뉴를 보여주다가 왜 Safe Area까지 뻗어나가지 않는지에 대해 물어보길래, 타 어플들도 찾아보면서 어떤지 보았는데 대다수가 Safe Area 영역까지 뻗어있는 것을 확인했다. 디자인 나온대로 구현하다가 safeArea를 뚫지 않는 게 당연하다고 생각하고 있었는데, 아니었다. 결론적으로, 이 뚫려있는 사이드메뉴를 구현하면서 기존엔 홈에서만 적용되어있던 사이드메뉴를 지난 포스트에서 올렸던 탭바가 들어가는 뷰에서도 적용해보았다.  2. 겪었던 문제와 해결 2.1첫번째로 사이드메뉴가 자꾸 safeArea를 무시하지 못하는 상황이었는데, 제약조건으로도 safeAreaLayoutGuide.snp.topMargin으로 해보라는 의견도 있고 여러 의견 모두 시도해보았는데 되지 않고..
[TIL / 25.02.14] 열거형 Enum을 이용한 메뉴 구성
·
iOS/Swift
1. 오늘 진행한 작업아직 디자인이 나오지 않은 부분인데, 사이드메뉴에서 로그인이 되지 않은 게스트 상태일 때 어떻게 띄울지도 구현을 해야했다.로그인이 되지 않았다면 기존 포스트에서 나오던 기능들의 대부분을 쓸 수 없기에 테이블 뷰 내 cellForRowAt 구성도 바꿔주어야 했는데, 이 로그인 여부는 프로젝트에서 jwt를 쓰고 있기에 액세스 토큰의 존재 여부로 확인하기로 했다. 2. 겪었던 문제와 해결 로그인을 했을땐 메뉴가 네 개, 로그인을 하지 않았을땐 메뉴가 한 개인데 이를 어떻게 Delegate, DataSource 측에서 관리시켜주지? 가 가장 큰 문제였다.이런 상태에 따라서 달라지는 테이블뷰는 처음 구현해보는데 그냥 메뉴의 이름으로 구분을 할 수는 없을까? 하다가 나온 결론이 enum 타입이..
[TIL / 25.02.13] 다중 섹션 및 헤더가 포함된 사이드 메뉴 구현
·
iOS/Swift
1. 오늘 진행한 작업지난 포스트에서 사이드메뉴에 대한 토대를 마련했다면, 이번 포스트에선 그 안에 들어가는 메뉴들에 대한 UI를 구현해보았다.화면에서 보았듯, 포인트를 이렇게 잡았다. 1. 일정 UI 구조의 반복되는 컴포넌트가 두 형태를 가짐(내 블로그 같은 Label 위주의 메뉴, Developers 하단에 있는 여러 컴포넌트가 종합되어있는 카드 셀)2. 메뉴의 개수 혹은 Developers의 멤버 수가 많아질수록 전체 뷰의 높이는 더 커져야 함.3. 스크롤할 수 있어야 함. 제일 먼저 스크롤할 수 있어야 하는 부분 때문에, 상위 ScrollView를 두고 안에 컴포넌트들을 배치할까 했으나 동적 높이를 컨트롤하기엔 효율적이지 못함 -> 스크롤뷰를 상속받고 내부 요소 주입만 해주면 알아서 높이 지정이 ..