일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- GCD
- Firebase
- swift
- combinecocoa
- 카카오뱅크 ios
- SwiftUI
- swift 6
- KeyPath
- Swift Tuist
- Firebase Analytics
- ios
- swift database
- JSON
- Tuist Swift
- xcode
- uitableviewdiffabledatasource
- arc
- Tuist
- ribs
- SeSAC
- ios database
- Subject
- Combine
- realm
- RxSwift
- 네트워크 통신
- swift 5.9
- Subscribe
- swift db
- observable
- Today
- Total
목록iOS&Swift🍎 (66)
천원의 개발

안녕하세요. 천원입니다. 이 글은 제가 Tuist를 학습하면서 여러 프로젝트를 하나의 Workspace로 관리하는 방법을 정리한 글이며 앞선 포스팅을 확인하시면 조금 더 이해하기 편하실 것 같습니다. 여러프로젝트 관리하기 먼저 Workspace를 생성할 폴더를 만들어 줍니다. mkdir 폴더명 cd 폴더명 tuist init tuist init --platform ios editing tuist edit 그러면 위와 같이 Project파일이 생성되는데 우리는 Root를 Project로 만들지 않을 테니 삭제해 줍시다. 그런 다음 Project를 대신해서 Workspace 파일을 추가해 줍니다. import ProjectDescription let workspace = Workspace( name: "Tu..

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

안녕하세요. 천원입니다. Combine을 학습하면서 중요한 개념 중 하나인 Subject 정리하고자 글을 작성합니다. 1. Subject Publisher를 채택하고 있는 모습입니다. 덕분에 스트림을 생성할 수 있고, Subscriber를 통해서 방출한 이벤트를 받아올 수 있습니다. 다른 Publisher 들과 가장 큰 차이점은 send() 메서드를 사용해서 외부에서 이벤트를 주입시킬 수 있다는 점입니다. 예시 코드를 보자면 var subject = PassthroughSubject() // Subject 생성 subject.sink { value in print(value) } subject.send(2) // 2출력 원하는 시점에서 이벤트 방출이 가능하죠. 2. PassthroughSubject, C..
안녕하세요. 천원입니다. RxSwift를 사용하면서 너무 데이터 바인딩의 목적으로만 사용하는 것 같아 반성하고자 다양한 오퍼레이터들을 정리 해보려고 합니다. 자주 사용하는 오퍼레이터들은 별표를 붙여두었습니다. Transforming Observables - map ☆ 옵저버블의 각 항목을 변환하여 새로운 항목을 생성합니다. Observable.of(1, 2, 3) .map { $0 * 2 } .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) // 2, 4, 6 출력 - flatMap 옵저버블의 항목을 다른 옵저버블로 변환하고 병합합니다. Observable.of(1, 2, 3) .flatMap { Observable.of($0 * 2, $0 * 4..

안녕하세요. 천원입니다. 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..