SWIFT
-
[Swift] 값타입의 Heap Allocation(Heap boxing)은 언제 일어날까?Swift 2025. 3. 6. 15:01
값타입도...힙에 저장된다고...? 값타입의 Heap Allocation(Heap boxing)클로저에 대해 공부하면서 값타입의 Heap Allocation에 대해 더 공부하게 되었습니다. 값타입의 Heap Allocation은 Struct, Enum과 같이 Stack에 저장되는 값 타입이 힙에 할당되는 현상을 의미합니다. 이렇게 Heap에 할당된 경우 값 타입이 heap에 저장되며 class와 같이 참조타입처럼 동작하게 됩니다.Heap Allocation이 발생하는 경우Swift에서 Heap Allocation은 다음과 같은 경우에 발생합니다.프로토콜을 통해 값 타입을 다룰 때클로저에서 캡쳐될 떄(캡쳐리스트가 없는 경우)컬렉션에서 값 타입을 참조할 때클래스 안에 값타임, 값 타입 안에 클래스 타입을 ..
-
'Instrument' 처음 시작하기: Instrument 기초와 기본 활용이해를 위한 기록들 2024. 11. 1. 00:46
내가 만든 앱이 버벅거리거나, 앱을 구동하면 핸드폰이 너무 뜨거워지나요? Instrument는 구현과 함께, 또는 그 이후에 최적화를 통해 이런 문제를 해결할 수 있도록 돕는 도구가 있습니다. KWDC24에서 View가 버벅거리는 이유에 관한 발표를 듣고 제가 만드는 앱의 버벅거림을 개선해보기 위해 학습해보고 싶었습니다(다음 글은 실제 개선 및 성능 향상 정도를 보여줄 수 있을지도..?!). 이 글에서는 Paul Hudson 씨의 예제와 기본 개념을 버무려 Instruments의 기본적인 기능에 대해 정리하였습니다. 기본적인 개념을 익히고, 이후 다양한 instruments들을 체험해보시길 기대합니다(저도 알려주세요👀) About InstrumentsInstruments는 Xcode 도구 세트의 일부로..
-
Code Signing & Provisioning Profile 총정리: 하나의 앱을 여러 팀원과 공유하기이해를 위한 기록들 2024. 10. 21. 21:37
팀원들과 어떻게 하나의 앱으로 공유하죠?Q. 왜 제 핸드폰에 앱이 빌드가 되지 않는건가요? Q. 팀원 Xcode에 로그인했는데 왜 핸드폰에 빌드가 되지 않는걸까요?위와 같은 질문은 애플생태계에서 개발을 하다보면 자연스럽게 경험하게 되는 부분입니다. 위 질문에 답하기 위해서는 애플이 앱을 실행시키기 위해 만든 보안에 대해 이해가 필요합니다. 이해를 하려고 미루고 미루다, 아카데미에서 진행하는 출석 체크 앱의 유지보수를 위해 이번에 깊게 이해해보려 했습니다. 앱을 실행시키려면앱은 앱스토어에서 다운받을 수 있고, 그 앱은 애플이 발급한 인증서(Certificate)를 통한 코드 서명(Code Signing)이 되어야 실행이 될 수 있습니다. 코드 서명(Code Signing)이란, 앱에 서명을 한 이후 변경이..
-
[Swift] Error Handling 마스터하기(do-catch, throw-try)Swift 2024. 1. 25. 22:09
Error 삶은 늘 원하는대로 흘러가지 않습니다. 하지만 그런 상황에 대비를 해야 하는 것이 Error Handling입니다. Error Handling: 에러 처리 또는 ExceptionHandling이라고 말하기도 합니다. Error Handling을 잘해야 하는 이유 만약 여러분이 은행앱을 통해 돈을 송금하는데 갑자기 “에러입니다.”라고 나오기만 하고 어떤 문제인지 말해주지 않고 앱이 종료된다면 어떨까요? Error Handling은 이러한 상황에서 어떤 에러가 어디서 발생했는지 말해주고, 유저가 앱을 지속적으로 사용하는데 중요한 힌트를 제공합니다. (ex. 잔액이 부족합니다, 계좌가 올바르지 않습니다 등) Error의 사용 어떤 함수가 에러를 발생할 가능성이 있다면 Swift에서는 함수 선언 시 ..
-
[Swift] "No such module" 에러 / SPM && WatchOS에러처리 2023. 10. 14. 21:18
에러: "No such module" 상황은 이렇다. FireStore를 하기 위해 SPM으로 dependency를 추가하고 build를 했는데 No such module 에러가 발생했다. 오늘도 나의 인내심을 성장시켜준 에러. 감사하다. 시도한 방법 1. Project Navigator - Targer - BuildSetting에서 Debug와 Release를 빈칸으로 바꿔보았지만 아무런 일도 일어나지 않았다. 2. Xcode 에러인 것 같아서 Xcode를 종료했다가 다시 했지만 실패 3. SPM에 누락된 라이브러리가 있을 수도 있어서 Firebase의 모든 라이브러리를 적용했지만 실패 4. SPM에서 dependency 삭제 제거 3회 반복 -> 실패 해결 방법 현타가 올 수도 있으니 조심하자 SPM..
-
SwiftUI에서 화면 캡쳐하기(with UIKit / UIGraphicsImageRenderer)Swift 2023. 10. 11. 14:23
SwiftUI에서 화면 캡쳐하기 최근에 하는 프로젝트에서 image를 만들어서 instagram으로 공유하는 기능을 구현해야 했다. 먼저는 화면의 이미지를 image로 렌더해야 하는 기능을 구현해야 해서 UIGraphicsImageRenderer를 활용한 캡쳐 기능을 구현하였다. 구현 순서 1. Target으로하는 View를 구현한다. 해당 뷰를 그대로 이미지로 만들기 때문에 따로 View를 만들거나 아래와 같이 바뀌는 내용이 없다면 extension에 computed property로 구현해도 된다. // 렌더해야 하는 뷰 extension RendererTestView { private var TargetImageView: some View { ZStack{ Color.white VStack { Te..
-
[Swift] Codable 개념 확실히 이해하기 💬Swift 2023. 10. 6. 21:36
Codable: type alias Codable is a type alias for the Encodable and Decodable protocols. When you use Codable as a type or a generic constraint, it matches any type that conforms to both protocols. Coadable은 Encodable과 Decodable을 합친 Union Type이다. 정의 typealias Codable = Decodable & Encodable Decodable: Protocol A type that can decode itself from an external representation. Decodable은 외부 표현을 자신으로 변환..
-
[Swift] defer는 무엇인가 🤔Swift 2023. 10. 3. 18:25
defer란 후처리인 defer는 작성된 구문은 위치와 상관 없이 코드블럭을 나가기전에 반드시 실행된다. 에러가 나거나 정상적으로 작동되거나 무조건 실행된다. 함수가 종료되기 전 메모리에서 해제하는 등의 기능으로 사용할 수 있다. func sayHello(name: String){ defer { print(name) } print("hello") } sayHello("moonkey") /* hello moonkey */ defer 동작 순서 defer는 Stack으로 동작하기 때문에 defer가 여러개 입력된 경우 가장 먼저 작성된 코드가 가장 나중에 실행된다. func printNums(){ defer { print(1) } defer { print(2) } defer { print(3) } } /* ..