분류 전체보기 28

macOS 업데이트 이후 Xcode 시뮬레이터에서 발생하는 objc 중복 클래스 오류 해결하기

안녕하세요.최근에 macOS 15.4를 업데이트 했는데요. 업데이트한 뒤 프로젝트를 실행할 때 아래와 같은 메시지가 출력되기 시작했습니다: objc[26792]: Class UIAccessibilityLoaderWebShared is implemented in both /Library/Developer/CoreSimulator/Volumes/iOS_22B81/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 18.1.simruntime/Contents/Resources/RuntimeRoot/System/Library/AccessibilityBundles/WebKit.axbundle/WebKit (0x33233c398) and /Library/Developer..

카테고리 없음 2025.04.15

iOS 한글 파일명 깨짐 해결: precomposedstringwithcanonicalmapping

안녕하세요!오늘은 Text를 사용하다가 겪은 자음-모음 분리 문제에 대해 알아볼 예정입니다.API를 호출하고 받은 데이터로 VStack에 데이터를 쌓는 중에 이상한 걸 발견했어요.한글이 자음 모음이 분리되어 나오는 겁니다..!!혹시 몰라서 콘솔에 로그를 찍어봤는데이 문제는 유니코드 표현 방식 때문이라고 합니다. 유니코드는 같은 문자라도 여러 가지 방식으로 표현될 수 있습니다. 예를 들어, 한글 '가'는 다음과 같이 나타낼 수 있습니다.NFC (정준 정규화 형식 C): "가" (U+AC00)NFD (정준 정규화 형식 D): "ㄱ" (U+1100) + "ㅏ" (U+1161)macOS에서는 NFD 방식으로 파일명을 저장하는 반면 Windows에서는 NFC 형식으로 파일명을 저장하고 있어 이런 문제가 발생한 것..

카테고리 없음 2025.03.17

Debounce와 Throttle, 이벤트 중복 방지를 위한 필터링 방법

안녕하세요!  버튼을 빠르게 두 번 눌렀는데, 의도치 않게 두 번 실행된 경험이 있지 않나요?🥲예를 들어, 결제 버튼을 여러 번 눌러 중복 결제가 발생하거나, API 요청이 짧은 시간 내에 여러 번 호출되는 경우가 있을 수 있습니다.위처럼 예기치 못한 오류를 방지하거나 혹은 성능 상의 문제를 해결하기 위해 중복된 이벤트를 필터링해야 할 때가 있습니다.  이러한 필터링 기법 중 하나인 함수 호출 빈도를 줄이는 기법인 debounce와 throttle에 대해 알아보겠습니다.  1️⃣ debouncedebounce란 연속해서 호출되는 함수 중에서 마지막 호출만 실행되도록 하는 기법입니다. 이게 구현을 어떻게 하느냐 하면, 이벤트가 발생한 후 특정 시간의 타이머가 실행되어 다음 이벤트를 기다립니다. 새로운 이..

카테고리 없음 2025.03.11

SwiftUI: @ViewBuilder

📌 @ViewBuilder란?@ViewBuilder는 SwiftUI에서 여러 개의 뷰를 하나의 반환 값으로 묶어주는 속성 래퍼(Attribute Wrapper)입니다. Swift의 함수는 기본적으로 단일 반환 값을 요구하지만, @ViewBuilder를 사용하면 여러 개의 뷰를 조합하여 반환할 수 있습니다. ✅ @ViewBuilder 기본 사용법import SwiftUIstruct MyView: View { var body: some View { customView() } @ViewBuilder func customView() -> some View { Text("Hello, SwiftUI!") Text("This is using @ViewBuilder.") }} @ViewBui..

카테고리 없음 2025.03.10

Swift Testing 간결하게 시작하기

안녕하세요!오늘은 Swift Testing에 대해 알아보겠습니다. Swift TestingApple은 WWDC24에서 Swift로 작성된 코드를 테스트하기 위한 새로운 패키지인 Swift Testing을 소개했습니다. 기존 XCTest와 Swift Testing의 차이점언어 통합성: XCTest는 Objective-C 기반으로 시작되어 Swift와의 통합성에 제한이 있었습니다. 반면, Swift Testing은 Swift로 작성되어 언어적 일관성과 통합성이 향상되었습니다.문법 간결성: XCTest에서는 테스트 메서드를 작성할 때 다소 장황한 문법을 사용해야 했지만, Swift Testing은 간결한 문법을 통해 테스트 코드를 보다 읽기 쉽게 작성할 수 있습니다.비동기 테스트 지원: XCTest에서는 비동..

카테고리 없음 2025.03.05

Swift: Decode 시에 응답 데이터 변환하기

안녕하세요. 일반적으로 API 통신을 할 때, JSON 형식의 응답 데이터를 Data 타입에서 구조체로 미리 정의해 놓은 타입으로 변환하여 사용합니다. 이 과정을 디코딩이라고 부르는데요, 단순히 변환하는 것 뿐만 아니라 필요한 데이터로 가공 및 변환을 동시에 수행해야 하는 경우가 있습니다.이번 글에서는 Decodable을 활용하여 JSON 디코딩 과정에서 데이터를 변환하는 방법을 정리해보겠습니다.1️⃣ 보통의 Decodablestruct PostByUser: Decodable { let title: String let body: String}Swift 구조체에 Decodable을 채택하면 Data 타입의 데이터를 해당 구조체로 디코딩할 수 있게 됩니다. 2️⃣ 매칭된 키 값 변경을 위한 CodingK..

카테고리 없음 2025.03.04

SwiftUI: ScrollViewProxy와 scrollTo

안녕하세요.SwiftUI의 ScrollView를 사용할 때 유용한 기능을 사용할 수 있는 ScrollViewReader와 ScrollViewProxy에 대해 알아보겠습니다. 1️⃣ ScrollViewReaderiOS 14.0+부터 사용 가능한 ScrollViewReader는 ScrollViewProxy를 전달하여 ScrollView 내에서 특정 뷰로의 프로그래밍적 스크롤을 가능하게 하는 컨테이너입니다. GeometryProxy를 전달하는 GeometryReader와 유사하죠? ScrollViewProxy는 ScrollViewReader 내부에서만 접근할 수 있습니다.ScrollViewReader { proxy in ScrollView { VStack { // 스크롤 가능한 콘텐츠 }..

카테고리 없음 2025.03.01

Swift - 키보드의 높이를 알아내는 법🚀

앱 개발 중 TextField 또는 TextEditor와 같이 텍스트 입력 필드를 사용할 때, 자연스럽게 키보드가 화면 위로 올라오게 됩니다. 키보드가 올라온 화면까지 고려해서 디자인과 기능을 구현하기도 하고 또 구현 의도에 따라 키보드가 화면을 가리지 않도록 적절한 처리가 필요한 경우가 있습니다. 이를 위해 키보드의 높이를 감지하는 방법을 알아봅시다.1️⃣ NotificationCenter를 사용하여 키보드 높이 구하기📌 키보드 이벤트 감지하기키보드의 높이를 알아내기 위해서는 키보드가 나타나거나 사라질 때 발생하는 Notification을 활용할 수 있습니다. iOS에서는 다음과 같은 키보드 관련 Notification을 제공합니다.✅ UIKeyboardWillShowNotification : 키보드..

카테고리 없음 2025.03.01

WebView 사용하기 (3) - Safari Link

App에서 웹 페이지를 띄워야 할 때 사용할 수 있는 방법으로 크게 3가지 방법이 있다고 했습니다.마지막으로 기본 웹 브라우저인 Safari를 열어서 웹 페이지를 여는 방법입니다. 엄밀히 말하면 앱 내에서 웹 브라우저를 열지 않고, iOS 기본 Safari 앱에서 웹 페이지를 직접 여는 방법이므로 WebView는 아니긴 합니다..만 가장 간단하고 빠른 방법이고 또 사용 빈도가 가장 적습니다.📌 사용법Button { if let url = URL(string: "https://apple.com") { UIApplication.shared.open(url) }} label: { ..}UIApplication.shared.open 이게 끝입니다. ✅ 실제로 사용하실 때는 canOpenURL()을 ..

카테고리 없음 2025.02.27

WebView 사용하기 (2) - WKWebView

SFSafariWebViewController를 사용하는 방법을 알아보았는데, 이어서 App 내에서 직접 웹 페이지를 로드하고, JavaScript 실행 및 커스텀 웹 컨트롤을 구현할 수 있는 웹 뷰인 WKWebView에 대해 정리하겠습니다.Apple의 WebKit 프레임워크에서 제공하며, UIWebView의 후속 버전으로 성능과 보안이 크게 개선되었습니다. 📌 WKWebView의 주요 특징앱 내에서 완전한 웹 브라우징 가능WKWebView는 웹 페이지를 로드하고, JavaScript 실행 및 CSS 적용이 가능하여 맞춤형 브라우저를 만들 수 있음.JavaScript 실행 및 DOM 조작 가능evaluateJavaScript(_:completionHandler:)를 사용하여 JavaScript 코드를 ..

카테고리 없음 2025.02.25