[SwiftUI] 앱에 Face ID 잠금 기능 적용하기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 제가 공부용으로 진행하고 있는 일기앱 프로젝트에서 Face ID 잠금 기능을 도입해봤는데 도입 과정을 정리해보려고 합니다. 그럼 바로 시작하겠습니다! Face ID 기능 설계 개요앱 실행 시 사용자의 얼굴 인증을 통해 잠금을 해제하고, 인증 성공 시에만 홈 화면(HomeView)으로 진입할 수 있도록 구현하였습니다. 구조는 아래처럼 구현하였습니다.앱 실행 → 잠금화면(Face ID 요청) → 인증 성공 → HomeView 진입 ↘ 인증 실패 시 에러 표시이 기능을 구현하기 위해서 크게 3가지를 구현했습니다.Face ID 인증 로직을 담은 AuthViewModel인증 인터페이스를 담당하..
[SwiftUI] SwiftUI 상태 동기화 트러블슈팅
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 제가 프로젝트를 진행하면서 발생한 문제와 해결 과정을 공유해보려고 합니다. 그럼 바로 시작하겠습니다! 프로젝트 소개우선 프로젝트에 대해서 간단하게 소개해보자면 인생네컷처럼 내 앨범에서 사진을 골라서 네 컷 사진을 만들 수 있는 앱을 개발하고 있었습니다. 사용자가 최대 4장의 사진을 선택하고, 원하는 사진을 삭제한 후, 새로운 사진을 추가할 수 있는 기능도 추가로 구현했습니다. 기본 구조는 아래처럼 설계를 했습니다.ContentView: 사진 선택 및 관리(네컷 이미지를 만드는 View)FourCutFrameModel: 프레임 데이터 모델PhotoModel: 개별 사진 데이터문제 발견 과정앱의 기본 기능은 완성하였지만 기능을 더 확장하고 싶다는 생각이 들었..
[SwiftUI] CADisplayLink를 활용한 부드러운 ProgressView 애니메이션 구현 트러블슈팅
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 서론애플리케이션에서 진행률을 시각적으로 표현할 때, SwiftUI에서는 기본으로 제공하는 기본 컴포넌트인 ProgressView를 사용해서 해당 UI를 구현하게 됩니다. 하지만 이러한 기본 애니메이션 방식으로는 시간 기반으로 자연스럽게 진행되는 부드러운 애니메이션을 구현하기 어렵습니다. 이번 포스팅에서는 SwiftUI의 애니메이션 한계로 겪었던 진행률 애니메이션이 끊겨 보이는 문제를 분석하고, UIkit의 CADisplayLink를 활용하여 해결한 경험에 대해서 정리를 해보려고 합니다. 문제 상황처음에 구현하고자 했던 기능은 진행률이 0%에서 100%까지 7초 동안 자연스럽게 증가하게 하는 것이었습니다. 기본적으로 SwiftUI에서는 다음과 같은 방식으로 애니메이션을 줄 ..
[SwiftUI] NavigationStack 사용 시 화면 전환 안 되는 문제와 title 깨짐 문제 트러블슈팅
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 오늘은 SwiftUI로 앱을 만들던 중 겪은 NavigationStack 관련 트러블슈팅 경험을 작성해보려고 합니다. 아기 울음소리를 녹음하고 아기 상태를 분석해주는 기능을 만들면서, 화면전환이 제대로 되지 않거나 navigation title 위치가 깨지는 이상한 버그를 마주했습니다. 구현 구조 요약우선 제가 구현한 기능의 주요 흐름은 아래와 같습니다.VoiceRecordView – 분석 시작 화면CryAnalysisProcessingView – 울음소리를 녹음하고 분석 진행CryAnalysisResultView – 분석 결과 화면CryAnalysisResultListView – 분석 기록을 모아보는 리스트 화면SwiftUI의 NavigationStack을 활용해서 각..
[SwiftUI] SwiftUI로 카메라 기능 구현하기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵 이번 포스팅에서는 SwiftUI와 AVFoundation을 사용해서 마치 인생네컷 포토 부스처럼 자동으로 촬영이 되는 카메라 기능을 만드는 법을 정리해보려고 합니다.  그럼 바로 시작하겠습니다! 기능 정리우선 카메라 앱을 만들기 전에 어떤 기능이 필요한지 먼저 정리를 해보겠습니다. 제가 만드는 앱에서는 크게 3가지 기능이 꼭 필요했습니다.자동 5초 카운트 다운 후 사진 촬영촬영된 사진 화면에 띄우기최대 4장의 사진 자동 촬영이렇게 3가지 입니다. 카메라 모델 구현먼저, AVFoundation을 사용해서 카메라 기능을 관리할 CameraModel 클래스를 만들어 보겠습니다.import AVFoundationimport SwiftUI@Observableclass CameraM..
[SwiftUI] ProgressView 생성하기
·
Apple/SwiftUI
안녕하세요! 피피아노입니다 🎵  이번 포스팅에서는 SwiftUI에서 작업 완료까지의 진행률을 보여줄 수 있는 ProgressView를 만드는 방법에 대해서 정리를 해보려고 합니다. 그럼 바로 시작하겠습니다! ProgressView란?먼저 개념부터 짚고 넘어가겠습니다.  ProgressView는 이름에서 유추할 수 있듯이 앱 내에서 작업이 진행되고 있는 정도를 시각적으로 표시하는 View입니다. 이러한 ProgressView가 필요한 순간은 여러가지가 있겠지만 대표적인 예시로는 파일 다운로드 진행 상태를 앱에 표시하거나, 작업이 진행 중이지만 얼마나 오래 걸릴지 알 수 없을 때 등 다양한 상황에서 사용됩니다. ProgressView 스타일SwiftUI에서 ProgressView 스타일은 선형 스타일, 원..