오늘은 최종 팀프로젝트가 업데이트를 마무리하고 거의 마무리 되어 KPT 회고를 남겨두려고 한다. ProjectProject : WanderBoardProject 일정 : 24.05.26 ~ 24.07.12Project 인원 : 5명Project 링크 : https://github.com/WanderBoard/WanderBoard앱스토어 링크 : https://apps.apple.com/kr/app/wanderboard/id6504566967사용 툴 : Notion, Figma, Github, Swift, SwiftUI, Xcode, FirebaseProject 설명여행 기록 기능 세부 페이지 기능 여행 기록 기능 (My Board) 로그인, 회원가입 기능 마이페이지 (환경설정)기술스택의존성 관리 도구SP..
이번에 TURTLE VOCA를 출시하면서 단어장에 사진을 넣을 수 있는 부분이 있는데 이 경우 이용자의 사진첩에 접근해야하기 때문에 이를 동의하는 과정이 꼭 필요하다. 이를 위해 이전에 구현되지 않았던 권한 안내를 구현하는 과정을 정리하고자 한다. 먼저 Info.plist파일에 안내가 나갈 문장을 넣어준다.Privacy - Photo Library Usage Description"단어장에 이미지를 추가하기 위해 사진 라이브러리에 접근하려고 합니다."이와 같이 사진처럼 값을 넣어주면 된다. 그 다음 PHPickerView가 등장하는 메서드에 권한 안내가 나오는 알럿이 뜨도록 구현해준다.func didSelectImage() { PHPhotoLibrary.requestAuthorization(for: ..
현재 원더보드에 올라와 있는 게시물을 선택하면 이미지를 불러오는 로딩 속도가 상당히 느려서 이용성이 저하되는 문제가 있었다. 이용자 피드백에서도 해당 내용이 거론되었고 내부적으로도 이 부분은 우선적으로 수정해야하는 의견이 많아 얼른 수정해야 한다.이 점을 개선하기 위해 Kingfisher를 활용해서 이미지 캐싱을 손보고 로딩 속도를 개선하고자 한다. 이미지 로딩 로직 수정먼저 이전의 저장되어있는 이미지를 불러오는 구현을 살펴보면func updateSelectedImages(with mediaItems: [Media]) { selectedImages.removeAll() let group = DispatchGroup() for media in mediaItems { ..
오늘은 SwiftUI를 활용해서 URLSession으로 API의 데이터를 가져오는 과정과 해당 데이터가 변동될때 자동으로 반영되도록 하는 Opserver Pattern을 적용해 보았다. 데이터 모델 정의먼저 데이터를 가질 모델을 정의해야한다. Hacker News API의 JSON 응답을 기반으로 Results , Post 구조의 모델을 만들었다.struct Results: Decodable { let hits: [Post]}struct Post: Decodable, Identifiable { var id: String { return objectID } let objectID: String let points: Int let title: String l..
SwiftUI 를 사용해서 개인 프로젝트를 시작하기 위해 기초적인 작업을 맞춰놨다. 일단 기본적으로 MVVM에서 데이터를 전달하는 방식과 RxSwift 를 활용하는 내용을 실전에 활용해 보기 위해 한번 테스트를 해봤다고 생각 하면서 진행했다. Model 및 ViewModel 생성struct Workout: Identifiable { var id = UUID() var name: String var date: Date var duration: TimeInterval var caloriesBurned: Double}운동 기록을 하기 위해 필요한 데이터를 struct로 생성하였다.import Foundationimport RxSwiftimport RxCocoaclass Workout..
SwiftUI에서 @ObservedObject와 @StateObject는 데이터 흐름을 관리하는 중요한 속성 래퍼이다. 각각의 개념 예시 그리고 차이점에 대해서 알아보자. @ObservedObject먼저 @ObservedObject는 외부에서 생성되고 관리되는 관찰 가능한 객체를 뷰에 연결하는데 사용된다. 이 객체는 ObservedObject 프로토콜을 준수해야 하며, @Published 속성이 변경될 때 즉 객체가 변경될 때 마다 뷰를 자동으로 업데이트 하도록 한다.class UserViewModel: ObservableObject { @Published var username: String = "" @Published var isLoggedIn: Bool = false}struct UserView..