Swift UIKit: 최상위 Top View Controller (현재 화면의 VC) 찾기 / 예제: SwiftUI에서 빠른 Alert 띄우기

1. UIApplication의 KeyWindow 대체 import UIKit extension UIApplication { var keyWindow: UIWindow? { connectedScenes .compactMap { $0 as? UIWindowScene } .flatMap { $0.windows } .first { $0.isKeyWindow } } } ‘keyWindow’ was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a 더보기…

SwiftUI: WKWebView의 UIRepresentableView에서 웹 페이지의 Alert, Confirm, Prompt 표시

관련 글 SwiftUI: 웹 뷰(WKWebView) 추가하기 및 자바스크립트 실행 (Representable 사용)   소개 UIDelegate에서 구현해야되는 자바스크립트 경고창 (Alert, Confirm, Prompt) 표시는 어떻게 해야 할까요? Coordinator 클래스를 만들고 WKUIDelegate를 준수(conform) 부모 뷰 (WebViewRP)를 참조하는 변수를 정의하고 이 변수를 통해 코디네이터와 통신 코디네이터 클래스 안에 자바스크립트 경고창 표시와 관련된 함수를 오버라이딩 및 더보기…

Swift iOS 앱 프로젝트: 버튼을 누르면 iOS에 내장된 사전(dictionary) 열기

소개 iOS에서 UIKit을 사용하여 내장된 사전을 여는 방법은 UIReferenceLibraryViewController를 활용하는 것입니다. 이 클래스는 지정된 단어에 대한 사전 정의를 표시하는 뷰 컨트롤러를 제공합니다. UIKit 구현 방법 아래는 특정 단어에 대해 iOS 내장 사전을 여는 예제입니다. 1. 기본 구현 import UIKit func openDictionary(for word: String, from viewController: UIViewController) { if UIReferenceLibraryViewController.dictionaryHasDefinition(forTerm: word) 더보기…

SwiftUI: iOS 프로젝트의 Stepper가 My Mac(Designed for iPhone)에서 실행할 때 크래시 발생하는 문제 해결 과정

이 포스트는 ChatGPT가 작성하였습니다. 소개 최근, iOS 앱을 macOS에서 실행할 때 Stepper UI 요소가 충돌하는 문제를 겪었습니다. 이 문제는 주로 Apple Silicon Mac에서 발생하며, 특히 iOS 앱을 “Mac (Designed for iPhone)” 타겟으로 실행할 때 발생합니다. Stepper는 iOS에서 잘 작동하지만, macOS에서는 크래시가 발생하는 현상이 있었습니다. 이 문제는 SwiftUI의 호환성 문제로 보였고, 더보기…

Swift 예제: 복잡한 로컬 알림(Local Notification) 구현 (1) – 어학 앱 열기 알림

참고 Swift(스위프트): 로컬 알림(Local Notification)을 스케줄에 맞춰 반복 발신하기 (및 한계점) Swift: [ChatGPT가 말하는] 로컬 알림(로컬 노티피케이션) 기능의 한계점과 극복 방안 Swift(스위프트): 백그라운드 작업 (Background Tasks) 시나리오 앱 설명 하루에 한 번 공부 자료가 업데이트 되는 어학 앱이 있습니다. 월요일 ~ 금요일에만 업데이트가 되고, 주말에는 업데이트가 되지 않습니다.   목표 더보기…

Swift UIKit: UIKit을 사용하여 UIMenu에 구분선(divider, separator) 추가하기

출처: Create Dividers in UIMenu using UIKit 시나리오 UIKit을 사용하여 UIMenu 내에 구분선을 추가하는 방법     버튼을 누르면 컨텍스트 메뉴가 뜨며, 메뉴가 표시될 때 구분선이 존재합니다: import UIKit class ContextDividerViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 1 let topActions = [ UIAction(title: “Two”, image: UIImage(systemName: “2.square”), handler: 더보기…

Swift: [ChatGPT가 말하는] 로컬 알림(로컬 노티피케이션) 기능의 한계점과 극복 방안

소개 ChatGPT에게 아래 글을 읽고 구체적인 이유와 해결 방안을 제시해보라고 요구했습니다. Swift(스위프트): 로컬 알림(Local Notification)을 스케줄에 맞춰 반복 발신하기 (및 한계점) 일반론적인 이야기를 풀어 말한것에 불과하지만, 일단 틀린 답변은 아니므로 ChatGPT가 제시한 해결 방안을 올려봅니다.   해결 방안 (ChatGPT의 답변)   Google Keep에서 구현된 것처럼 iOS에서 복잡한 스케줄링을 로컬 노티피케이션으로 더보기…

SwiftUI: 게임 센터(Game Center) 연동

소개 iOS 프로젝트에서 Game Center를 연동하려면 몇 가지 단계를 거쳐야 합니다. Game Center는 애플의 게임 서비스로, 멀티플레이어 매치메이킹, 리더보드, 도전 과제 등을 제공합니다. 아래는 SwiftUI로 iOS 프로젝트에서 Game Center를 연동하는 방법에 대한 자세한 설명입니다.   1. Game Center 설정 준비 Apple Developer 계정 준비: Apple Developer 계정에 가입하고 필요한 설정을 더보기…

[자막 번역] WWDC24: Embedded Swift로 경량화하기

2024. 6. 12. Embedded Swift를 사용하면 제한된 환경에도 Swift의 안전성과 표현성을 그대로 누릴 수 있습니다. 규격화된 Matter 기기를 사용한 데모를 통해 Embedded Swift에서 다양한 마이크로컨트롤러를 실행하는 방법을 확인해 보세요. Embedded Swift 하위 집합이 그토록 작은 공간에 런타임 없이 Swift의 이점을 모두 담을 수 있었던 방법과 Embedded Swift 개발의 첫걸음을 돕는 더보기…

Swift: Combine 기본 기능 81가지 한 번에 요약 정리

출처: https://icksw.tistory.com/category/iOS/Combine 주의: 아래 포스트는 ChatGPT를 이용하여 요약하였으므로 틀린 내용이 있을 수 있습니다.   1. Combine 프레임워크를 사용하여 커스텀 Publisher 생성 class HandsUp: Publisher { typealias Output = String // Never: The return type of functions that do not return normally, that is, a type with no values. typealias Failure 더보기…