ios
-
[Swift] Sendable 이해하기Swift 2025. 2. 11. 20:29
Sendable은 data races의 위험 없는 thread-safe 한 타입임을 보장하는 protocol 입니다.Sendable을 따른다는 건, 동시성 걱정 없이 전달할 수 있다는 걸 의미합니다.따라서 actor의 메서드 파라미터로도 전달할 수 있습니다.Swift6 부터는 컴파일 단계에서 동시성이 필요한 경우 Sendable을 체크해서 검증한다고 합니다.예를 들어, Task를 만들 때 공유 데이터가 Sendable을 준수하지 않으면 컴파일 에러를 발생시킵니다. 아래 4가지는 안전하게 파라미터로 전달할 수 있습니다. 즉, Sendable 합니다.1. 값 타입 (Value types)struct나 enum은 내부 변수까지 모두 Sendable을 준수하는 값들로만 구성되어 있다면 Sendable 을 채택할..
-
내 앱의 Crashlogs 확인하기 (dSYM은 뭔가?)iOS 2025. 1. 17. 19:02
Crashlog 를 통해 크래시가 발생했던 시점을 Xcode에서 재현할 수 있습니다.Crashlog 를 확인하고 제대로 이용하기 위해 주의해야 할 점들을 알아봅니다. 1. Crashlog 확인하기아래 경로를 통해 내 앱의 크래시 로그를 확인할 수 있습니다. Xcode에서 해보기.위 경로로 들어가서 로그인하면 위와 같은 내 앱에서 발생한 크래시 로그들을 확인할 수 있습니다. 크래시 로그가 발생한 Project를 기반으로 열면, 아래와 같이 크래시 난 상황이 재현됩니다. ctrl 키를 누르고 로그 목록을 누르면 finder 에서 로그 파일을 직접 확인할 수도 있습니다. 2. Crashlogs를 제대로 사용하기 위한 주의사항 크래시 로그를 제대로 활용하려면, 해당 크래시가 발생한 같은 시점의 커밋으로 열어..
-
Preference (PreferenceKey)iOS 2024. 11. 24. 20:36
1. Preference 란상위 뷰에서 하위 뷰로 전달하는 환경 변수(Environment)와 달리하위 뷰에서 구성된 정보를 상위 뷰 (Container)로 전달할 때 사용합니다.애플 문서의 그림이 해당 내용을 잘 표현해 주고 있는 것 같습니다. Environment 는 여러 하위 뷰로 동시에 전달되지만 (flows down)Preference는 하나의 단일 값으로 상위 뷰에 전달 됩니다. 따라서 어떻게 합쳐질지 결정해야 합니다. (flowing up) 2. 사용2.1 ModifiernavigationTitle 처럼 이미 Preference를 이용해 만들어져 있는 많은 Modifier 들이 존재합니다.navigationTitle를 사용하는 예시를 보면, NavigationView 내부 컨텐츠인 VSta..
-
[MTL] MTLTextureiOS/Metal 2024. 8. 20. 19:38
A resource that holds formatted image data. 'GPU에서 처리할 수 있도록 정제된 이미지 정보를 갖고 있는 자원'을 추상화시켜 놓은 객체입니다. 이 프로토콜을 직접 구현하지 말고 주어진 instance 생성 메서드들을 이용해서 생성해야 합니다 !Don’t implement this protocol yourself; instead, use one of the following methods to create a MTLTexture instance 1. MTLTextureDescriptor 이용하기descriptor to textureMTLTextureDescriptor를 만들고 MTLDevice의 makeTexture(descriptor:) 를 사용해 texture를 생성..
-
[iOS] OSSignpost > 특정 작업의 duration 측정하기iOS 2024. 7. 1. 20:41
앱의 성능을 측정해 보려고 합니다.그 중에서도 특정 작업이 완료되기까지 시간이 얼마나 걸렸는지를 측정해 보려고 합니다.주로 네트워크 통신이나 이미지 랜더링 같은 작업이 오래 걸리는 시간을 측정해볼 때 유용하게 사용될 수 있을 것 같습니다.# OSSignposterSignposts allow you to record meaningful information about the duration of your app’s tasks using the same subsystems and categories that you use for logging.Signposts는 특정 작업의 응답 시간을 측정하는 도구입니다.아이디어는 시작과 끝에 트리거를 주고 얼마나 걸렸는지 체크하는 것입니다.그리고 이걸 instrument..
-
pixel 과 points, dp의 관계 그리고 UIImageiOS 2024. 5. 10. 01:05
픽셀이란?픽셀 (Pixel)은 가장 작은 단위의 디스플레이 요소입니다. 흔히 "화소"라고도 불립니다. 픽셀은 RGB 색상을 조합해서 색을 표현합니다. 즉 Red, Green, Blue 에 대한 값을 저장합니다. 각 색을 채널이라고 한다면, 한 채널은 0~255까지의 값을 가질 수 있어서 2^8개의 값을 표현할 수 있습니다. 따라서 한 픽셀은 256 x 256 x 256 = 16,777,216 가지의 색상을 생성할 수 있다는 걸 의미합니다. 이를 트루 컬러 시스템 (True Color system) 으로 부릅니다. 해상도 = 가로 x 세로 픽셀의 총 개수이 픽셀의 가로 x 세로의 총 개수가 해상도가 되며, 당연히 더 높은 해상도는 더 선명한 이미지를 제공합니다. 밀도요즘은 높은 해상도의 사진, 영상 등을 ..
-
Identifiable 프로토콜 기본개념Swift 2023. 7. 31. 14:32
protocol Identifiable > ID: Hasable 안정적인 id 값을 갖는 인스턴스 객체 특정 기간이나 범위 안에서 유니크함을 보장함. 아래 특성들을 가질 수 있음. - 항상 유니크함. 예를 들어, UUID - 특정 환경안에서 유니크함. 예를 들어, 데이터베이스 record 키들 - 프로세스 생애주기 동안 유니크함. 예를 들어, static 변수 - 객체의 생애주기 동안 유니크함. 예를 들어, object identifiers - 현재 집합 안에서 유니크함. 예를 들어, collection indices Identifiable Protocol 을 채택하면 class 타입은 ObjectIdentifier 를 기본 값으로 제공해줌. 하지만 이는 객체의 생애주기 동안만 유효. 더 강력한 ide..
-
UISlider 커스텀하기 - 1iOS 2023. 4. 12. 14:01
UISlider 만들어진 그대로 사용하긴 쉽지만 커스텀하기 시작하면 생각보다 쉽지 않네요.. 간단할 것 같지만 생각보단? 좀 찾아봐야 하는 것들 위주로 정리하려고 합니다. 이번 글은 1탄으로 thumb 를 교체 하는 방법입니다. 1. thumb 교체하기 교체하는 것 자체는 생각보다 간단하게 할 수 있습니다. setThumbImage 를 사용해주면 됩니다. class WSSlider: UISlider { required init?(coder: NSCoder) { super.init(coder: coder) self.setupThumb() } private func setupThumb() { let thumbImage: UIImage = ... self.setThumbImage(thumbImage, for:..