목록전체 글 (21)
찹모찌의 기록일지

시작하기 앞서 참고한 블로그를 명시합니다.https://ios-development.tistory.com/908 [iOS - swift] Animation 테크닉 - 오토레이아웃, 단일 애니메이션, 연속 애니메이션, 스프링, 뒤집기 (au* 예제에서 UI 레이아웃을 코드로 편리하게 작성하기 위해 SnapKit 프레임워크 사용 (SnapKit 필수로 알아야 하는 것 포스팅 글 참고) 애니메이션에 사용될 뷰 준비 animationTargetView 선언 // ViewController.sios-development.tistory.com지금까지 AutoLayout은 Animation 적용이 제한적인 걸로 알고 있었는데, 우연찮게 한 블로그 글을 보고 작성합니다.기존에는 AutoLayout 적용을 못시켜 다른 ..

Clean Swift를 채택한 위치기반 숏폼 플랫폼 Layover에서 작성했던 Unit Test에 관한 이야기.1. Clean Swift란?Clean Swift를 처음 공부할 때 만들었던 발표 자료에서 발췌했다.VIP Cycle을 단방향으로 돌며 동작한다. Interactor에서는 Business Logic만 처리하고 Presenter에서는 데이터를 가공하여 ViewControlelr에서는 UI Logic만 동작할 수 있도록 책임을 분리한 것이 특징이다.이러한 구조속에서 Unit Test를 작성하려면 어떻게 해야 할까? Unit Test를 통해 어떤 동작을 확인해야 할까? 2. Clean Swift 속 Unit Test이번 Unit Test의 목적을 두 가지로 정했다.1) Business Logic이 올..
RxSwift는 반응형 프로그래밍으로서의 장점뿐만 아니라 Completion Handler로 발생하는 Clousre의 코드 depth 또한 해결할 수 있다. 기존코드와 개선한 코드를 비교해가며 이를 알아보자. 1. 기존 코드 기존 코드의 ViewModel, UseCase, Repository다. 사용하는 부분만 간단히 모아보면 // // InterestStocksViewModel.swift // Or-rock-Nari-lock import Foundation import RxSwift final class InterestStocksViewModel { private let loadInterestStocksUseCase: LoadInterestStocksUseCase private let checkToda..

현재 관심 종목의 일자별 시세를 알고, 그래프로 나타내는 주식 애플리케이션을 개발 중에 있다. 필자는 관심 종목 검색 및 일자별 시세 조회 기능을 담당하고 있는데, 이때 한국투자증권 API의 특징에 맞춰 기능 구현 및 MVVM과 RxSwift를 어떻게 활용하고 있는지에 대해 서술한다. 1. 프로젝트 구조 MVVM + RxSwift를 사용했다. 주식 애플리케이션의 특성상 현재는 일자별 시세 조회에 그치지만 더욱 외부 변화에 맞춰 애플리케이션이 동작할 필요가 있어보여 반응형 프로그래밍이 적합하다 판단했고, RxSwift의 특징인 반응형 프로그래밍과 잘 맞는 디자인 패턴이 MVVM이라고 생각했다. 2. 구현해야 하는 기능 검색 기능과 일자별 시세 조회 기능 중 일자별 시세 조회 기능을 먼저 진행하기로 하였다...

iOS Client의 역할을 맡아 개발을 진행하다 보면 개발 환경에 의존할 때가 있다. Server의 상태라던가, 아니면 기기의 DB라던가. 개발을 하면서 이 환경이 완벽하게 구성이 되기는 힘들 것이다. Network가 연결이 안 될 수도 있고, Server 측의 API가 아직 준비가 안 됐을 수도 있고, 기기 DB의 용량이 부족하다던가, 아니면 테스트할 데이터의 수가 부족하다던가와 같은 경우들이 있을 것이다. 이럴 때 환경에 의존하지 않고 Business Logic을 테스트하기 용이하도록 Mock을 활용할 수 있다. URLSession과 UserDefaults를 Mock을 활용해 기능을 구현하거나 테스트를 하는 법을 알아보자. 기본적인 원리 하나의 기본 동작이 되는 Protocol을 만든다. 그리고 그..

'NostalgiAlbum' 앱을 만들 때, 서버가 존재하지 않고 로컬에서만 동작하는 앱을 커스텀 파일 확장자 'nost'로 추출해 share sheet를 활용하여 앨범 공유 기능을 만든 이야기를 담고 있습니다. 처음으로 만든 iOS 앱은 앨범 앱으로, 사진을 내용과 함께 기록하고 앨범으로 저장할 수 있는 앱이다. https://apps.apple.com/kr/app/nostalgialbum/id6448299485 NostalgiAlbum 당신만의 앨범을 만들고 추억을 간직하세요. 사진에 그 때 느꼈던 감정을 기록해보세요. 친구들과 앨범을 공유하며 추억을 나눠요. [1] 앨범 만들기 - 앨범 표지를 NostalgiAlbum만의 표지를 사용 apps.apple.com https://app-in-app-..

필자는 광운대학교에서 LIG넥스원과 산학연계 프로젝트로 무인기 자율운항 프로젝트를 진행한 적이 있다. 이때, 무인기가 목적지까지 장애물을 피해 도달하도록 하기 위해 강화학습을 진행하던 중, 큰 난관에 봉착한 적이 있다. 이는 그 난관을 넘어서는 과정을 담은 이야기다. 프로젝트의 기본 틀 문제를 설명하기 앞서, 프로젝트의 기본 틀을 이야기하자면, Unity환경에서 Unity ML-Agents 플러그인의 내장 PPO 알고리즘을 활용하며 진행한다. 프로젝트의 기본 목표는 무인기가 장애물(정적, 동적)에 부딪히지 않고 목표지점까지 도달하는 것을 목표로 한다. 무인기가 목표물에 가까워지기 위한 기본적인 보상 함수는 다음과 같다. 목표물까지 얼마만큼 움직였나를 이전 목표물과의 거리와 현재 목표물과의 거리의 차로 판..

먼저 구현 요구사항 부터 이야기 해보자면.재생 화면의 내용이 길 경우 내용을 그라데이션 효과로 숨김 처리를 주고 터치 시 늘어나는 뷰를 구현해야 한다.결국 늘어나면서 올라오는 것도 동시에 되야 한다는 것이다.수행한 첫 결과는 다음과 같다.뭔가 의도대로 되는거 같긴 한데.. 뭔가.. 뭔가.. 아쉽다. 늘어나면서 올라가야하는데, 올라가고 난 뒤, 늘어나고. 줄어들 때도 마찬가지로 줄어든 뒤, 내려간다.이 경우가 왜 이렇게 일어나냐면, gradient Layer를 통해 세부 내용을 가리고, 올라갈 때 세부 내용을 가리고 있는 gradient Layer를 숨겨야 하는데 이 점이 순차적으로 일어나게 되어 그렇다. 동시에 일어나게 하면 참 좋을텐데... 어떤 방법이 있을까?고민해서 내린 결론은 다음과 같다.지금의 ..