Swift 예제: iOS 앱에 위젯 추가 및 연동

Swift 예제: iOS 앱에 위젯 추가 및 연동 전체 코드 https://github.com/ayaysir/Swift-Playgrounds/tree/main/Projects/study-WidgetExample   개발 환경 Xcode 15.4, Swift 5.9 iOS App + Widget Extension SwiftUI + UIKit Representable   목적 위젯 개발 기본 학습 Deep Link를 이용한 위젯 -> 앱 간 데이터 전달 App Groups 기능을 이용한 아이폰 메인 앱과 위젯간 더보기…

Swift UIKit, SwiftUI: AVPlayerViewController에서 재생중인 비디오의 강제 풀스크린 전환 및 반복 재생

소개 AVPlayerViewController는 처음에 풀 스크린으로 바로 시작할 수 없는 옵션도 없고, 반복 재생 옵션도 없습니다. AVPlayerViewController에서 강제 풀스크린 전환 및 반복 재생하는 방법입니다. 포스트 하단에 SwiftUI를 위한 UIViewControllerRepresentable을 첨부합니다.   시작시 강제 풀스크린 전환 let controller = AVPlayerViewController() let player = AVPlayer(url: url) controller.player = player let selectorToForceFullScreenMode = NSSelectorFromString(“_transitionToFullScreenAnimated:interactive:completionHandler:”) 더보기…

Swift에서 애플 앱 프로그래밍 말고 할 수 있는 것들: 서버, 임베디드, 모바일 크로스플랫폼, 게임 엔진 등

소개 Swift 언어에서 iOS/macOS 등 운영체제의 애플리케이션의 개발을 하는 것 외에 뭘 더 할 수 있을까요? Swift 탄생 10주년을 맞아 다양한 활용처에 대해 간단하게 알아보겠습니다.   서버 (웹 백엔드 등) – Vapor https://github.com/vapor/vapor https://vapor.codes/ Vapor는 Swift 언어를 사용해 서버를 구축할 수 있는 솔루션입니다. Vapor 는 Swift로 작성된 오픈소스 라이브러리이며 애플의 더보기…

SwiftUI: Xcode 15 버전 이상에서 iOS 하위 버전 (15.0 이상) 호환되는 위젯 생성

소개 Xcode 15에서 작업하다가 위젯을 추가하고 싶어서 Widget Extension을 추가하였는데, 위젯의 최소 배포 타깃(Minimum Deployments Target) 버전을 15.0 이상으로 잡고 진행하고 싶은 경우가 있을 것입니다.   그래서 버전을 바꾸면 어떻게 될까요? 기본으로 제공하는 코드가 아래와 같이 iOS 17.0 이상을 요구하는 부분들이 많기 때문에 하위 호환성이 떨어지고 처리해야 할 분기 작업이 더보기…

Swift: 튜플 (Tuple), 튜플 패턴 분해, 버전 6에서의 변경사항

튜플 (Tuple): 데이터의 집합 튜플(Tuple)은 Swift에 존재하는 두 가지 복합 타입 (compound type) 중 하나입니다. 복합 타입에는 함수 타입(Function type)과 튜플 타입(Tuple type)의 두 가지가 있습니다. 출처: Swift 공식 문서 Types   특징 튜플의 특징은 다음과 같습니다. 여러 값을 동시에 표현 및 저장할 수 있다. (데이터의 집합) 예를 들어 x, 더보기…

SwiftUI: 방사형(원형) 레이아웃 (Radial Layout) 만들기

소개 뷰의 중심점(center point)과 반경을 계산하여 사용자 정의 방사형 레이아웃을 생성합니다. 커스텀 레이아웃 및 예제의 대부분 코드들은 iOS 16부터 지원합니다. 출처: Radial Layout   구현 커스텀 Radial Layout 만들기 레이아웃 중앙에 서브뷰를 배치하고 인덱스 값을 사용하여 최소한의 변형(transforming)을 수행하는 사용자 정의 레이아웃 코드부터 시작하겠습니다. CustomLayout을 생성하고 Xcode의 제안 기능을 통해 더보기…

SwiftUI 예제: 드래그로 버튼 선택하기

소개 SwiftUI에서 여러 개의 버튼을 드래그로 선택할 수 있는 예제입니다. 클릭으로도 선택 가능하고 터치 드래그를 멈춰도 선택 가능합니다. 예전에 올렸던 SwiftUI 예제: 알파벳 내비게이터(Alphabet Navigator) 만들기 에서 사용했던 기술을 버튼으로 바꿔서 구현한 것입니다.   스타트 코드 struct DragActionView: View { let icons = [ “photo.fill”, “f.cursive.circle.fill”, “house.fill”, “figure.wave”, “airplane”, ] // 화면을 더보기…

Xcode: 코드 에디터에서 사용할 코드 스니펫(Code Snippet) 추가 및 플레이스홀더 만들기

플레이스홀더 플레이스홀더는 Xcode에서 매우 빈번하게 사용되는 기능입니다. 단독으로 사용하기보다는 주로 코드 스니펫 기능과 결합되어 많이 사용됩니다. “플레이스홀더”는 일반적으로 코드를 작성할 때 사용되는 임시적인 값 또는 표시물을 가리킵니다. 이는 주로 코드 작성 중에 아직 정확한 값을 알지 못할 때 사용됩니다. 플레이스홀더를 사용하면 코드 작성자가 나중에 해당 위치에 정확한 값을 채워넣을 수 더보기…

SwiftUI 예제: 알파벳 내비게이터(Alphabet Navigator) 만들기

알파벳 내비게이터 만들기 아래와 같이 알파벳으로 섹션이 나뉘어져 있으며 해당 알파벳을 클릭하면 섹션으로 이동하는 기능을 알파벳 내비게이터라고 칭하겠습니다. (정식 명칭은 다를 수 있습니다.)   출처 SwiftUI List with Section Index on right hand side?   기본 형태 Contacts배열에 있는 사람 목록을 보여주는 뷰입니다. 예제를 복잡하지 않게 하기 위해 단순 [String] 더보기…

Swift: PDFView에서 터치한 곳의 문서상 좌표 알아내기

소개 PDFView에서 탭했을 때 확대 여부에 상관없이 실제 PDF 문서상의 좌표를 알아내고 싶을 때 사용하는 방법입니다, 스크린상에 터치했을 때 나오는 좌표를 실제 PDF 페이지에 알맞게 변환하여 사용합니다. 확대/축소 및 스크롤 위치 여부에 상관없이 일정한 좌표값을 받을 수 있습니다.   방법 Step 1: UITapGestureRecognizer를 PDFView에 추가 class DrawingPDFView: PDFView { init() 더보기…