Devlog👩🏻‍💻/iOS

CoreLocation을 사용해서 현재 위치 데이터를 받아와보자 📍 1. CoreLocation 설정 (현재 위치 받아오기)CoreLocation 프레임워크를 사용해서 사용자의 위치 정보를 가져올 수 있다. ✅ Info.plist 설정 위치 권한 요청을 위한 키를 추가해야 한다.NSLocationWhenInUseUsageDescription앱 사용 중 현재 위치를 확인하기 위해 필요합니다.NSLocationAlwaysUsageDescription항상 현재 위치를 확인하기 위해 필요합니다. 2. LocationManager 클래스 생성위치 정보를 관리하는 클래스를 만들어 현재 위치를 불러오기.import CoreLocationimport Combineclass LocationManager: NSObjec..
Alamofire와 Combine의 조합으로 API 요청하는 방식을 알아보자. 1. Alamofire + Combine의 조합이란?Alamofire: 네트워크 요청을 간편하게 해주는 라이브러리.Combine: 비동기 데이터를 스트림으로 처리하는 프레임워크.이 둘을 조합하면 네트워크 요청을 더 깔끔하고 선언적으로 처리할 수 있다.즉, 네트워크 요청 → 응답 처리 → UI 업데이트 흐름이 자연스럽게 이어진다. 2. 기본적인 Alamofire + Combine 패턴Alamofire는 publishDecodable이라는 메서드를 제공해서 Combine과 쉽게 연동할 수 있다. ✅ Step 1. APIManager에서 Publisher 반환// Combine으로 API 요청 (Publisher 반환)func fe..
Combine을 통한 데이터 바인딩ViewModel에서 @Published와 sink, assign을 활용해 뷰에 데이터를 구독하고 실시간으로 UI에 반영할 수 있다. @Published, sink, assign의 사용 방법에 대해 알아보자. 1. @Published:ObservableObject 프로토콜을 채택한 클래스에서 사용.값이 변경될 때마다 뷰(구독자)에게 알림을 보내 UI를 자동으로 업데이트.@Published var temperature: Double = 0.0 2. sink(receiveCompletion:receiveValue:):퍼블리셔에서 값을 받을 때 사용하는 구독 메서드.네트워크 요청이 성공하거나 실패할 때 동작을 정의.WeatherAPIManager.shared.fetchCurr..
컬렉션뷰에서 스크롤을 이용한 페이징(Pagination)하는 방법을 정리해보자!테이블뷰와 컬렉션뷰에는 스크롤이 내장되어 있어 UIScrollDelegate를 사용할 수 있다. 원하는 뷰컨트롤러에 페이지네이션을 구현하기 위해 우선 스크롤 이벤트를 감지하는 메서드를 추가하여 사용자가 컬렉션뷰의 아래쪽에 도달했을 때 다음 페이지를 가져오도록 했다. 1. UICollectionViewDelegate - scrollViewDidScroll// MARK: - UICollectionViewDelegateextension ExerciseAlbumViewController: UICollectionViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView)..
뷰에 애니메이션을 주기 위해 원하는 UIView의 너비를 시간이 지남에 따라 줄어들도록 구현하고 있었는데스냅킷의 제약조건에 관한 크래시가 발생했다.Updated constraint could not find existing matching constraint to update 다음과 같은 크래시가 나는 걸 확인했다.  초기 UIView의 제약조건은 다음과 같이 설정했다.progressBar.snp.makeConstraints { $0.top.leading.bottom.equalToSuperview() $0.width.equalToSuperview() }▶ 뷰의 너비를 equalToSuperview()로 설정 private func updateProgressBar() { ..
[UIKeyboardTaskQueue lockWhenReadyForMainThread] timeout waiting for task on queue시뮬레이터에서 서치바나 텍스트필드를 사용할 때 키보드가 안 뜨고 위와 같은 타임아웃 에러가 뜨는 경우가 있습니다. 시뮬레이터가 멈춰서 당황했는데 시뮬레이터에서 종종 이런 버그가 난다고 합니다..!!시간이 지나면 해결될 수도 있고 키보드 설정을 바꿔서 해결할 수도 있습니다. Simulator에서 Connect Hardware Keyboard를 선택하게 되면 내 컴퓨터의 하드웨어 키보드를 사용하게 됩니다.위처럼 I/O의 Keyboard 설정에 Connect Hardware Keyboard이 체크되어 있다면 해제합니다.  Connect Hardware Keyboar..
코드베이스로 작업을 하기 위한 초기세팅을 먼저 정리해 볼게요! Storyboard 삭제 세팅1. Main.storyboard 스토리보드 파일 삭제 - > Move to Trash 메인 스토리보드를 제거해 주세요 2. Project TARGETS > Build Settings > Main Storyboard 삭제프로젝트의 타겟으로 이동해서 메인 스토리보드도 삭제해 줍니다.  3. Info.plist > Storyboard Name > Main위의 경로로 이동해서 스토리보드 키를 - 버튼 눌러서 삭제합니다. 4. SceneDelegate 수정하기⭐️⭐️이제 어떤 뷰컨트롤러로 시작할지 지정해줘야 합니다!씬델리게이트에서 scene() 메서드 안에 아래 코드로 내용을 수정해 줍니다.guard let windowS..
레이아웃을 잡을 때 가끔 헷갈릴 때가 있는데 참고하기 위한 포스팅입니다!💡Content Hugging Prioritycontent Hugging Priority "늘어나는 것에 대한 저항"→ 우선순위 높을 수록 크기 유지, 우선순위 낮으면 크기 늘어남 공간이 남으면 누가 더 늘어나야 하는지에 대한 우선순위!Hugging의 우선순위가 크다 = 내 크기를 유지하는데 더 큰 우선순위가 있다. 즉 더 우선 순위가 낮은 요소는 늘어나게 된다.이 속성은 뷰의 크기를 얼마나 확장할 것인지에 대한 우선순위를 정의하며, 우선순위가 높을수록 뷰는 크기를 늘리지 않으려고 시도한다. Horizontal Content Hugging Priority : 뷰의 가로 방향 크기 확장에 대한 우선순위Vertical Content H..
동기와 비동기에 대해 들었던 세션 내용을 더 딥하게 이해해보려 한다!동기와 비동기 개념에 대해 공부해보자✍🏻 GCD - Grand Central Dispatch 1. 쓰레드 (Thread)우선 쓰레드란..??!컴퓨터 프로그램을 실행하는데 사용되는 가장 작은 실행 단위를 의미한다. 쓰레드는 프로세스 내에서 실행되는 작은 단위의 실행 흐름이다.각각의 쓰레드는 독립적으로 실행될 수 있으며, 여러 쓰레드가 동시에 작업을 수행할 수 있다.이러한 다중 쓰레드 작업은 시스템 자원을 효율적으로 활용하고, 병렬적으로 작업을 처리할 수 있도록 도와준다! 이러한 내용이 무슨 뜻이냐!"쓰레드 👉 동시에 일을 할 수 있는 것의 단위" 정도로만 기억하면 된다. 메인 쓰레드 이외의 쓰레드가 필요한 이유는 뭘까??메인 스레드는 ..
메모리우선 코어 데이터를 공부하기 전에 Swift의 메모리에 대해 잠시 정리해보자면프로그램은 실행되기 위해 메모리에 올라온다. 또한 실행 중인 프로그램은 프로세스라고 부른다. 운영체제(OS)는 메모리(RAM)에 이 프로그램을 위한 공간을 할당해준다.  메모리의 속도등을 기준으로 티어가 나누어져 있다. 위의 사진에선 위로 갈수록 비싸다.앱을 설치할 때 저장되는 곳은 Disk 이고 실행될 때는 메모리에 잠깐 올라간다.우리가 흔히 말하는 메모리는 DRAM(Dynamic Random Access Memory) 을 가리킨다. 이때 메모리의 특징이 있다. 그것은 바로 메모리의 데이터는 사라진다는 점이다.프로그램은 실행될 때 메모리에 영역이 할당되고, 해당 영역으로 올라온다.프로세스가 종료되면 메모리에서 해제되고, ..
yujjne
'Devlog👩🏻‍💻/iOS' 카테고리의 글 목록