Tilltue /@@1YN0 Ios 개발자입니다 ko Mon, 19 May 2025 01:16:30 GMT Kakao Brunch Ios 개발자입니다 //img1.daumcdn.net/thumb/C100x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FvcJaU82igPcaBdjQEZtuHEM2c90.jpg /@@1YN0 100 100 테스트 자동화 활용 - Github Actions /@@1YN0/85 * 이 글은 Swift 5를 기준으로 작성했다. * 글의 목적: &quot;클라이언트 개발자의 TDD&quot; 매거진은 그동안 테스트를 위해 학습을 했던 것을 공유하고자 한다. 테스트 자동화에 대해 살펴보자. 테스트 작성을 팀 단위로 실천하기 위해서 즉각 고려해야 했던 것은&nbsp;자동화 테스트였다. 프로젝트 크기가 크지 않은 상황에서는 로컬 빌드와 테스트 수행에 비용이 얼마<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FapkJdooeR5wD4ui5WwSX2dKmzy0.png" width="500" /> Mon, 31 Jan 2022 03:02:36 GMT Tilltue /@@1YN0/85 테스트 시작하기 #2 - 인터페이스 확장 시 테스트 코드의 변경 /@@1YN0/84 * 이 글은 Swift 5를 기준으로 작성했다. * 글의 목적: &quot;클라이언트 개발자의 TDD&quot; 매거진은 그동안 테스트를 위해 학습을 했던 것을 공유하고자 한다. 지난 글('테스트 시작하기') 에 이어 로거의 다음 요구사항에 대한 테스트를 작성해보자. &quot; 로그 레벨, 종류 ( network , 일반 등), 검색 키워드에 따라 필터링되도록 한다. &quot; 로그<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FB2bxP3BW4pjzKJmmLZI-Vm-PYRE.png" width="500" /> Sat, 29 Jan 2022 13:57:35 GMT Tilltue /@@1YN0/84 테스트 시작하기 - 무엇을 테스트해야 하며 어떻게 시작해야 할까? /@@1YN0/82 * 이 글은 Swift 5를 기준으로 작성했다. * 글의 목적: &quot;클라이언트 개발자의 TDD&quot; 매거진은 그동안 테스트를 위해 학습을 했던 것을 공유하고자 한다. 테스트 대상에 대한 고민 테스트를 시작했을 때 가장 첫 번째 고민은 &quot;무엇을 테스트해야 하는가?&quot;였다. 사실 우리가 작성한 코드는 모두 테스트 대상이다. 하지만 아직 테스트에 능숙하지 않다면 <img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FRec6GGc_nNaRhhedmzo5okq2vOk.png" width="500" /> Sat, 15 Jan 2022 14:46:56 GMT Tilltue /@@1YN0/82 Custom Publisher 만들기 - Swift Combine /@@1YN0/79 * 이글은 Swift 5 기준으로 작성했다. 비동기 작업을 Combine Puslisher 로 만들고 싶다면 어떻게 만들어야 할까? 아주 좋은 예제인 Alamofire 의 Publisher 를 살펴보자 https://github.com/Alamofire/Alamofire/blob/e0edbf64d4a69327ffb8e0f7cfe4e5a4fe36d124/<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FDkyyjNUVNcdYSXnEz_ikG2PJkV4.png" width="500" /> Sun, 05 Dec 2021 17:10:48 GMT Tilltue /@@1YN0/79 Swift의 lazy var - lazy var , global var, Type Properties /@@1YN0/71 Swift Document의 Properties의 lazy var를 설명하는 부분에 note 가 있다. Swift의 lazy var는 멀티 thread에서 접근시 이니셜라이즈가 한번 불릴것을 보장하지 않다는 내용이다. 의문의 시작은 이렇다.. Kotlin In Action 책을 읽다가 아래와 같은 내용을 알게 됐고 Kotlin에서는 기본적으로 lazy <img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fn7Pqz8nJ9zjmMAeIS5AzdFcVE-8.png" width="500" /> Thu, 03 Jun 2021 16:47:01 GMT Tilltue /@@1YN0/71 회고: 현업에서 TDD 실천하기 #1 - 회사 프로젝트에서 TDD 실천하기 /@@1YN0/69 2018년 6월의 글이다. 글의 말미에 &quot;약 1년간 TDD를 공부해왔는데, 무엇보다 현업 프로젝트에 TDD를 도입하게 되었던 것이 가장 큰 수확이다. 개인 프로젝트에서 많이 연습한 내용을 바탕으로 이제 현업 프로젝트에서 TDD를 수행할 텐데, 이 과정에서 얻을 수 있는 것들이 어떤 것들이 있었는지, 회고할 날을 기대해 본다.&quot; 이렇게 언급했었다. 약 3<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fhb4btFHpzrfUhQDRE-zMidR3Ce4.png" width="500" /> Sun, 16 May 2021 15:43:57 GMT Tilltue /@@1YN0/69 Swift Combine 변형 Operators - collect, map, replace, scan /@@1YN0/67 * 이글은 Swift 5 기준으로 작성했다. Combine 의다양한 Transform&nbsp;Operators 들을 알아보자 1. Collect finish 될때까지 이벤트를 모두 모아준다. * 주의: 갯수에 한계치가 없으므로&nbsp;메모리 관리에 주의해야 한다. subject.collect().sink { print($0) } receiveValue: { prin<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2F-zp-OMivkMePAwPYW_NBql-BZKU.png" width="500" /> Sat, 01 May 2021 16:22:44 GMT Tilltue /@@1YN0/67 Publishers, Subscribers 알아보기 - Swift Combine /@@1YN0/66 * 이글은 Swift 5&nbsp;기준으로 작성했다. Publishers, Subscribers 는 Combine 을 시작하고&nbsp;주요하게 접하게 되는 것들이다. 1. Publisher Protocol 애플 문서 :&nbsp;https://developer.apple.com/documentation/combine/publisher Publisher 프로토콜은 시간이 지남<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fn-p5_lxwzzkC4XM2i5zrCzBK36c.png" width="500" /> Sat, 24 Apr 2021 04:41:46 GMT Tilltue /@@1YN0/66 Swift Combine, 시작하기 - Combine 기본 개념 /@@1YN0/65 https://developer.apple.com/documentation/Combine Apple Document 의 Combine 을 보면 다음과 같이 설명된다. ( 번역이 미숙하지만... ) Combine - 이벤트 처리 연산자들을 통해 비동기 이벤트들을 핸들링 할 수 있게 하는 것 개요 컴파인 프레임워크는 시간에 따른 값 처리 Swift AP<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2F5E6fue8Gd9kkoifOOtCgnz_dpZQ.png" width="500" /> Thu, 11 Feb 2021 22:16:50 GMT Tilltue /@@1YN0/65 Swift Package 에 리소스 추가하기 - Swift Package Manager /@@1YN0/63 Swift Package Manager (이하 SPM) 에서 번들 리소스 포함이 가능하도록 변경되어서 기존에 가지고 있던 오픈소스에 SPM을 넣어보았고, 해당 내용을 공유하고자 한다. (XCode 12 사용) 일단 할일은 Package.swift 를 소스 저장소에 위치시키기만 하면 된다. 이 Package.swift 파일에 필요항목들을 정의만 하면 끝~<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FIGyQIbjP74GONwNt137jeKIhkFc.png" width="500" /> Sat, 26 Sep 2020 06:07:36 GMT Tilltue /@@1YN0/63 반응형 프로그래밍이란 무엇인가? - Erik meijer, React 2014 /@@1YN0/62 이 글은 에릭 메이어의 2014년 React 컨퍼런스에서 발표 영상을 좀더 이해하기 쉽게 정리해본 내용이다. [유튜브 영상링크] What does it mean to be reactive? 이 글을 쓰게된 이유 iOS 개발자로 RxSwift 를 약 5년째 사용하고 있지만, 반응형 프로그래밍을 누군가에게 명확하게 설명할 정도로 이해하고 있지는 않다고 생각<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FRur5YfTrr-QsND5eeQ72ooW8nFA.png" width="500" /> Sat, 08 Aug 2020 19:28:29 GMT Tilltue /@@1YN0/62 Swift Framework 에서 C 라이브러리 사용 - modulemap, sqlcipher, c, bridging header /@@1YN0/60 Swift framework 에서 C 라이브러리를 사용하는 방법에 대해서 정리하려고 한다. 시간이 부족하신 분들을 위해 결론부터 말하자면 굉장히 쉽다. 아래의 링크의 글대로 진행하면 된다. 아래의 글은 위의 방법으로 SQL cipher 라이브러리를 적용한 과정을&nbsp;정리해봤다. 작업이 필요한 프로젝트는 아래와 같은 구조의&nbsp;내부 Repository fra<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FfcJJWUTJgXfrmLRueO96tL1MNVY.png" width="500" /> Fri, 29 May 2020 18:21:26 GMT Tilltue /@@1YN0/60 RxSwift Scheduler Anatomy - Combine observable, Thread, Subject /@@1YN0/59 * 이 포스트는 RxSwift 5.0.1, swift 5.1 버전을 기준으로 작성되었습니다. Scheduler 관련 RxSwift 코드를 살펴보는 중에 다음과 같은 의문이 생겼다. 서로 다른 scheduler 에서 수행되는&nbsp;Observable의 이벤트는 합성될때 어떤 Scheduler를 기준으로 이벤트가 발생될까? 몇가지 실험을 해보았고 해당 내용으로 글<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FWOZhtJcgJh8SLO5HjDVk3TXgndE.png" width="500" /> Mon, 09 Dec 2019 16:28:02 GMT Tilltue /@@1YN0/59 Swift Package Manager를 적용하며 - cocoapods, carthage, spm /@@1YN0/58 * 이글은 XCode 11.2.1 , Swift 5.1.2 에서의 환경을 기준으로 작성했습니다. * 이 글은 Swift Package Manager ( 이하 SPM ) 을 설명하는 글은 아닙니다. SPM을 프로젝트에 적용하면서 발생했던 문제점들에 대해 공유하고자 한다. 먼저 왜 SPM을 사용하고자 했는지 정리해봤다. - Catalyst 를 사용해서 ma<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FWyMUYetvL6Iyx_fW0tLU891Xv5A.png" width="500" /> Sun, 17 Nov 2019 16:34:48 GMT Tilltue /@@1YN0/58 Flutter 앱 개발후기 - 개발후기, Flutter, Dart, 세관이 /@@1YN0/56 제주에서 한달간 집중근무 프로젝트를 수행하러 내려가기 약 일주일전 한달간 무언가 공부해볼까 고민해보던 차에, 종종 같이 공부했던 친구에게 Flutter 강의를 하나 소개받았다. 서로 끝까지 공부할수 잇도록 학습에 대한 자극을 주면서 진행해보자고 이야기 하고 공부하기 시작했다. 아래 강좌이다. 구글의 지원으로 가격이 단돈 10달러! 한달반에 걸쳐 강좌를 <img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fak-gRe29XA2HXzvSBowU7Tl7LFE.png" width="500" /> Wed, 21 Aug 2019 13:43:10 GMT Tilltue /@@1YN0/56 iOS 오픈소스 유닛테스트 톺아보기 - Alamofire, Kingfisher, promiseKit /@@1YN0/57 약 5개월전, 네트워크 관련 이슈를 검색하다가 우연찮게 Alamofire PR 하나를 보게되었다. travis-ci 에서 테스트가 실패해서 병합이 안되고있는 상황에 놓여있는 PR이었는데, 어떤 테스트인지 관심이 생겨 Alamofire 테스트 코드를 조금 살펴보았는데, 매우 촘촘하게 짜여지고 깔끔하게 잘 작성된 테스트였다. * travis ( 오픈소스에 한해<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FD-3IvaEQW3vIuGM9kEK5x6XKnhg.jpg" width="500" /> Tue, 20 Aug 2019 16:01:38 GMT Tilltue /@@1YN0/57 Test Doubles 정리 - Dummy, Fake, Stub, Spy, Mock /@@1YN0/55 테스트 더블이란? 실제 객체를 대신해서 테스팅에서 사용하는 모든 방법을 일컬여 호칭하는 것이다. (영화 촬영시 위험한 역활을 대신하는 스턴트 더블에서 비롯되었다.) 예를 들면 네트워크 API를 통해 어떤 정보를 받아서 수행하는 로직을 테스트 한다고 할때, 실제 네트워크 API를 그대로 사용하면, 테스팅은 네트워크 연결에 영향을 받을것이고, 항상 같은 조건에<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FNb77f1fPWaUqSDQxAclZqIUnI6k.jpg" width="500" /> Wed, 31 Jul 2019 15:34:53 GMT Tilltue /@@1YN0/55 옵셔널 타입 클로저 매개변수 파고들기 - swift, escape, noescape, closure agument /@@1YN0/52 시작하기 전에...이 글은 escape&nbsp;와&nbsp;&nbsp;noescape 를 설명하는 글은 아니다. 사건의 발단 얼마전 알고지내는 개발자들이 모여있는 채팅방에서 재미있는 주제가 던져졌다. func execute(handler: @escaping (() -&gt; Void)?) { } Swift 4 에서 위와 같이 작성하게 되면 에러가 발생한다. @escaping att<img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FBbomwuxq9FO_0yleXJ4c0V6vrjo.png" width="500" /> Tue, 18 Sep 2018 16:14:10 GMT Tilltue /@@1YN0/52 두번째 개인프로젝트 '세관이'의 성과 - 앱스토어 추천시 노출은 얼마나 될까? 프로모션 아트워크 진행과정 /@@1YN0/50 앱스토어 링크 계기 작년에 유럽여행에서 쇼핑을 하고 돌아 오면서 세관신고 예상 세액을 계산해주는 앱이 있었으면 좋겠다&hellip; 라는 여자친구(지금은 아내)의 아이디어에서 출발한 앱이다. 원래 TDD,MVVM-C를 공부하면서&nbsp;어썸블로그처럼 오픈소스로 공개할 예정이었는데 환율 API 키, Firebase appid 등과 재미를 위한 이스터에그 등이 포함되다 보니 <img src= "https://img1.daumcdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2F2apCF0eqV-RqAPqajywzO69JIdQ.png" width="500" /> Sun, 29 Jul 2018 16:45:54 GMT Tilltue /@@1YN0/50 Disposable 의 종류 - Boolean, Serial, Composite,RefCount... /@@1YN0/49 * 이 포스트는 RxSwift 4.3.1, swift 4.2 버전을 기준으로 작성되었습니다. 브런치에서는 코드보기가 힘들어서 아래의 예제 코드들을 gist 에 정리했다. 1. Disposables ( noOp, op ) NopDisposable, AnonymousDisposable - Disposables.create() Observable dispos Fri, 20 Jul 2018 10:36:41 GMT Tilltue /@@1YN0/49