일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Tuist Swift
- RxSwift
- Xcode 15 Thread
- SeSAC
- Subscribe
- JSON
- realm
- arc
- Firebase Analytics
- ios
- Swift Tuist
- 백그라운드 API 호출
- ribs
- privacyinfo
- Subject
- xcode
- Combine
- swift
- Background Tasks
- privacy manifest
- GCD
- observable
- backgorund에서 API 호출
- privacy report
- SwiftUI
- Xcode15 runtime crash
- Firebase
- 네트워크 통신
- Tuist
- Swift \.
- Today
- Total
목록iOS&Swift🍎/Swift (12)
천원의 개발
안녕하세요. 천원입니다. 오늘은 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..
안녕하세요. 천원입니다. 다른 분들의 Github 코드를 살펴보다가 재상용성이 좋아보이는 코드가 Adapter 패턴으로 작성되었다는걸 알고 공부해 보고자 정리합니다. Adapter 패턴 현재 특정 기능을 수행하는 인터페이스가 존재하는데 이와 비슷하지만 조금씩 다른 기능을 추가해야할 때 Adapter를 사용해서 사용하는 쪽에서 코드의 변경을 최소화하는 패턴, 코드의 중복을 방지하고 현재 서비스 중인 프로젝트에 대하여 변경을 최소화 할수있습니다. 구현 현재 인증 서비스가 구현되어 있었는데, Google 과 Naver 인증 서비스가 추가되는 시나리오를 구현해 보겠습니다. protocol AuthServiceType { func authenticate(username: String, password: Strin..
안녕하세요. 천원입니다. 이번에 KWDC2023을 방문 했었는데 모듈화 세션에서 카카오뱅크에서는 RIBs 아키텍쳐 패턴을 사용해서 개발을 한다는 이야기를 듣고 한번 공부해보고자 공식문서를 정리 해보겠습니다. RIBs ? RIBs는 Uuber의 크로스 플랫폼 아키텍처 프레임워크로 이 프레임워크는 많은 nested states(중첩된 상태)를 포함하는 대규모 애플리케이션용으로 설계되었습니다. 아키텍처인데 프레임워크라니 신기하네요. RIBs의 설계 원칙 - Encourage Cross-Platform Collabroation: iOS와 Android 단일 아키텍처의 사용이 가능 - Minimize Global States and Decisions: 잘 격리된(캡슐화) RIB을 통하여 코드 수정시에 전역상태의 ..