개발/Swift
-
TCA에서 AsyncStream 사용해서 타이머 구현하기개발/Swift 2025. 1. 15. 23:18
타이머를 구현 해야 했습니다TCA + SwiftUI 기반으로 구현중이라 여기에 걸맞게 구현해야 합니다그래서 Reducer에서 타이머를 구현하고 카운트다운 State를 설정하여View에서 바인딩하는 방식으로 구현하려 합니다 우선 AsyncStream 사용해본적이 없어서 이거부터 만들어봤습니다간단히 60 부터 0까지 반복문 + Task.sleep을 넣어 1초마다 호출되도록 하였습니다Task { for i in (0...59).reversed() { try await Task.sleep(nanoseconds: 1_000_000_000) print(i) }}// 59..58..57..56이제 저 i를 AsyncStream 에 담아서 계속 전송해주도록 할겁니다private func t..
-
[Tuist] 모듈 생성 및 테스트 환경 구축개발/Swift 2025. 1. 14. 22:07
Tuist를 활용하여 프로젝트를 모듈화하고, 각 모듈 내에 테스트 환경을 구축하는 구체적인 방법을 알아보겠습니다. 이는 개발 효율성을 극대화하고, 앱의 유지보수성을 향상시키는 데 큰 도움이 될 것입니다.프로젝트를 모듈화하는 것은 코드 재사용성을 높이고, 특정 기능에 대한 의존성을 명확히 하며, 빌드 시간을 단축하는 데 필수적입니다. Tuist는 이러한 모듈화를 매우 효율적으로 지원합니다.tuist edit 명령어를 실행한 후, 메인 앱 타겟의 의존성(dependencies) 설정을 살펴보면 다음과 같이 다양한 외부 라이브러리들이 설정되어 있는 것을 확인할 수 있습니다. dependencies: [TargetDependency] { return [ .e..
-
[Swift] XIB 만 가지고 이벤트 핸들링 하는법, xib cell 내부에 또 cell 이있는경우개발/Swift 2024. 12. 21. 19:23
XIB 만 가지고 버튼 이벤트 핸들링 하는법VC → xib(view) → button 의존 상황button 터치 이벤트를 VC에서 받아야함 근데 xib를 위한 커스텀 class 없는 상황xib와 class 파일을 묶어서 버튼 접근이나 버튼 액션을 처리하지 못하는 상황해결 방법xib 를 위한 class 를 생성하여 이벤트를 받아 처리한다tag를 사용한다.viewWithTag활용하여 이벤트 받아옴if let backgroundView = nib?.instantiate(withOwner: self, options: nil).first as? UIView { if let pastButton = backgroundView.viewWithTag(100) as? UIButton { pastButton.addTarge..
-
[Swift] ReactorKit 사용시 고민할 부분 (비즈니스 로직, Pulse )개발/Swift 2024. 12. 21. 19:16
View 이벤트와 비즈니스 로직 연동 고민다음 페이지 진입을 할지 말지가 비즈니스 로직의 결과값에 의해 결정 되어서 바로 바인딩을 할수가 없는경우 필요한 로직은 다음과 같다.버튼 클릭reactor -> usecase 에서 비즈니스 로직 이후 Bool 리턴 or 에러 리턴에러인경우 에러 노출 , true 인경우 API 호출응답 값 가지고 다음 페이지 진입클릭 바인딩에서 보통 다음 페이지 진입을 하는게 일반적 이지만다음페이지 진입을 할지 말지가 비즈니스 로직의 결과값에 의존하기 때문에 바로 바인딩을 할수가 없다. 따라서 로직 결과값이 State를 변경시키며VC에서는 State 바인딩을 통해 다음 페이지 진입 하는식으로 작업버튼 클릭 -> 로직 수행 (vc -> reactor -> usecase)로직 에러 -..
-
[Error] linker command failed with exit code 1개발/Swift 2024. 11. 24. 19:54
https://inf.run/V3b51 빌드시에 에러 발생Undefined symbols:Linker command failed with exit code 1 (use -v to see invocation) 내용이 이렇게만 나와 있어서 뭐가 문제인지 알수 없음 에러 자세히 보려면 error log 우클릭 → expand all Transcript 을 클릭하면 자세히 내용을 볼수있다. ld: warning: Could not find or use auto-linked library 'swiftXPC': library 'swiftXPC' not foundld: Undefined symbols: __swift_FORCE_LOAD_$_swiftXPC, referenced from: __swift_FO..
-
LiveActivity - Push Console로 테스트 해보기개발/Swift 2024. 10. 19. 17:13
푸시토큰 let activity = try Activity.request(attributes: activityAttributes, content: content, pushType: .token) print("activity.id \\(activity.id.lowercased())") Task { for await pushToken in activity.pushTokenUpdates { let pushTokenString = pushToken.reduce("") { $0 + String(format: ..
-
LiveActivity Dynamic island 구현하기개발/Swift 2024. 10. 16. 16:40
https://inf.run/iDaq4 SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대 iOS 아키텍처 강의 | 덤벨로퍼 - 인프런덤벨로퍼 | 복잡한 SwiftUI 상태 관리, TCA (The Composable Architecture)로 깔끔하고 견고한 앱을 만드세요. 실전 프로젝트 예제로 핵심만 빠르게 배웁니다. , SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대www.inflearn.com Widget 기본 구조import WidgetKitimport SwiftUI@available(iOS 16.1, *)@mainstruct LivaActivityBundle: WidgetBundle { var body: some Widget { LivaActivityLive..
-
Tuist활용하여 멀티 모듈 SwiftUI 프로젝트 생성하기개발/Swift 2024. 10. 15. 22:26
https://inf.run/iDaq4 SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대 iOS 아키텍처 강의 | 덤벨로퍼 - 인프런덤벨로퍼 | 복잡한 SwiftUI 상태 관리, TCA (The Composable Architecture)로 깔끔하고 견고한 앱을 만드세요. 실전 프로젝트 예제로 핵심만 빠르게 배웁니다. , SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대www.inflearn.com tuist init --platform ios --template swiftuituist init --platform ios --template swiftui 명령어를 사용하여 SwiftUI 용으로 프로젝트를 초기화합니다. 이때, 명령어는 반드시 빈 폴더에서 실행해야 합니다. tuist ..