WooKoo Blog

물과 같이

swift 59

포카마켓 iOS 팀의 여정 (실시간 채팅) - EP04

안녕하세요포카마켓 iOS 팀에서 개발을하고 있는 WooKoo 입니다. 많은 서비스들에서 사용하는 실시간 채팅 기능이 저희 서비스의 여정에 대한 이야기를 조금 얘기해보고자합니다. 오늘은 기술적인 이야기와 코드들이 조금 있을 것 같아요!앱이 첫 출시까지 대략 반년이라는 시간이 걸렸는데요. 그 중에서 가장 시간을 많이 들였었던 피처였던 것 같습니다.왜냐하면 다른 피처들은 간단하게 제작할 수 있지만 채팅은 카카오톡처럼 이미 유저들에게 친숙한 기능들은 대부분 지원을 해야해서 참으로 어려웠습니다. 실시간 채팅이라는 피처가 어려운 이유는 크게는 소켓 핸들링, 채팅 타입별 다이나믹한 UI 이기 때문일 것 같아요 !소켓이랑 UI 핸들링과 관련 된 내용을 다뤄보고자합니다.  소켓우선 서버 개발자분과 당시소켓 서버 구축을 ..

개발/개발 2024.11.21

[iOS] - Quick/Nimble 문서로 Unit Test 배우기 - 2

https://lazyowl.tistory.com/374 지난 1편에 이어서 바로 시작하겠습니다. Nimble Assertions 를 사용하여 테스트 더욱 간결하게 하기 XCTest 로 개발한 테스트 케이스가 실패 할 경우 어떻게 나타날까요? 이렇게만 뜰꺼에요 우리는 이왕 정보를 얻을거 좀 더 많은 정보를 얻으면 좋겠죠? 무언가를 실패했는데? 그래서 뭔데? 등등 왜 실패했는지 원인을 찾는데 많은 시간을 들여요. 그래서 실패 시 이렇게 메세지를 작성했었죠 여기서 nimble 의 힘이 나타납니다! expect(sillyMonkeys).to(contain(kiki)) 이렇게 expect(). to() 를 이용하면 메세지를 작성하지 않아도 알아서 알려줍니다. Quick Example 과 Example 그룹으로 ..

개발/개발 2023.02.14

[iOS] - Quick/Nimble 문서로 Unit Test 배우기 - 1

지난 Unit Test 의 기본 개념에 이어서 https://lazyowl.tistory.com/370 [iOS] - Unit Test 기본 개념 공부하기 많은 개발자분들께서 테스트 코드를 작성이 중요하고 작성을 하고 있다는 것을 알게되었습니다. TDD 에 대하여 장단점을 논하면서 쓰자 쓰지말자 논쟁도 많았구요. 그러나 정말 중요한 것은 테 lazyowl.tistory.com 오늘은 Quick/Nimble 을 배워보려고합니다. Quick 문서가 너무나도 한국어로 잘되어있어서 배워보면서 정리해보려고합니다. Objective-C 와 라이브러리 설치, 프로젝트 설정 등은 과감하게 제외하고 테스트 관련 내용만 문서를 보고 정리하였습니다. https://github.com/Quick/Quick/tree/main/..

개발/개발 2023.02.14

[Swift] - Array의 Count 함수는 과연 속도 차이가 있을까?

오늘 회사에서 컬렉션 뷰의 스크롤 위치를 최하단으로 내리는 것에 의견을 나누었다. 하나의 방식은 indexPath 를 바인딩한 Array의 count -1 을해서 마지막 셀로 이동하는 것과 contentHeight 를 구해서 setContent 로 지정된 contentHeight 로 가는 방안이었다. 방식의 차이 말고 무슨 차이가 있을까 고민하다가 count 는 아이템 갯수를 세아려해서 더 느리지않을까? 라는 의구심하고 아니다 갯수는 안세아릴꺼다 메모리에 갯수자체가 이미 들어있을꺼다. 의견이 있었고 과연 배열의 갯수가 크면 count 의 속도 차이가 있을까?? 사실 count 의 동작 원리는 찾아보기 어려웠다. 그래서 그냥 속도 차이라도 ?? 정말 있는지 테스트 해보았다. 어레이에 999999개 를 센 ..

개발/개발 2022.11.01

[iOS] - Responder Chain

오늘은 Responder Chain 에 대해서 정리해보려고합니다. Responder에 대해서 먼저 알아야겠죠? Responder는 이벤트를 핸들링 및 이벤트에 반응 할 수 있는 객체입니다. UIResponder에서 상속된 클래스의 인스턴스들이죠 저희가 개발하면서 자주 사용하는 UIApplication, UIViewController, UIView(UIButton, UITextField 등) 모든 사용자가 이벤트를 발생시키는 것들은 responder 객체에 보냅니다. 예시를 하나 들어볼게요 한 화면에 뷰가 있고 그 안에 서브 뷰로 텍스트 필드가 있다고 가정합시다. 사용자가 텍스트필드를 탭하면 이에 반응하며 키보드가 올라오죠?? 가장 처음으로 이벤트가 발생한 텍스트 필드! 그것이 바로 first respon..

개발/개발 2022.08.04

[iOS] - MVVM 아키텍처 개선해보기

요즘 너무 바빠서 글 정리를 자주 못올렸네요 오늘은 포카마켓 iOS 팀에서 사용하고 있는 아키텍쳐 개선에 대해서 정리해보려고합니다. 우선 저희 iOS 팀은 아키텍쳐로 MVVM과 일부 ReactorKit을 사용하고 있습니다. MVVM은 회사마다 모두 조금씩은 다르게 사용하고 있는 것으로 알고 있고 MVVM 예제들을 많이 찾아봐도 조금씩은 다르게 사용하고 있었습니다. (모든 아키텍쳐가 조금씩은 회사마다 다르겠지만요 :] ) 저희는 ViewModel을 설계 할 때 흔이 알고 계시는 input output 프로토콜을과 ViewModelType 프로토콜을 사용해서 ViewModel을 설계했었습니다. 많이들 이렇게 사용하는 것으로 알고있는데 예제로 한번 보시죠 protocol FirstViewModelType { ..

개발/개발 2022.06.29

[iOS] - UIStepper 사용해보기

UIStepper 를 쓸 때 필수적을 사용하는 프로퍼티가 있다고합니다. let stepper: UIStepper = UIStepper().then{ $0.wraps = true $0.autorepeat = true $0.maximumValue = 11 } wraps 는 최댓값 최솟값에 도달했을 때 true일 경우에는 최솟값으로 바꿔주고 false일 경우에는 현재 값을 유지해준다고하네요! autorepeat은 사용자가 + - 꾹 눌렀을 때를 허용할건지!!! maximumValue는 안봐도 아시겠죠?? 최댓값을 설정하는겁니다!

개발/개발 2022.04.20

[iOS] - Xcodegen을 이용해서 모듈화와 컴플릭트에서 벗어나기

XcodeGen을 이용해서 협업 시 컴플릭트에서 벗어나보려고한다. 설치를 먼저해줘야하는데 설치는 brew install xcodegen 홈브루 설치되어있어야해요! https://brew.sh/index_ko Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 홈브루 외에도 다양한 방법 있는데 여기서 참고주세요 https://github.com/yonaskolb/XcodeGen GitHub - yonaskolb/XcodeGen: A Swift command line tool for generating your Xcode project A Swift command line tool for generating your Xcode project..

개발/개발 2022.04.17

Swift Lint 적용 룰

기본 Default 룰을 적용하면 엄청 워닝이 많이 뜨길래 필요한 디폴트 룰만 지킬려고 만들었다. 디폴트 룰을 전부 Disable 시킨 뒤 필요한 것만 주석처리해서 활성화 시켜주도록 하자!! 디폴트 룰 참고는 https://realm.github.io/SwiftLint/rule-directory.html Rule Directory Reference realm.github.io 레퍼런스 참고해서 필요한 것만 활성화! .swiftlint.yml 파일에 넣어주세용 disabled_rules: - line_length - closing_brace - closure_parameter_position - colon - comma - comment_spacing - compiler_protocol_init - com..

개발/개발 2022.04.11

[iOS] - Firebase crashlytics 연동하기

오늘은 Firebase의 기능 중에 Crashlytics를 연동하는 것을 정리해보겠다. 먼저 크래시틱스는 앱에서 크래시 났을 때 어떤 부분에서 발생했는지 리포트를 만들어서 보여주는 것이다!!! 오류추적이라고도하는 센트리라는 프로그램이랑 비슷하다! 구글 Firebase에서 제공해줘서 간단하게 구현할 수 있다. https://firebase.google.com/docs/crashlytics/get-started?hl=ko&platform=ios Firebase Crashlytics 시작하기 | Firebase Documentation Join Firebase at Google I/O online May 11-12, 2022. Register now 의견 보내기 Firebase Crashlytics 시작하기..

개발/개발 2022.04.11