Tuist 시작하기, 프레임워크와 Demo앱 만들기

Tuist란? Tuist는 Xcode 프로젝트와 워크스페이스를 코드 기반으로 관리하는 오픈 소스 도구입니다. 이를 사용하면 대규모 프로젝트에서도 효율적으로 파일, 모듈, 의존성을 관리할 수 있습니다. 주요 장점으로는 반복적인 수작업을 줄일 수 있고, 모듈화를 간단하게 관리할 수 있습니다. 협업 시 설정 충돌을 최소화합니다. Tuist로 프로젝트 초기화 Tuist를 사용하려면 먼저 초기화를 진행해야 합니다. Tuist를 다운로드 받았다는 가정하에 진행하도록 하겠습니다. 다음 … Read more

Swift) Combine 오퍼레이터 활용해보기

Combine은 iOS 개발자들에게 데이터 스트림을 처리하고 비동기 이벤트를 관리하는데 매우 강력한 도구를 제공합니다. 특히 SwiftUI와 함께 사용하면 더욱 직관적이고 효율적인 코드 작성을 할 수 있습니다. 이 글에서는 Combine의 대표적인 오퍼레이터를 정리하고, 활용 예제와 함께 설명할 예정입니다. 여기서 데이터 흐름은 퍼블리셔와 서브스크라이버의 형태로 처리되는데 쉽게 말해, 어떤 데이터가 발생하면 그걸 듣고 처리할 수 있는 구조입니다. 대표적인 … Read more

SwiftUI에서 UIKit 통합하기: 사용 사례와 구현 방법

SwiftUI는 iOS 개발자들에게 선언적 UI 작성 방식을 제공하며, 코드의 간결함과 재사용성을 극대화합니다. 그러나 UIKit은 여전히 강력한 기능과 제어력을 제공합니다. 많은 프로젝트에서 SwiftUI와 UIKit의 조화로운 통합이 필요합니다. 이 글에서는 SwiftUI에서 UIKit을 사용하는 방법을 중심으로, 대표적인 사용 사례와 구현 방법을 설명하겠습니다. SwiftUI와 UIKit을 통합해야 하는 이유 SwiftUI는 강력하지만, 여전히 UIKit에 의존해야 하는 경우가 있습니다. 다음은 UIKit을 통합해야 하는 … Read more

UIKit에서 SwiftUI를 사용하는 방법: 통합 가이드

SwiftUI는 선언적 문법과 뛰어난 성능으로 iOS 개발자 사이에서 빠르게 인기를 얻고 있습니다. 그러나 기존 UIKit 프로젝트에 SwiftUI를 통합하려면 몇 가지 기술적인 이해가 필요합니다. 1. UIKit과 SwiftUI의 차이점과 통합의 이점 UIKit은 Imperative(명령형) 스타일로, 개발자가 UI의 세부 동작을 하나하나 지정해야 합니다. 반면, SwiftUI는 Declarative(선언형) 스타일로 UI 구성과 데이터 흐름을 간결하게 관리할 수 있습니다. SwiftUI를 UIKit에 통합해야 하는 이유 … Read more

Swift) 강한 참조와 순환 참조, weak self와 unowned self의 차이

1. 참조 타입과 메모리 관리의 기초 2. 순환 참조와 메모리 누수 3. weak self와 unowned self 순환 참조를 방지하기 위해 Swift에서는 weak와 unowned 키워드를 제공합니다. 두 키워드는 강한 참조 대신 약한 참조를 사용하도록 설정합니다. 3.1 weak self 3.2 unowned self 4. weak self와 unowned self의 선택 기준 5. 강한 참조 방지 패턴 6. 순환 참조 해결을 위한 실전 팁

SwiftUI) Custom Tab View 만들기(iOS 15)

SwiftUI로 UI를 구성할 때 기본 TabView는 손쉽게 사용할 수 있지만, 기능을 커스터마이징하기는 어려운 경우가 많았습니다. 특히 iOS 17, 18을 기준으로 뷰를 구성한 예제를 보면 감탄이 나오는 수준이었지만 iOS 15에서는 아직 제한 사항이 존재했습니다. 이번 글에서는 SwiftUI에서 TabView를 활용해 커스템 텝 뷰를 구현하는 방법을 설명하고자 합니다. TabViewStyle, ScrollViewReader, Namespace 등을 사용해 UI를 좀 더 풍성하게 만들어보고자 … Read more

SwiftUI) @Namespace 란?

UIKit에서 SwifUI를 주 프레임워크로 사용하다보면 UI 제작에 편리함이 많지만 반대로 어려움도 많았습니다. 그 중 하나가 바로 애니메니션이었습니다. SwiftUI에서 애니메이션은 쉽다면 쉽다고 할 수 있지만 제가 느끼는 어려움은 전환에 대한 어려움이었습니다. 그래서 해당 키워드를 알게되었고 이 속성에 대해서 공부해보고자 합니다. SwiftUI에서 애니메이션을 효과적으로 제어하기 위해서는 @Namespace 속성 래퍼를 이해하는 것이 매우 중요합니다. 특히, matchedGeometryEffect와 함께 사용하면 … Read more

Swift) @discardableResult란?

1. @discardableResult란? @discardableResult는 Swift에서 메서드나 함수의 반환값을 무시할 수 있도록 해주는 속성입니다. 영어 뜻 그대로 버릴 수 있는 결과라는 의미를 가집니다. 즉 메서드의 반환값에 있어서 결과를 버릴 수 있는 설정을 도와주는 것이라고 할 수 있습니다. Apple 공식문서에서도 결과를 사용하지 않고 값을 반환하는 함수나 메서드가 호출될 떄 컴파일러 경고가 표시되지 않도록 하려면 이 특성을 함수나 메서드에 … Read more

SwiftUI) onChange, onRecieve 차이

최근 개발을 하다 이슈 사항이 들어왔었습니다. 디버깅 결과 이벤트를 받지 못해 값을 업데이트하지 못하고 있었습니다. 그리고 그 원인은 onChange 메서드였습니다. 그래서 이번에 다시 두 메서드를 공부해볼 예정입니다. SwiftUI에서 상태 변화와 외부 이벤트를 감지하는 것은 매우 중요합니다. 이 메서드는 각각 상태 변화와 Combine의 Publisher를 통해 이벤트를 감지합니다. onChange 메서드 onChange는 SwiftUI 내부 상태가 변경될 때마다 지정된 … Read more

Swift) map, flatMap, compactMap 차이점 알아보기

swift에서 map, flatMap, compacMap은 컬렉션이나 옵셔널 데이터를 다룰 떄 매우 유용한 고차 함수입니다. 이 메서들을 사용함에 있어 아직 헷갈려하는 감이 있어 다시 한번 정리하고자 이 글을 쓰게 되었습니다. 이 세 가지 메서드의 차이점을 예시와 함께 알아보고자 합니다. 1. map 메서드 map은 컬렉션의 각 요소에 동일한 연산을 적용한 후 변환된 값을 가진 새로운 배열을 반환합니다. 원본 … Read more