apple/iOS, Documentation 79

Swift Mixin and Trait

Swift Mixin and Trait iOS 프로그래밍에서 주로 사용되는 언어는 Swift로 다중 상속을 지원하지 않음.Swift에서는 인터페이스(Interface)를 프로토콜(protocol)로 사용하고 있어서 프로토콜이라는 용어와 인터페이스의 의미는 같음. 목차배경mixin이란?interface(protocol), mixin, trait예제를 통해 알아보기 1예제를 통해 알아보기 2예제를 통해 알아보기 3swift 다중 상속 컴파일 오류몇가지 실험들둘 다 채택한 경우명시적 캐스팅배경객체지향 프로그래밍에서 상속의 사용은 코드의 결합도를 크게 증가시킴. 이로 인하여 많은 문제점들이 발생.상속을 코드 중복을 해결하기 위한 수단으로 사용하면 안됨.상속은 부모와 자식간의 높은 결합도를 가지게 되어 코드의 ..

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation)

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation) 서비스 및 기능에 따라서 RunLoop.main에서 돌아가게 하면 안되는 케이스도 존재. 잘못 설계할 경우 Timer기반으로 동작하는 로그나 기능 등 예상치 못한 결과를 낼 수 있음. RunLoop.main에서 타이머가 아예 방출되지 않거나 RunLoop.main이 아닌 다른스레드에서 돌려야 하는 경우에 대하서 자세히 알아볼 예정 위 케이스들을 내부 구현 코드를 통해 근거 있게 정리해보고자 함. 글의순서 타이머 알아보기 swift-corelibs-foundation내에 Timer 구현 알아보기 Timer 선언부 Timer scheduledTimer 함수 RunLoop 간단히 알아보..

[Swift] NSCache (swift-corelibs-foundation)

[Swift] NSCache (swift-corelibs-foundation) NSCache 문서를 읽어보다가 `eviction`이란 단어를 보게 되었는데, 대학 수업을 원서로 배울때, `eviction`과 `expiration`에 대해서 깊게 탐구했던 생각이 났음.애플에서 최근에 Foundation 부분을 오픈소스로 공개했는데, NSCache와 관련해서 구현된 코드를 직접 확인하면서 제대로 이해해보고자 함. 글의 순서NSCache OverviewiOS에서 Cache 종류왜 메모리 캐시가 디스크 캐시보다 빠를까?캐시와 관련한 몇가지 정책 및 알고리즘Foundation에서 구현되어 있는 NSCache에 대해서 코드로 알아보기NSCache 선언부NSCache InsertNSCache removeNSCache..

Library vs Framework 정리

Library vs Framework 정리 모듈화의 개념을 이해하기 전 기초 지식으로 정리. Library란?개발자가 만들 클래스들의 집합으로 다른  프로그램에서 사용할 수 있도록 제공Framework란?소프트웨어를 개발하는데 있어서 개발 시간을 줄이고, 코드의 재사용성을 증가시키기 위해 묶음이나 뼈대(틀)을 라이브러리 형태로 제공되는 것.제어의 역전 개념이 적용된 대표적 기술 Library와 framework의 차이라이브러리와 프레임워크의 차이는 제어 흐름의 주도성이 누구 / 어디에게 있는가가 포인트즉, 애플리케이션의 흐름(Flow)를 누가 갖고 있느냐의 차이프레임워크는 스스로 제어 흐름의 주도성을 갖는 반면, 라이브러리는 개발자가 가짐.  StaticLibrary / Dynamic Libarary ..

Swift @TaskLocal

Swift @TaskLocal- TaskLocal 값은 Task의 컨텍스트 내에서 바인딩되고 읽을 수 있는 값- Task와 함께 암묵적으로 전달되며, TaskGroup이나 `async let`으로 생성된 하위 Task에서도 접근할 수 있음     TaskLocal 선언하기enum Example { @TaskLocal static let traceID: TraceID?}// Global task local properties are supported since Swift 6.0:@TaskLocalvar contextualNumber: Int = 12 Swift 6.0부터 global로 사용 가능함.global에 대해서 더 자세히 알고 싶다면 댓글(간략정리) 혹은 아래 포스팅 참고.https://..

Swift KeyPath 정리

Swift KeyPath 정리 Realm의 @objc dynamic으로 사용하는 이유, property wrapper의 다채로운 활용 등 KeyPath를 이해하면 Swift 언어의 발전을 이해하는데 도움. KeyPath란?KeyPath 표현식은 특정 타입의 속성(property) 또는 서브스크립트(subscript)를 참조.KeyPath 표현식은 주로 키-값 관찰과 같은 동적 프로그래밍 작업에서 사용.KeyPath 표현식은 다음과 같은 형태를 가짐. 사용 형태\. 샘플 코드import SwiftUI class Person: NSObject { @objc var name: String @objc var age: Int @objc dynamic var hp: Int = 100 ..

iOS Translation Framework

iOS Translation Framework iOS 18.0 +Xcode 16 이상에서 작업 Overview 앱 내 번역 기능을 제공하기 위해 Translation 프레임워크를 사용할 수 있음.시스템이 사용자를 대신하여 번역을 제안하는 기본 UI를 사용할 수 있으며, 사용자가 별도의 설정 없이도 쉽게 번역 기능을 이용.또한, 이 프레임워크를 사용하여 번역 경험을 사용자 맞춤형으로 유연하게 조정할 수도 있음.Translation 프레임워크를 활용하는 방법에는 두 가지가 존재.시스템이 제공하는 기본 번역 UI를 사용: 하여 사용자가 손쉽게 번역을 적용할 수 있도록 합니다. 이 경우 시스템이 자동으로 번역 옵션을 제공하며, 개발자는 별도의 UI를 설계할 필요가 없습니다.사용자 맞춤형 번역 경험 제공: Tra..

swift @_spi (System Programming Interfaces)

swift @_spi (System Programming Interfaces) api와 spi 정의api란? swift에서 사용할 수 있는 Application Programming Interface의 약자.spi란?api 중 일부는 특정 클라이언트에게만 제공.spi는 실험적.apple에서 밑줄 있는 속성은 사용하지 말라고 권장. 밑줄 있는 속성의 의미는 변경될 수 있고 안정화 전에 Swift의 진화 과정을 거칠 확률이 높음.spi의 경우 기존 접근제어자보다 우선순위가 높음.  spi 선언public class PaymentFeature { public func pay() async {} @_spi(bitcoin) public func payWithBitCoin() async {..

CloudKit 정리 코드 예제 #3

CloudKit 정리 코드 예제 #3CloudKit 정리 환경설정 #1https://rldd.tistory.com/607CloudKit 정리 이론 #2https://rldd.tistory.com/619CloudKit 정리 코드 예제 #3https://rldd.tistory.com/631목차아이클라우드 권한 체크CloudKit 코드 기본 설정데이터 저장데이터 수정데이터 삭제데이터 불러오기서버 변경 사항이 있는지 토큰값을 기반으로 변경사항 체크데이터 로드아이클라우드 권한 체크아이클라우드 권한 체크하는 코드 func checkiCloudAccountStatus(completion: @escaping (CKAccountStatus) -> Void) { CKContainer.default().ac..

iOS TipKit 사용 예제 정리

iOS TipKit 사용 예제 정리목차OverviewTipKit 이론Tipkit 예제OverviewTipKit을 사용하면 앱의 새로운 기능에 대해 사용자에게 알리거나 작업을 더 빠르게 수행하는 방법을 보여줄 수 있음.각 예제는 TipKit 프레임워크의 다양한 기능을 강조.  추천하는 팁 예시actionable > 버튼 통해 추가 정보 혹은 기능 실행instructinal > 기능에 대한 설명easy to remember > 손쉽게 기억 되어야 함.  비추천하는 팁 예시promotinal > 광고error message > 에러 메시지not actionable > 새로운 기능 알리는 것 외에 할 수 있는게 없음.too complicated > 너무 복잡함. TipKit 코드 사용 기본기본적으로 Tip과 관..