이번 Xcode14.3 Release Note를 보면 아래와 같은 General Deprecation이 있습니다. Xcode isn’t supported under Rosetta. See Developer Technote “Resolving architecture build errors on Apple silicon“ for more information. (92772361) ⚠️Xcode 14.3부터는 Rosetta로 실행하는 것을 지원하지 않습니다. 저는 그동안 아래 글에서 Apple Silicon 환경(M1, M2, ...)에서 발생할 수 있는 문제점 및 해결 방법을 정리하고 계속 글을 갱신하고 있었는데요. 애플 실리콘(M1, M2, ...) 환경에서의 빌드 환경 문제 집에서는 M1 Pro 맥북을 ..
Xcode 14.3이 릴리즈되면서 Swift 5.8도 업데이트되었습니다. 변경점들을 간단하게 정리해봅니다. Function back deployment (SE-0376) @backDeployed(before:) attribute를 통해 이전 버전의 프레임워크에서 새 API를 사용할 수 있게 해줍니다. 함수에 대한 코드를 앱의 바이너리에 작성 후 런타임 시 검사하여 수행됩니다. 사용자가 적절한 새 OS를 사용하는 경우 시스템 자체 버전의 함수가 사용되고, 아닌 경우 앱 바이너리에 복사된 버전에 대신 사용됩니다. 단, @backDeployed는 함수, 메서드, 서브스크립트, 계산프로퍼티에만 적용됩니다. 당연하게도 만능으로 새 기능을 이전 OS에서 쓸 수 있게 한다던가 하는건 아닌거죠. 아래는 예시입니다. @..
아래는 Publisher와 Subscriber 사이의 흐름을 나타내는 UML다이어그램입니다. subscriber가 publisher를 subscribe합니다. publisher가 subscription을 생성해서 subscriber에게 제공합니다. subscriber가 value를 요청합니다. publisher가 value를 보냅니다. publisher가 completion을 보냅니다. 위 흐름에 맞춰서 아래의 Publisher와 Subscriber의 프로토콜을 살펴봅시다. 먼저 Publisher 프로토콜을 살펴보면 아래와 같습니다. public protocol Publisher { // [1] Publisher가 생성할 수 있는 값의 타입 // = Subscriber의 Input이 맞춰야 할 타입 as..
Publisher Publisher Protocol은 Combine의 핵심 중 하나입니다. 시간이 지남에 따라 하나 이상의 Subscriber들에게 일련의 값을 전달할 수 있는 Type에 대한 요구사항을 정의합니다. Publisher는 두 가지 이벤트를 내보냅니다. Element라고 불리는 value Completion이벤트(Success, Failure) 0개 이상의 value를 내보낼 수 있지만 Completion이벤트는 하나만 내보낼 수 있습니다. Completion이벤트를 내보내고 완료되고 나면 더 이상 아무 이벤트도 내보낼 수 없습니다. 가장 간단하게 만들어볼 수 있는 Publisher는 Just입니다. // 1. 단일 값으로 publisher를 생성할 수 있는 Just를 이용하여 publish..
GitHub - layoutBox/FlexLayout: FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementati FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementation. Concise, intuitive & chainable syntax. - GitHub - layoutBox/FlexLayout: FlexLayout adds a ni... github.com FlexLayout은 Facebook에서 만든 Flexbox Layout engine인 Yoga의 기능을 Sw..
iOS 앱 개발자의 축제! WWDC23의 날짜가 공지되었습니다! https://developer.apple.com/kr/wwdc23/ WWDC23 Apple 개발자 커뮤니티와 함께 온라인으로 개최되는 Apple 세계개발자회의에 참여하세요. developer.apple.com
https://www.apple.com/kr/newsroom/2023/03/apple-pay-launches-in-south-korea/ Apple Pay, 대한민국 출시 iPhone, Apple Watch, iPad 및 Mac을 통한 쉽고 안전한 결제 방식, 오늘부터 이용 가능 www.apple.com 마침내! 애플페이가 시작되었습니다. 작년 말에 미리 카드를 발급받아놨는데, 3개월이나 더 걸렸지만 결국 열었네요ㅎ 오프라인 결제도 오프라인 결제지만 저는 벌써 배달의 민족, 도미노피자, GS, 무신사, 대한항공, 롯데시네마 등과 같이 발빠르게 앱에 대응을 한 것도 대단하게 느껴집니다.
Combine의 핵심 기본요소는 Publishers, Operators, Subscribers. 다른 요소들도 있지만 위 세가지는 필수입니다. Publishers 하나 이상의 Subscriber에게 시간이 지남에 따라 값을 내보낼 수 있는 타입입니다. 수학 연산, 네트워킹, User event 처리를 포함한 거의 대부분의 Publisher의 내부 로직과 관계없이 3가지 타입의 이벤트를 내보낼 수 있습니다. Publisher의 Generic타입의 Output Success 완료 Publisher의 Failure타입의 error가 있는 완료 Publisher는 0개 이상의 Output값을 내보낼 수 있고, 성공 혹은 실패로 완료된 경우 다른 이벤트를 내보낼 수 없습니다. 아래는 시간이 지남에 따라 Int값을..
dynamicMemberLookup은 class, struct, enum, protocol에 적용하여 런타임에 dot(.) 문법으로 접근할 수 있도록 해주는 편리한 기능입니다. dynamicMemberLookup을 사용하려면 subscript(dynamicMember:)를 구현해주어야 합니다. @dynamicMemberLookup struct Person { var firstName: String var lastName: String subscript(dynamicMember key: String) -> String { switch key { case "fullName": return "Hey, \(lastName) \(firstName)!!!" default: return "nope!!!" } } } ..
Key-Value Coding (KVC) Key-Value Coding은 객체의 프로퍼티를 Key-value 쌍으로 접근할 수 있도록 해주는 Objective-C 문법입니다. KVC를 사용하면 속성의 이름을 문자열로 참조하여 런타임에 동적으로 객체의 프로퍼티 값을 설정하거나 읽을 수 있습니다. Swift에서도 사용할 수 있지만, Objective-C 런타임에 의존하기 때문에 프로퍼티 선언 시 앞에 @objc 어노테이션을 붙여줘야 하며, NSObject의 서브클래스에서만 사용이 가능합니다. class Person: NSObject { // NSObject 서브클래스 @objc var name: String? // @objc 어노테이션 } 위와 같이 선언된 클래스의 프로퍼티는 아래처럼 KVC로 접근이 가능합..
Key-Value Observing(KVO)은 다른 객체의 property 변경에 대해 객체에 알리는 데 사용하는 코코아 프로그래밍 패턴입니다. Model과 View 사이와 같이 앱의 논리적으로 분리된 것 사이의 변경 사항을 전달하는 데 유용합니다. willSet, didSet과 유사하지만 KVO는 객체 외부에서 property변경을 관찰하는 데 사용된다는 차이점이 있습니다. NSObject를 상속받은 클래스에서만 Key-Value Observing을 사용할 수 있습니다. Key-Value Observing을 위해 Observe할 property 앞에 @objc attribute와 dynamic modifier를 붙여주어야 합니다. class Almond: NSObject { // NSObject를 상속..
Combine을 익히려고 보다 보면, RxSwift와 비교를 하면서 익힐 수밖에 없는 듯하여 둘의 핵심요소들의 비교를 정리해 봅니다. (참고: https://github.com/CombineCommunity/rxswift-to-combine-cheatsheet) Basic Spec. RxSwift Combine Deployment Target iOS 8.0+ iOS 13.0+ Platforms supported iOS, macOS, tvOS, watchOS, Linux iOS, macOS, tvOS, watchOS, UIKit for Mac Spec Reactive Extensions (ReactiveX) Reactive Streams (+ adjustments) Framework Consumption ..
아래는 Apple 공식문서의 설명을 번역했습니다. (https://developer.apple.com/documentation/combine) Customize handling of asynchronous events by combining event-processing operators. 이벤트 처리 operator를 결합하여, 비동기 이벤트 처리를 Customize 하는 Framework. Combine framework는 시간 경과에 따른 값 처리를 위한 선언적 Swift API를 제공합니다. 이 값들은 많은 종류의 비동기 이벤트들을 나타낼 수 있습니다. Combine은 publisher가 시간이 지남에 따라 변경될 수 있는 값을 노출하고, subscriber가 publisher로부터 이러한 값들을..
Swift Package Manager로 Package 배포하기 개발할 때 유용한 패키지들을 Swift Package Manager, CocoaPods, Carthage를 통해서 Dependancy 세팅을 자주 하는데요. 매번 유용한 라이브러리들을 사용하기만 하면서, 이런 건 어떻게 배포하는 걸까? 싶었는 swifty-cody.tistory.com 앞 포스팅에서 Swift Package Manager로 Package 배포를 해봤는데, 해당 패키지를 CocoaPods으로도 배포하고 싶어서 시도해보고 경험을 공유해봅니다. 1. 일단 아무 폴더에다 들어가서 터미널을 통해 아래 명령어를 써줍니다. pod lib create (패키지명) 2. 그리고 5가지 질문에 자신의 패키지에 맞는 선택을 하면 pod temp..
개발할 때 유용한 패키지들을 Swift Package Manager, CocoaPods, Carthage를 통해서 Dependancy 세팅을 자주 하는데요. 매번 유용한 라이브러리들을 사용하기만 하면서, 이런 건 어떻게 배포하는 걸까? 싶었는데 이번 기회에 알아보게 되었습니다. 생각보다 쉽게 배포가 되었습니다. 1. Github에서 Public Repo 생성 2. 로컬에 클론 받기 3. 터미널에서 클론 받은 경로로 들어가서 아래 명령어 실행 swift package init 실행하고 나면 아래와 같이 파일들이 생깁니다. (LICENSE 파일은 Github에서 생성되어 클론받은 파일) 4. Package.swift, README.md 및 Sources, Tests 작성해 줍니다. 저는 Package.swi..