일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- realm
- ios database
- Firebase Analytics
- swift 6
- Tuist
- swift
- JSON
- ios
- GCD
- xcode
- Combine
- Subscribe
- swift db
- ios swiftdata
- observable
- Firebase
- swiftdata
- RxSwift
- swift database
- Swift Tuist
- 네트워크 통신
- swift 5.9
- 카카오뱅크 ios
- KeyPath
- SeSAC
- SwiftUI
- Subject
- Tuist Swift
- arc
- ribs
- Today
- Total
목록iOS&Swift🍎/Swift (14)
천원의 개발
안녕하세요. 천원입니다.오늘은 Swift 6 의 변경점에 대해서 정리하고자 이렇게 글을 작성합니다. 지난 2024년 10월 17일 Xcode 16과 함께 Swift 6가 배포가 되었습니다. Swift 5가 배포된 후 5년 만의 정기 업데이트라고 합니다.또한 Swift의 10주년 기념의 배포라고 하네요. 공식 문서에 작성된 글들을 보면 Swift 팀에서는 Swift를 APP 개발을 위한 언어가 아닌 다양한 Platform에 지원이 가능한 언어를 목표로 하는 것 같습니다. ConcurrencyData Race 안전성을 달성하기 위한 여정은 여러 Swift 버전에 걸쳐 진행되었습니다. Swift 5.5에서는 async/await와 Actors가 도입되었고, Swift 5.6에서는 전달 가능한 Sendable ..
안녕하세요. 천원입니다.오늘은 ReactorKit을 학습하는 도중 직면했던 경험 이야기를 작성해 보려고 합니다. 회고 같은 느낌이라 편한 말투로 진행해 보겠습니당 Reactorkit의 예제 프로젝트를 확인해 보면 아래와 같이 propertyWrapper 기능을 활용하여 Pulse를 구현하였습니다. struct State { var value: Int var isLoading: Bool @Pulse var alertMessage: String? } propertyWrapper에 대해 간단하게 설명드리면 재사용될 프로퍼티들을 반복적으로 작성하지 않기 위한 기능으로 예제를 작성해 보면 UseDefaults를 활용해 사용자의 정보를 저장하고 싶다면 아래와 같이 모든 프로퍼티에 동일한 g..

안녕하세요. 천원입니다. 오늘은 UIKit과 함께 많이 사용되는 시스템 아키텍쳐인 Clean Architecture를 정리하고자 이 글을 작성합니다. 소프트웨어 개발 방법론 중 에자일의 창시자인 로버트 C.마틴 선생님이 작성하신 Clean Architecture는 그동안의 디테일만 다르고 유사한 목적을 가지는 다양한 아키텍쳐를 통합하기 위해 고안한 아키텍쳐 패턴입니다. 그동안의 아키텍쳐들은 모두 소프트웨어를 계층으로 나눠서 관심사를 분리하였는데 이렇게 하면 만들어지는 소프트웨어는 아래와 같은 특징을 가집니다. 1. Independent of Frameworks: 아키텍쳐는 소프트웨어 라이브러리의 존재에 의존하지 않는다. 이를 통해 시스템을 제한된 제약 조건에 끼워 넣을 필요 없이 프레임워크를 도구로 사용..

안녕하세요. 천원입니다. 최근 iOS 개발 트렌드에서 가장 핫한 'Modular Architecture'을 도입하기 위한 도구인 Tuist를 학습하고자 이 글을 작성합니다. Tuist를 처음 접해보신 분들도 프로젝트에 적용할 수 있도록 진행하겠습니다. Tuist Xcode의 프로젝트를 Swift로 생성, 관리할 수 있도록 도와주는 CLI 도구입니다. Swift를 사용해서 프로젝트를 관리하기 때문에 우리가 .xcodeproj, .xcworkspace 같은 파일들로부터 발생하는 Git conflict에 대한 걱정이 필요 없죠. 또한 관리 측면에서 더 많은 개발 편의성을 제공해 준다고 합니다. 성능적인 개선 또한 존재하는데 모듈을 static framework 형태로 만들게 되면 dynamic link가 감소..

안녕하세요. 천원입니다. RootRIB 설정하는 부분은 공식문서에 없어서 간단하게 정리해두고자 포스팅합니다. 먼저 기존 RIB들과 동일하게 생성해줍니다. 참고로 Owns corresponding view 체크하면 view없이 동작하는 RIB 만들 수 있습니다. SeneDelegate에서 launchRouter로 RootRIB 붙여줍니다. private var launchRouter: LaunchRouting? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure ..

안녕하세요. 천원입니다. RIBs 튜토리얼 진행하면서 상당히 바보같은 코드를 작성해서 반성 하고자 글을 작성해봅니다. 튜토리얼 튜토리얼을 진행하기 전에 우선 Root를 RIB을 직접 구현해서 LoggedOut RIB을 attach 시켜주고 진행을 하였습니다. 그리구 튜토리얼에서는 SnapKit을 사용해서 UI를 구성해주는데 저는 StoryBoard로 아래와 같이 구성하였습니다. 먼저 LogOut Button을 눌렀을때 실행하려는 함수를 LoggedOutPresentableListener 프로토콜에 선언 해주었구요. protocol LoggedOutPresentableListener: AnyObject { func logOut(id: String, pw: String) } 그런 다음 LoggedOutPre..