전체 글
-
SendableSwift 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 을 채택할..
-
ActorSwift 2025. 2. 11. 18:35
Actor란 Data race 문제를 방지하기 위해 도입된 Reference Type 입니다.내부 상태를 보호해서 data race를 방지하고,내부적으로 직렬 실행을 보장해서 동시에 여러 작업이 실행되지 않도록 합니다.class와 마찬가지로 참조 타입이지만 상속은 지원하지 않습니다. Actor가 유용한 대표적인 예시를 하나 살펴보겠습니다.바로 은행 시스템입니다. 은행 계좌에서 안정성이 왜 중요한지는 굳이 설명하지 않아도 되겠죠 ?actor BankAccount { let accountNumber: Int var balance: Double init(accountNumber: Int, initialDeposit: Double) { self.accountNumber = accou..
-
아주 작은 습관의 힘 - 정체성은 습관에서 나온다.경험치바/독서 2025. 1. 31. 01:04
아주 작은 습관의 힘 - 제임스 클리어 지음제목 그대로 작은 습관이 갖는 엄청난 힘을 깨닫게 해주는 책이다. 책은 6개의 파트로 나누어져 있는데, 크게 3부분으로 나눠서 생각해볼 수 있을 것 같다. '작은 습관이 만들어내는 힘'에 대해 이야기를 시작으로습관을 만들고 지속하기 위한 4가지 방법을 소개한다. 이를 뒤집으면 나쁜 습관을 끊어내는 방법이 된다.이어서 마지막으로 이 습관을 지속해 나가는 방법과 주의해야 할 점에 대한 이야기로 마무리 된다. Part 1. 아주 작은 습관이 만드는 극적인 변화1 파트에선 작은 습관이 만들어내는 엄청난 변화들에 대해 설명한다. 매일 1%씩 성장한다면 1년 후 37배의 변화를 만들어 낸다고 한다. 실제로 아주 사소한 개선들을 지속한 프로팀들이 엄청난 성과를 만들어냈다.보..
-
XcodeMacro 헤더 주석 변경하기iOS 2025. 1. 22. 01:32
Macro 헤더 주석이란 Xcode에서 파일을 새로 생성하면 자동으로 상단에 생기는 아래 형태의 주석을 말합니다.////// ContentView.swift// MyApp//// Created by woongs 1/22/25.// 회사나 집, 그밖에 여러 기기를 사용할 때 등등 이 Macro가 원하지 않게 생기는 형태가 있을 수 있을텐데요.자주 하는 동작은 아니다 보니 할 때마다 헷갈리고 귀찮은데,, 생각보다 잘 정리된 곳이(제 수준에 맞춰..) 없어서 한번 정리차 남겨봅니다.복잡하자면 이것저것 내용이 많지만 핵심은 매----우 간단합니다.1. Xcode는 파일을 생성할 때 IDETemplateMacros.plist 파일을 찾아 만든다.2. 다음과 같은 탐색 경로를 찾으며, 먼저 발견된 템플릿을 사..
-
내 앱의 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를 생성..
-
[flutter] 구글 로그인시 에러 발생할 때 _TypeError (type 'List<Object?>' is not a subtype of type 'PigeonUserDetails?' in type cast)Flutter 2024. 8. 10. 16:22
가이드를 그대로 따라했지만 아래 에러가 발생했다._TypeError (type 'List' is not a subtype of type 'PigeonUserDetails?' in type cast) 아래 부분에서 위 에러가 발생했는데, 가이드를 그대로 따라했을 뿐 별다른 문제 코드는 없었는데..FirebaseAuth.instance.signInWithCredential(credential); firebase_auth 버전이 원이이었던 듯 싶다. 간단하게 아래 명령어로 업그레이드 해주니 성공.flutter pub upgrade firebase_auth 참고- https://github.com/firebase/flutterfire/issues/13077