728x90

전체 글 258

Memory Safety

오늘은 메모리 충돌 관련한 Swift 공식 문서를 읽어보고 내용 정리해 보는 시간을 가져볼게요. # 개요 Swift는 동일한 영역에 있는 메모리에 대해서 여러 액세스가 충돌하지 않도록 하기 위해 메모리 위치를 수정(=write)하는 코드가 해당 메모리에 대해 독점적인 액세스 권한을 갖는 것을 보장합니다. 즉, 메모리에 write 액세스를 해야 하는 경우 read든 write든 다른 액세스가 올 수 없다는 거죠. 만약 충돌이 발생하면 컴파일 타임 에러 또는 런타임 에러가 발생해요. 언제 충돌이 발생할 수 있는지를 알면 충돌이 발생하지 않는 코드를 작성할 수 있겠죠??ㅎㅎ 알아봅시다. [참고] 앞으로 설명드리는 얘기는 단일 스레드 환경입니다. 단일 스레드에서 메모리에 대해 액세스가 충돌한다면, Swift에서..

Swift 2024.01.25

클래스(class type) 생성자에 대해 알아보자

안녕하세요. 이전에 구조체 생성자에 대해 알아봤어요. 오늘은 클래스 생성자를 공부할게요ㅎ # 1. Designated initializer, Convenience initializer Designated initializer는 해당 클래스의 모든 property(부모 클래스가 가지고 있는 property 포함)를 초기화하는 생성자입니다. Convenience initializer는 designated initializer와 유사하지만 생성자 내부에서 designated initializer를 호출할 수 있어요. 클래스는 1개 이상의 designated initializer를 가져야 하며, convenience initializer는 있어도 되고 없어도 됩니다. # 2. Initializer Delegat..

Swift 2024.01.21

구조체(value type) 생성자에 대해 알아보자

안녕하세요. 갑자기 Swift 언어 공식 문서에 꽂혀서... 기초를 다질 겸 틈틈이 보고 있습니다ㅎㅎ 오늘은 구조체 생성자에 대한 내용 간단하게 정리해볼게요. # 1. Initializer Delegation 생성자(initializer)는 인스턴스 초기화를 하기 위해 다른 생성자를 호출할 수 있고 이런 과정을 'Initializer Delegation'이라고 부릅니다. # 2. 구조체에서 self.init는 생성자에서만 호출할 수 있습니다. 구조체 안에서 생성자 외에 다른 곳(함수 등)에선 self.init을 호출할 수 없어요. # 3. 커스텀 생성자를 만든 경우 default 생성자를 사용할 수 없습니다. # 4. extension 안에 커스텀 생성자를 넣은 경우 default 생성자를 쓸 수 있습니..

Swift 2024.01.17

private(set)

안녕하세요. Swift에서는 상수, 변수, property, subscripts의 getter와 setter의 access level이 property의 해당 상수, 변수, property, subscripts의 access level과 동일하게 설정됩니다. (예를 들어 property가 private이면 getter와 setter도 private인 거죠) 뿐만 아니라, Swift에서는 setter의 access level을 getter 보다 더 낮게 설정할 수도 있어요. 이를 위해 var 또는 subscript 키워드 앞에 fileprivate(set) 또는 private(set) 또는 internal(set)을 작성함으로써 setter의 access level을 낮출 수 있습니다. 예시 몇 개만 보..

Swift 2024.01.17

[WWDC20] App essentials in SwiftUI

안녕하세요. 이번엔 WWDC20 'App essentials in SwiftUI' 영상을 보고 SwiftUI의 App, Scene, View를 알아가는 시간을 가져볼게요. # Views, scenes, and apps ## Views 앱 화면에 보이는 모든 것은 View에 속해있습니다. ## Scenes 특정 플랫폼에선 전체 화면을 서로 다른 영역으로 쪼개서 앱을 표시합니다. SwiftUI에선 서로 다른 영역을 Scene이라고 부릅니다. Window는 Scene의 콘텐츠를 화면에 표시합니다. iPadOS의 경우 아래처럼 여러 window를 나란히 표시할 수 있어요. macOS의 경우 아래처럼 다른 Scene의 콘텐츠를 여러 window로 표시할 수 있고, 탭 형식으로 된 하나의 window로도 모을 수..

WWDC 2024.01.15

[WWDC20] Stacks, Grids, and Outlines in SwiftUI

안녕하세요. 늦은 감이 있지만 WWDC20 'Stacks, Grids, and Outlines in SwiftUI' 공부해 보고 내용 정리할게요. # 개요 SwiftUI의 layout primitives에 대해 알아보자! # Stacks ScrollView와 VStack을 활용하면 왼쪽과 같은 화면을 만들 수 있어요. 이때 한 가지 문제점이 있어요. VStack 요소가 늘어날수록(=이미지가 하나씩 추가될수록) 화면에 View를 그릴 때 시간이 오래 걸리게 됩니다. 모든 요소를 loading 하는데 시간이 오래 걸리는 것이죠. 이럴 때 LazyVStack, LazyHStack을 사용하면 됩니다. LazyVStack 또는 LazyHStack은 VStack, HStack과 동일하지만 컨텐츠가 화면에 표시될 때..

WWDC 2024.01.05

.a static library를 xcframework로 만드는 방법

안녕하세요. .a 형태로 된 static library로 제공되는 몇몇 라이브러리들이 있어요. (ex. Weibo iOS SDK, C++로 제작된 라이브러리 등) 이러한 라이브러리를 Swift에서 사용하려면 modulemap이 필요합니다. 그런데 아쉽게도 몇몇 라이브러리는 개발자가 지원을 해주고 있지 않아요.... 이런 경우 해결방법이 있습니다!! 바로 직접 modulemap을 추가하는 것이죠ㅎㅎ static library에 modulemap을 추가하면서 동시에 xcframework로 만드는 방법이 있습니다. 방법은 아래 문서 참고해 주세요!! (이번엔 링크로 대체할게요.) [Answers]-How can I wrap a static library (C++) into an XCFramework for ..

iOS 2023.12.31

개인정보 보호 매니페스트 및 서명을 필요로 하는 SDK

안녕하세요. 이전에 Privacy manifest에 대해서 공부했는데요. [WWDC23] Get started with privacy manifests 안녕하세요. 이번엔 WWDC23 'Get started with privacy manifests' 세션을 보고 내용 정리해 볼게요. #개요 앱 사용자는 Privacy Nutrition Labels를 통해 앱 내에서 어떤 데이터가 수집되고 있는지 쉽게 알 수 있습 phillip5094.tistory.com 최근 애플이 추가 가이드를 공개했습니다. App Store 앱 제출을 위한 개인정보 보호 관련 업데이트 - 최신 뉴스 - Apple Developer 타사 SDK 개인정보 보호 매니페스트 및 서명. 타사 SDK(소프트웨어 개발 키트)는 앱에 탁월한 기능성..

News 2023.12.20

@ViewBuilder는 언제 사용할까?

안녕하세요. ViewBuilder는 언제 사용할까요? # 예시 # some View를 반환하는 함수에서 에러 나요ㅠㅠ 간단한 예시로 Text 뷰를 반환하는 함수가 있다고 해볼게요. 여기까진 문제없어요ㅎㅎ 살짝 복잡하게 가볼게요. Toggle 버튼 on/off로 Text 뷰와 Button 뷰가 번갈아 보이도록 만들어볼게요. 문제없어 보였지만 view 함수에서 이런 에러가 발생합니다. error: Function declares an opaque return type 'some View', but the return statements in its body do not have matching underlying types some View는 opaque type이고 underlying type이 1가지만..

SwiftUI 2023.12.19

티스토리 오디세이 스킨 인기글 최근글 순서 바꾸기

안녕하세요. 티스토리 오디세이 스킨 사이드바에 '최근글과 인기글'을 추가하면 아래처럼 최근글이 먼저 보이도록 설정되어 있는데요. 인기글이 앞에 오도록 순서 바꾸는 방법 공유드릴게요. 먼저, '블로그 설정 -> 스킨 편집 -> html 편집'으로 가주시구요. '최근글'이라고 검색하면 최근글 & 인기글 위치로 이동합니다. tab-recent 영역 안에서 '최근글'에 해당하는 줄과 '인기글'에 해당하는 줄 순서를 바꾸고 '최근글' 줄 앞부분에 있는 on을 지우는 대신 '인기글' 줄 앞부분에 on을 넣어주세요. 마지막으로 'style=display: none'을 위쪽 ul 클래스 안에 넣어주세요. 정리하자면 아래 이미지의 파란색 부분을 빨간색 부분처럼 수정해 주세요. 수정 후에 적용하면 인기글이 먼저 나오게 ..

기타 2023.12.16