
swiftUI에서 텍스트에 따라 너비와 높이가 동적으로 조절되어야 하는 경우가 많다.그래서 이번엔 텍스트에 따라 동적으로 너비와 높이가 조절되는 UI를 구현해보고자 한다. 1. 간단한 UI 구현 동적 UI를 적용하기 전에 간단하게 UI를 구현해 보자. struct ContentView: View { let content: String = "안녕하세요" let maxWidth: CGFloat = 151 var body: some View { ZStack{ Rectangle() .fill(.blue) .border(.black) .cornerRadius(6) ..
UnitTest를 공부하던 중 test코드를 어떻게 작성해야하는지 감이 안 잡혔다. 코드의 구조를 명확하게 파악할 수 있도록 구현하고 싶은데 이 부분이 어려웠다. 그러던 중 테스트 코드를 표현하는 방식인 Given-When-Then 패턴에 대해 접하게 되었다.이 패턴은 "어떤 상황에서 특정 동작을 수행하면 예상되는 결과는 무엇인가?"라는 방식으로 분리하여, 테스트 코드를 작성하도록 돕는다고 한다. 이번 포스팅에서 Given-When-Then 패턴이 무엇인지 이해하고 이해한 걸 바탕으로 간단한 Unit Test 예제에 적용해보자. 1. Given-When-Then Given-When-Then은 테스트 코드의 논리적인 흐름을 더 명확하게 표현하는 방법이다. 1️⃣ Given: 초기 상태 설정 (테스트 ..

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..