전체 글

 iOS developer.
· iOS/Combine
Publisher가 내보내는 값이나 이벤트를 제한하고 그 중 일부만 소비하고 싶을 때 유용한 Filtering Operator입니다. 💡 Filtering Operator에는 try 접두사가 붙은 유사 Operator(예: filter와 tryFilter)가 있습니다. 유일한 차이점은 끝에서 throw하는 클로저를 제공한다는 것. 클로저 내에서 던지는 모든 오류는 던진 오류와 함께 Publisher를 종료합니다. 여기서는 non-throwing Operator에 대해서만 정리합니다. filter (= RxSwift의 filter) Swift 표준 라이브러리에도 있고 모두가 익숙한 Filtering Operator의 기본입니다. Bool을 반환하는 클로저에 일치하는 값만 전달시킵니다. filter의 예시입..
· iOS/iOS Dev
https://developer.apple.com/news/?id=z6fu1dcu List of APIs that require declared reasons now available - Latest News - Apple Developer Apple is committed to protecting user privacy on our platforms. We know that there are a small set of APIs that can be misused to collect data about users’ devices through fingerprinting, which is prohibited by our Developer Program License Agreement. To develope..
· iOS/Swift
이번 WWDC23의 Expand on Macros 세션의 전반부 정리. (https://developer.apple.com/wwdc23/10167) Swift Macro는 컴파일러를 수정하지 않고 Swift 패키지에 배포할 수 있는 방식으로 boilerplate코드를 제거하고 Swift에 고유 언어기능을 추가 가능. 4가지 목적 1. Macro를 사용할 때 매우 명확해야 할 것. 2종류의 Macro. FreeStanding Macro: 코드에서 다른 항목을 대신함. #(pound)기호로 시작 Attached Macro: 코드 선언에서 attribute로 사용됨. @(at)기호로 시작 Swift는 이미 #과 @를 사용해서 특정 컴파일러 동작을 나타내고 있지만, Macro로 이를 확장할 수 있게 만듦. #이..
· iOS/iOS Dev
CryptoKit Documentation: https://developer.apple.com/documentation/CryptoKit (WWDC19)Cryptography and your apps: https://developer.apple.com/videos/play/wwdc2019/709/ (Cryptography and your apps 세션의 Introducing Apple CryptoKit 파트의 정리) CryptoKit에서 할 수 있는 것 Hash 함수: SHA-256, SHA-384, SHA-512 Symmetric-Key Cryptography Message Authentication Code: HMAC Authenticated Encryption: AES-GCM(Chacha20Poly..
· iOS/iOS Dev
GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework. Uber's cross-platform mobile architecture framework. - GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework. github.com RIBs는 Uber에서 만든 Cross Platform 아키텍쳐입니다. → 도입시 iOS와 Android가 동일한 아키텍쳐를 사용하여 플랫폼간 협업 및 비즈니스 로직 코드를 교차 검증할 수가 있다는 이점이 생깁니다. RIBs는 여러 Riblet(리블렛, 하나의 기능단위. 이하 RIB)으로 구성되며 Router, Interactor,..
· iOS/iOS Dev
(Xcode 15부터는 최소 버전이 iOS12 입니다🤩 개발자의 Inner peace!) 그리고 Xcode의 용량이 대폭 줄어들었습니다! (하지만 시뮬레이터들 미포함 용량입니다) Xcode Download 이제 개발자 사이트에서 Xcode를 다운로드 받을 때, 함께 받을 시뮬레이터를 선택해서 받을 수 있습니다. Code Completion 코드 자동완성이 좀 더 똑똑해졌다고 합니다. 예시로 PlantSummaryRow라는 Swift파일을 생성하고, 해당 파일에서 struct를 작성할 때 파일명을 자동완성에서 추천해줍니다. 일부 completion이 표시되는 방식을 개선. 기본 인수가 있는 함수를 호출할 때, 원하는 매개변수를 정확히 가져오는 것이 불편했던 것이 개선되었습니다. 기본 인수의 가능한 모든 순..
· iOS/Swift
What’s new in Swift - WWDC23 - Videos - Apple Developer Join us for an update on Swift. We'll show you how APIs are becoming more extensible and expressive with features like parameter packs... developer.apple.com if/else문의 향상 복잡한 조건을 기반으로한 let 변수를 초기화하려면 아래와 같은 복잡한 삼항 표현식이 나올수도 있습니다(있나!?). let bullet = isRoot && (count == 0 || !willExpand) ? "" : count == 0 ? "- " : maxDepth (R1, R2) func evalu..
Platforms State of the Union을 훝고 갑니다. 추후 각 세션 정리 예정입니다. Swift Swift Macros Boilerplate 코드를 좀 더 깔끔하게 만들어 줄 수 있는 방법입니다. 위처럼 @가 붙은 attribute일 수도 있고, 독립적으로 #이 붙은 형태일 수도 있습니다. 이 #URL Macro는 URL을 초기화하여 언래핑시켜주는 코드인데, 해당 Macro에서 Expand Macro를 통해 확인이 됩니다. 그 뿐만 아니라 유효한 URL String인지도 컴파일 타임에 체크해주고, 올바른 코드를 작성할 수 있도록 커스텀 피드백을 할 수 있게 해줍니다. fetchContent(_:completion:) 함수에 async/await을 사용하고 싶을 땐, 위처럼 @AddAsync..
https://www.apple.com/kr/newsroom/2023/05/apple-previews-live-speech-personal-voice-and-more-new-accessibility-features/ Apple, Live Speech, Personal Voice 등 새로운 손쉬운 사용 기능 사전 공개Apple이 오늘 인지, 시각, 청각 및 운동 능력에 대한 손쉬운 사용 소프트웨어 기능을 언어 장애가 있거나 관련 위험에 처한 사용자를 위한 혁신적인 도구와 함께 사전 공개했다.www.apple.com 얼마전 애플에서 WWDC를 앞두고 손쉬운 사용 기능의 대폭 업데이트에 대한 예고를 했습니다. 이번 출시 예고를 보면서 느낀건, '애플은 접근성 지원에 정말 진심이다. 그리고 방향성을 다시 한번 ..
· Refactoring
클래스로 묶으면 함수들이 공유하는 공통 환경을 더 명확하게 표현할 수 있고, 각 함수에 전달되는 인수를 줄여서 객체 안에서의 함수 호출을 간결하게 만들 수 있습니다. 그리고 이런 객체를 시스템의 다른 부분에 전달하기 위한 참조를 제공할 수 있습니다. 클라이언트가 객체의 핵심 데이터를 변경할 수 있고, 파생 객체들을 일관되게 관리할 수도 있습니다. (1) 함수들이 공유하는 공통 데이터 레코드를 캡슐화: 공통 데이터가 레코드 구조로 묶여 있지 않다면 '매개변수 객체 만들기'로 데이터를 하나로 묶는 레코드를 만들기 (2) 공통 레코드를 사용하는 함수 각각을 새 클래스로 옮기기: 공통 레코드의 멤버는 함수 호출문의 인수 목록에서 제거 (3) 데이터를 조작하는 로직들을 '함수로 추출'해서 새 클래스로 옮기기 아래..
· iOS/Combine
Operator는 Publisher가 내보내는 value에 대해 작업을 수행하는 메서드입니다. 각 Combine Operator는 Publisher를 반환합니다. 보통 Operator들은 Upstream의 이벤트를 받아서 이를 조작한 뒤, 조작된 이벤트를 소비할 Downstream으로 보냅니다. collect() ( = RxSwift의 toArray()) collect() operator는 여러개의 value 시퀀스를 하나의 배열 결과값으로 변환해줍니다. 아래는 collect() operator를 나타내는 마블다이어그램입니다. 마블다이어그램에 대한 설명은 RxSwift의 그것과 동일하기 때문에 지난글([RxSwift] Lifecycle과 마블다이어그램)로 대체합니다. 아래는 collect()의 예시입니다..
· iOS/Combine
( = RxSwift의 .asObservable()) Subscriber가 Publisher의 어떤 추가적인 세부정보를 알 필요가 없이 Publisher로부터 값만 수신하도록 하고 싶을 수 있습니다. 이럴 때는 .eraseToAnyPublisher() operator를 통해 Subscriber가 AnyPublisher로 인식하도록 만들어줄 수 있습니다. 아래는 예시입니다. var subscriptions = Set() // 1. PassthroughSubject를 생성 let subject = PassthroughSubject() // 2. subject에서 type-erase된 publisher를 생성 let publisher = subject.eraseToAnyPublisher() // 3. type..
SwiftyCody
 iOS.dev