분류 전체보기 73

Tuist(3) - 환경변수

기능적인 부분들은 전글에서 다 끝마쳤다. 이번글에서는 약간 감초가 같은 것들만 다룰 것이다. 4. 환경 변수를 이용하여 generate하는 방법 여태까지 진행한 단계에서 살짝 아쉬운 감이 있다. 바로 tuist generate를 사용했을때 무조건 Demo들도 같이 빌드 된다는 것이다. Demo앱들은 사실상 개발할때만 필요한 것이기 때문에 배포하려고 할때는 굳이 빌드를 할 필요가 없다. 우리는 이 과정을 위하여 환경 변수를 사용할 것이다. Tuist는 terminal에서 환경변수를 써서 이를 Project.swift에서 사용할 수 있게 되어 있습니다. 환경변수는 TUIST_[이름] 형태로 쓰면 Tuist가 읽을 수 있습니다. 따라서 generate할 당시에 배포를 위한 빌드냐 개발을 위한 빌드냐를 환경변수..

iOS 2023.02.13

Tuist(2) - 기존 프로젝트에 도입하기

전글에서는 Tuist 설치 및 시행방법 그리고 기본적인 Tuist의 구조에 대해서 알아 보았다. 이번글부터는 본격적으로 어떻게 기존 프로젝트에 Tuist를 도입하는지에 대해 글을 써볼 것이다. 3.Tuist Edit 3-1. 현재 프로젝트에 맞게 Tuist 디렉토리 생성하기 본격적으로 Project.swift 파일과 Project+Templates.swift 파일을 추가, 수정 하며 우리가 원하는 프로젝트의 형태로 만들어나갈 것이다. 그전에 일단 불필요한 파일들을 지워서 다음과 같이 만들어놓자. 안에 있는 Config.swift와 Project+Template.swift은 파일을 냅두고 코드들만 싹다 지워놓으면 된다. 그리고 다시 우리가 원하는 최종 형태의 구성물을 확인해보자. 우리의 최종적인 형태는 a..

iOS 2023.02.13

TUIST(1) - 설치,실행,기본구조

예전 회사에 있을때 부터 앱이 커짐에 따라 모듈화의 필요성을 느끼기는 했었다. 내부 서비스인 "Inpose" IOS의 앱의 규모는 cocoapod 제외하고 총 888개의 파일과 147,566의 line수를 가지고 있다. 작성한 프로젝트의 총 라인수는 다음과 같이 구할 수 있다. 터미널로 원하는 프로젝트로 이동하여 다음 명령어를 실행하면 알 수 있다. find . \( -iname \*.swift \) -exec wc -l '{}' \+ 프로젝트가 이것 하나만 있는 것이 아닌 외주로 받고 지속적으로 관리해준 앱 중에서도 이와 같은 규모를 가진것이 2 ~ 3 개 정도 있었다. 이런 프로젝트들은 특성상 개발하는 와중에 요구사항과 디자인이 많이 바뀌기도 하고 출시한 후에도 전면 리뉴얼을 할 만큼 수정사항이 많았..

iOS 2023.02.12

[프로그래머스] 카드 짝 맞추기

이 문제는 힌트를 얻고 나서 푼 문제 https://school.programmers.co.kr/learn/courses/30/lessons/72415 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제는 4x4 격자에서 같은 그림의 카드를 뒤집는 최소 횟수를 구하는 문제이다. 문제를 보자마자 4x4 격자의 크기, 최소 횟수 구하는 문제로 완전탐색을 해야하고 bfs와 dfs를 모두 사용해야 되겠다는 것은 알았다. bfs는 최단거리 dfs는 어떤 카드를 먼저 뒤집느냐에 따라서 결과가 달라지기에 필요하다. 하지만 일반적인 bfs와 다르게 ctrl + 방향키가..

알고리즘 2023.02.09

MVVM(6) - ViewModel

5. ViewModel Class? or Struct? MVVM에서 가장 중요시 되는 ViewModel에 대해서 이야기를 해볼까 합니다. MVVM자체가 개념만 있는 상황이다 보니 각 단체에 따라서 ViewModel을 구성하는 방법이 다릅니다. 이 와중에 가장 첫번째로 대두 되는 고민은 ViewModel은 Struct이냐? Class?이냐 일거 같아요. 그럼 어떤것이 더 ViewModel에 어울리냐에 먼저 Struct와 Class가 어떻게 다른지 간략하게 짚어보고 넘어가겠습니다. 5-1.Struct vs Class 애플 개발자들 사이에 "Struct가 Class보다 더 좋다!"라는 이야기가 가끔 나옵니다. 그 이유는 애플 공식 문서에 보면 다음과 같은 말이 나오기 때문입니다. 번역하면 "기본적으로 Stru..

iOS 2023.01.13

MVVM(5) - Coordinator

이번글은 Coordinator Pattern에 대한 마지막 글입니다. 앞선 글들에서 Coordinator Pattern으로 화면을 전환하는 법 그리고 Child Coordinator를 삭제하는 법에 대해서 알아보았습니다. 이번에는 Child Coordinator를 삭제하는 법에서 조금 더 수정된 형태를 소개해드려 볼까 합니다. 4. childCoordinator를 삭제 하는 법 (2) navigation pop 혹은 dismiss 이벤트를 캐치하기 위해서 UINavigationControllerDelegate와 UIViewControllerTransitionDelegate를 사용하는 것 까지 해봤는데 여기서 2%쯤 부족하다고 생각되는 부분이 있습니다. 바로 다음과 같은 상황입니다. 다음과 같이 하나의 C..

iOS 2023.01.05

MVVM(4) - Coordinator

2. 뷰 전환은 어디에서 하는가 전글에서 다루는 Coordinator의 연장선입니다. 전글에서는 View와 Coordinator가 소통,화면 전환하는 법 그리고 Coordinator의 기본적이 구성에 대하여 글을 썻습니다. 그리고 말씀 드리는 와중에 Coordinator패턴에서는 객체를 잃지 않으려고 childCoordinator를 사용한다고 말했습니다. 이번에는 화면을 닫으면서 혹은 뒤로가면서 Coordinator가 이를 어떻게 감지하고 childCoordinator에서 삭제하는 지에 대하여 글을 써보겠습니다. 3. childCoordinator를 삭제 하는 법 우선 Coordinator를 쓰지 않을때는 어떻게 할까요? 그냥 self.navigationController?.popViewControlle..

iOS 2022.12.27

MVVM(3) - Coordinator

2. 뷰 전환은 어디에서 하는가 전글에 이어서 이번에도 뷰 전환은 어디에서 이루어지는가에 대해 알아보겠습니다. 전글에서는 뷰 전화를 View에서 하는 법과 ViewModel에서 하는 법을 알아보았고 이번 글에서는 제 3의 책임자를 두어 화면 전환을 이루는 패턴 Coordinator 패턴에 대해서 알아보겠습니다. 1. Cooridnator의 기본 우선 coordinator의 기본 뼈대 부터 간단하게 보겠습니다. Coordinator 패턴은 Soroush Khanlou라는 개발자로부터 탄생한 개념입니다. Khanlou의 글 중에서 이런말이 나옵니다. Don’t forget, the view controller base class is prefixed with UI. It’s view object, and h..

iOS 2022.12.23

MVVM (2)

2. 뷰 전환은 어디에서 하는가 mvvm에 관한 두번째 글은 뷰 전환은 어디에서 하는 것인가에 대한 글입니다. 화면 전환에도 몇 가지 방법들과 개념이 제시되었고 크게 보면 다음과 같은 3가지 개념이 주를 이루고 있다. 화면 전환은 화면에 관한것이니 view에서 핸들링 하는게 맞다. 혹은 view는 자기 화면에 대한 것만 들고 있어야 하니 viewModel에 있어야 한다. 혹은 viewModel, view둘다 화면전환에 있어서 책임을 가지고 있는 것이 옳지 않아 제 3의 책임자를 두어야 한다. 이중에 어떤게 맞고 어떤게 틀리다라는 것은 없습니다. 자신의 프로젝트 상황에 맞춰서 개념을 선택하고 개발하면 됩니다. 1. 첫번째 방법: view에서 화면전화 첫번째는 view에서 뷰전환을 하는 방법입니다. 보통 U..

iOS 2022.12.19

MVVM (1) - 바인딩 방법들

이번에는 MVVM에 관하여 글을 한번 쓰겠습니다. MVVM이 무엇인지에 대하여는 워낙 많은 블로그에 소개되어 있어 생략하고 MVVM에 대한 저의 주관적인 관점을 중점적으로 설명 해드리겠습니다. 1. 바인딩 방법들 첫째는 바인딩 방법들에 관한 것 입니다. MVVM이라고 하면 제 생각엔 ViewModel이 가장 중요한 컴포넌트인 것 같습니다. ViewModel과 View를 바인딩 함에 있어 크게 3가지 정도의 분파가 있는 것 같습니다. 1. 첫번째 방법: Protocol 및 콜백 이용한 바인딩 방법 제 3의 라이브러리에 의지하지 않고 View와 ViewModel을 바인딩하는 방법입니다. 대충 요런식입니다. 필자는 이게 MVVM이다 라고 처음 봤을때 그럼 내가 해오던 MVP와 뭐가 다른건지 굉장한 혼돈이 왔었..

iOS 2022.12.09