본문 바로가기

Swift

[iOS] Metal - 1 사전지식Rendering(렌더링)3D 컴퓨터 그래픽에서는 여러 점을 연결해 화면에 이미지를 만듦여기서 이미지 → 렌더라고 함3D 모델을 실제 이미지처럼 보이게 하는 과정 → 렌더링 렌더링이 왜 필요할까?3D 모델은 구조, 모양만 존재 → 빛, 그림자, 색에 대한 요소 X렌더링을 통해빛을 어디에 비출지그림자가 어떻게 혹은 어디에 생기는지재질 등을 계산해서 진짜 처럼 보이게 만드는 과정→ 그냥 뼈대만 있으니 거기에 색상, 그림자를 입혀 real하게 보이게 하는 거 3D 모델?Vertex라는 정점들로 구성되어 있는 뼈대정점들을 연결하여 모양을 만들고 여기에 색, 재질, 빛 효과 등을 입혀 3D 이미지 생성 렌더링 파이프?3D 모델이 화면에 나타나기까지 거치는 모든 과정모델을 불러옴 → 정점 정보 읽어드림GPU.. 더보기
[iOS] Metal - 0 Metal?Apple에서 만든 고성능 그래픽 & 계산용 APIiOS, macOS, tvOS에서 GPU를 직접 제어할 수 있도록 해줌그래픽 렌더링뿐만 아니라, 머신러닝, 영상 처리 등에도 활용 가능 왜 Metal을 쓰나?OpenGL보다 훨씬 저수준의 접근 가능 → 더 빠르고 최적화된 렌더링iOS12 부터 OpenGL ES 권장 XmacOS에서는 아예 deprecated 처리Apple 에서는 Metal이 그래픽 개발의 표준이 됨Shader 프로그래밍(Metal Shading Language)을 통해 실시간 효과 구현 가능Swift, Objective-C에서 손쉽게 사용 가능 (애플 생태계 최적화)저수준(Low-level)?저수준 API- 시스템이나 하드웨어(GPU 등)에 더 직접적이고 세세하게 접근할 수 있.. 더보기
[iOS] SKIP.tools 사용기 SKIP.tools Install사전 설치: Xcode, Android Studio, Homebrew 도 설치가 되어있어야합니다..!저는 Android Studio만 추가적으로 설치해줬습니다 그 다음엔 brew install skiptools/skip/skipskip checkup차례로 진행하면 되는데요checkup 시, 하나라도 체크가 안 되면 다음 단계로 넘어갈 수 없어요..! 저는 안드로이드 스튜디오를 설치만하고 실행, 추가 패키지 설치를 하지 않아서 오류가 났습니다.다시 깔아주고 chekcup하면 이렇게 쫘악 체크표시가 뜬답니다. 그 다음엔위의 폼에 맞게 스킵을 실행시켜주면 됩니다.실행시켜주면..! Wow... 알아서 촤라락 나오는데요.. 코드도 예시코드들이 기본적으로 작성이 되어있습니다.그래서 .. 더보기
[iOS] SKIP.tools? Skip이란? Skip은 Swift 기반의 선언형(declarative) UI 프레임워크로, iOS와 Android 양쪽을 위한 네이티브 앱을 단일 코드베이스(Swift언어, Xcode)로 개발할 수 있게 해주는 도구  SKIP이 말하는 SKIP의 장점 진정한 네이티브 경험- Skip을 통해 생성된 앱은 iOS에서는 SwiftUI를, Android에서는 Jetpack Compose를 사용하여 완전한 네이티브 UI 제공 투명성- Skip의 라이브러리는 오픈 소스로 제공되며, 복잡한 런타임이 없어서 디버깅이 용이 경량성- SkipZero를 사용하면 iOS 앱은 추가적인 Skip 프레임워크에 의존하지 않으며, Android 앱도 최소한의 오픈 소스 라이브러리 필요 메모리 효율성- 추가적인 관리형 런타임이 없으.. 더보기
[iOS] About Swift Concurrency 드디어..!Swift Concurrency에 대해 글을 쓰는 날이 왔습니다..!코드적으로 사용하는 것은 어렵지 않았으나 그 외적인 내용이 굉장히 많더군요..! 1. Swift Concurrency 도입 배경기존 비동기 프로그래밍 - GCD 에서의 문제점 콜백지옥(callback hell) 기존의 비동기 함수 정의 방식- 오래 걸려서 얻는 결과값을 콜백 클로저 형태로 돌려받음// 콜백 함수 형태로 사용func getImage(completionHandler: @escaping (UIImage?) -> Void) { DispatchQueue.global().async { sleep(5) let image = UIImage(systemName: "person") co.. 더보기
[iOS] About Kingfisher 이번 게시글에서는 제가 자주 사용하는 라이브러리 Kingfisher의 기능들에 대해서 알아보고자 합니다. 그런데 저의 경우, 초반에 학습할 때 Kingfisher를 사용하는 명확한 이유에 대해서 알지 못한 채로 사용했었는데요..! 그래서 이번에는 Kingfisher를 사용하는 이유와, 이를 통해 얻을 수 있는 장점들을 정리하며 보다 명확한 사용 목적을 이해하고자 합니다.이를 위해 먼저 이미지 캐시의 기본 개념과 여러 캐싱 방법들을 간단히 짚어보고, 이후 Kingfisher가 이러한 캐싱 전략을 어떻게 활용하고 있는지 살펴보겠습니다!이미지 캐시?이미지 캐시는 어플리케이션에서 이미지를 효율적으로 로드하고 표시하기 위해 이미지 데이터를 임시로 저장하는 기술입니다. 이미지 캐시의 필요성- 빠른 로드 시간- 네트.. 더보기
[iOS] About 채팅 UI UIKit을 활용한 채팅 UI... 그런데 이제 SnapKit을 곁들인.. 준비물: UIKit, SnapKit, UITableViewCell, 채팅에 대한 정보(송신자, 시간, 내용 등) 구성요소: messageBubble, messageLabel, imageContainerStackView, taimeLabel 목표- 메시지를 보낸 사람이 본인 / 상대방 에 따라 메시지 버블 색삭 및 위치 다르게 설정- 텍스트와 이미지를 포함한 메시지 지원 0. 뷰 계층 구성은 SKIP~ 1.  메시지 버블 레이아웃 private var leadingConstraint: Constraint?private var trailingConstraint: Constraint?messageBubble.snp.makeConstra.. 더보기
[iOS] About Local Notification Local Notification- 사용자 기기에서 발생하는 알림으로, 서버 없이 앱 내부에서 특정 이벤트 / 시간을 기반으로 알림 트리거 가능- 인터넷 연결 없이도 동작하며, 앱 사용자에게 중요한 정보를 전달하는 데 유용함   로컬 알림의 주요 특징  1. 인터넷 연결 불필요- 로컬 알림은 기기 내에서 트리거되므로 네트워크 연결 필요 없음 2. 앱 내부 이벤트 기반- 특정 시간이나 이벤트에 따라 알림을 생성 가능- 예를 들어, 특정 작업의 마감 알림이나 데일리 리마인더를 설정 가능 3. 제한된 컨트롤- 앱이 백그라운드나 종료된 상태일 때는 알림만 표시 가능 로컬 알림 구현(SwiftUI 기반으로 작성된 프로젝트입니다..!!) 1. 권한 요청- 앱이 로컬 알림을 보내기 전에 사용자로부터 알림 권한 요청i.. 더보기