
TabView로 뷰를 구현하는데 탭뷰에 연결된 뷰를 클릭하면 모든 탭의 뷰들이 초기화되는 걸 확인할 수 있었다.그래서 이걸 해결하고자 TabView의 렌더링 되는 과정과 LazyView를 사용하여 해결한 방법을 알아보자. 1️⃣ TabView 렌더링 TabView | Apple Developer DocumentationA view that switches between multiple child views using interactive user interface elements.developer.apple.com TabView는 기본적으로 모든 탭에 연결된 뷰를 미리 로드하고 초기화한다고 한다. 즉, 하나의 탭을 선택하더라도 실제로는 모든 탭의 뷰가 동시에 초기화된다는 것!!!! 그래서 하나의 탭 ..

📖 목차1. Clean Architecture를 도입하게 된 계기2. Clean Architecture Layer3. Clean Architecture 의존성 역전 1. Clean Architecture를 도입하게 된 계기 기존에 작성했던 코드의 문제점은 다음과 같다. 1️⃣ View와 ViewModel 상태 관리 문제 기존에 작성한 코드는 view와 viewModel이 너무 결합되어 있고, viewModel의 역할이 너무 많았다. 예를 들어, ViewModel의 역할은 다음과 같았다.View에 보여지는 데이터 관리API 요청 및 응답 처리비즈니스 로직 수행여러 책임을 ViewModel에서 처리하다 보니, ViewModel의 코드가 지나치게 복잡해졌다.특히, 하나의 View에서 여러 개의 ViewMo..

SwiftUI와 UIKit은 iOS 애플리케이션을 개발하는 데 있어 각각 다른 철학과 접근 방식을 가지고 있다. UIKit에서는 Auto Layout이 UI 개발의 핵심이었다. Auto Layout은 제약 조건을 사용하여 뷰의 크기와 위치를 동적으로 설정하고 다양한 화면 크기와 기기에서 레이아웃을 유연하게 구성하는 방식이었다. Auto Layout은 특히 스토리보드와 코드로 제약 조건을 설정하는 데 있어 기본 중의 기본이라 할 수 있다.UIKit에서 Auto Layout은 복잡한 레이아웃을 처리하는 데 매우 유용했지만, 그만큼 제약 조건을 설정하는 과정이 복잡해졌다. 제약 조건을 일일이 정의해야 하는 번거로움 때문에 유지보수도 어렵고, 직관적인 UI 개발이 쉽지 않은 경우도 있었다. SwiftUI는 선언..

프로젝트를 진행하면서 iOS 개발자만 시뮬레이터와 기기로 테스트하다 보니 이슈를 발견하는 데 한계가 많았다.그래서 정식 앱 출시 전에 팀원들도 직접 사용해 보면서 테스트할 수 있게 베타 버전을 배포해야겠다고 생각했고, 결국 TestFlight를 사용하게 됐다. TestFlight를 사용하면 프로젝트를 같이 진행하는 팀원들도 바로 테스트할 수 있고, 다양한 환경에서 실제로 앱이 어떻게 작동하는지 확인할 수 있다. TestFlight 사용법에 대해 알아보자!! 1. App Store Connect에 앱 만들기 https://appstoreconnect.apple.com/ 홈페이지에서 신규 앱을 하나 만들어준다. 아래의 항목들을 모두 입력해 주고 SKU는 App Store에 보이지 않는 앱의 고유한 ID라고..

iOS 프로젝트를 진행하면서 데이터 손상에 대한 위험을 최소화하기 위해, 테스트 서버와 릴리즈 서버를 분리하여 운영하기로 결정했다. 이를 통해 개발 환경에서의 실수를 릴리즈 환경에 영향을 주지 않도록 하고, 안정적인 배포를 보장할 수 있다. 이러한 환경 분리를 위해 개발용, 릴리즈에 따라 Build 환경을 구축하는 방법에 대해 알아보자. 1. Configuration Setting File 생성 후 설정 1️⃣ info.plist 파일 사용 Project -> Build Settings에서 + 버튼을 눌러 User-Defined setting으로 추가 configuration별로 세팅할 수 있는 옵션을 생성한다. 생성된 곳에 DEPLOY_PHASE를 key 값으로 넣고 Debug와 Release를..

구글 로그인을 진행하는데 Nonce 데이터를 추가하려고 한다. [SwiftUI] 구글 로그인 구현구글 로그인 구현 방법을 구글에서 정리해준 걸 참고하여 작성하였다. iOS 및 macOS용 Google 로그인 시작하기 | Authentication | Google for Developers중요: 2024년 5월 1일부터 Apple에서는 GoogleSignIn-iOSsteelbeartaeng2.tistory.com 이전에 만들었던 [카카오에 nonce 추가]를 보면 알 수 있듯이 직접 nonce를 만들어서 kakao에서 제공하는 로그인 요청의 nonce 파라미터에 넣어 보냈다. [SwiftUI] - Kakao ID 토큰에 nonce 추가프로젝트 진행 중 카카오 로그인 보안 강화를 위해 non..

프로젝트를 진행하던 중 presigned url을 적용해서 이미지 저장을 하자고 결정하였다.그 이유는 목차에 따라 설명하겠다. 📖 목차1. presigned url이 무엇인가2. presigned url 발급3. presigned url 저장 1. presigned url이 무엇인가 사용자가 앱 사용 중 이미지를 저장하고 싶은 경우가 있을 것이다.그럼 우린 그 이미지를 어디에 저장하는게 좋을까? ✏️ 어디에 이미지를 저장할 것인가 1️⃣ Server앱이 동작하는 서버에 이미지를 저장하는 방법이다.이미지를 서버에 저장하기 때문에, 다른 외부 스토리지와 통신할 필요가 없어서 네트워크 대역폭을 절약할 수 있다. 서버에 큰 용량을 가지는 이미지를 저장하려고 하면, 사진을 저장하기 위한 대역폭 또한 제공해야..

리스트 항목에서 리스트 안의 데이터가 아닌 셀 전체 너비를 터치영역으로 설정하고 싶을 때가 있다.예제를 통해 설정하는 방법을 알아보자! 데이터 모델 선언 리스트의 각 항목들의 데이터 모델을 정의해 준다.항목 클릭 여부를 나타내는 click과 항목에 표시될 text를 넣어주었다. struct dataModel: Identifiable { var id: Int let text: String var click: Bool} 뷰 만들기 먼저 리스트에 들어갈 각 항목들을 dataArr 배열에 초기화해 준다.struct ContentView: View { @State private var dataArr: [dataModel] = [ dataModel(id: 1, text: "가..