Tuist를 활용하면서 터미널에 $tuist graph 명령어를 실행시키면 현재 모듈의 구조가 어떤지 다음과 같이 그림으로 나타내준다. 해당 그림을 살펴보면 Snapkit, Swinject와 같이 노랑색에 가까운 모듈이 있고, Alamofire, Then과 같이 빨간색에 가까운 모듈이 존재한다. iOS에서의 프레임워크의 종류는 다음과 같이 두가지가 존재한다. 1. Static Framework: Do not embed(복사) 2. Dynamic Framework: Embed(참조) 위 그림에서 빨간색 모듈은 Static Framework, 노란색 모듈은 Dynamic Framework를 뜻한다. static & dynamic 차이점 - 차이점은 컴파일된 코드를 참조하는 방식이다. (프레임워크 생성 시 디..
시뮬레이터로 동작되던 앱을 디바이스에서 실행시켰을 때 다음과 같은 에러가 발생했다. Library not loaded: @rpath/Swinject-Dynamic.framework/Swinject-Dynamic 해당 에러는 다이나믹 프레임워크를 임베디드 시켜주지 않아서 발생한 현상이다. 따라서 다음 사진과 같이 Dynamic Framework가 "Do Not Embed" 상태라면 "Embed & Sign"으로 바꿔주면 문제가 해결된다. 만약, 그래도 빌드가 되지 않는다면 다음 링크를 참조하면 될 것 같다. https://velog.io/@yujinj/iOS-Library-not-loaded
개발을 시작한 이래로 지겹게 들었던 TDD.. 오늘은 TDD가 무엇이고, TDD의 장단점에 대해서 살펴보겠다. TDD란? TDD란 테스트 주도 개발(Test Drvien Development)을 뜻한다. 소프트웨어를 개발하는 여러 방법론 중의 하나로써, 제품이 오류 없이 정상 작동하는지 확인하기 위해 모든 코드는 테스트를 거치게 된다. TDD에서는 제품의 기능 구현을 위한 코드와 별개로, 해당 기능이 정상적으로 움직이는지 검증하기 위한 테스트 코드를 작성한다. 테스트가 실패할 경우 테스트 통과를 위해 코드를 수정하고, 테스트가 성공할 경우 성공한 코드를 리팩토링하는 과정을 거친다. 이를 그림으로 표현하면 다음과 같다. 그렇다면 이 TDD의 장점이 무엇이길래 많은 곳에서 이를 활용하려고 하는것일까? 해당 ..
개발자들간에 작업을 할 떼 커밋 컨벤션을 통일하기 위해서 작성 양식같은 것을 설정하곤 한다. 기능을 추가할 때는 feat, 버그를 수정할 때는 fix와 같은 타입을 쓰면서 작업을 하는데 간혹 이건 어떤 타입의 커밋이지..? 헷갈렸던 경험이 있다. 그럴때마다 작성해두었던 커밋 컨벤션 작성 양식 페이지를 들어가 찾아봐야만 했고, 이러한 방식이 그닥 효율적이지 않다고 느끼고 있던 찰나 commit template을 따로 설정할 수 있다는 사실을 알게 되었다. commit template을 작성하는 방법은 다음과 같다. commit template 생성 방법 (터미널 기준) 1. 터미널에서 .git이 있는 현재 프로젝트 폴더에 다음 명령어를 입력 vi .gitmessage.txt 2. .gitmessage.tx..
iOS앱의 경우 배포 뿐만 아니라 개발 과정에서도 복잡한 인증이 필요하다. Xcode에다가 이 앱을 개발한다는 개발자 프로그램 인증서와 Profile을 등록해야 되고, Appstore Connect에 앱을 업로드할 때도 이러한 인증 과정이 필요하다. Fastlane을 사용하더라도 이 인증 과정은 진행해야 하는데, 크게 두 가지 방법이 있다고 한다. 1. Cert,Sigh를 이용하는 방법 2. Match를 이용하는 방법 Cert,Sigh는 유저가 특별히 따로 설정해줄 필요는 없고, 애플 계정을 제대로 입력해뒀고, 인증서를 로컬 Keychain에 넣어줬다면 알아서 인증을 진행해주는 방식이다. 심지어 로컬에 인증서가 따로 없더라도 Cert,Sigh가 알아서 인증서와 프로필을 다운받아 진행해준다고 한다. Mat..
새로운 프로젝트에 적용해볼 것들을 회의하다가 팀원이 배포 자동화를 적용해본 적이 있냐는 질문을 했다. 아키텍처, 라이브러리에 대해서만 생각하다가 배포 자동화라는 말을 들으니 아직 내가 경험해보지 못한 것이 많다는 것을 깨달았고, 곧바로 이번 프로젝트에 적용 해보려 한다. (TDD도 언젠가는..) 물론 지금까지 개인, 회사 앱을 배포한 경험이 10번 정도 밖에 되지 않았긴 하지만 하나의 iOS 앱을 배포하기 위해서는 꽤나 번거로운 과정들이 있다는 것을 알고 있었다. 그리고 이러한 배포를 간단하게 시간을 절약하며 할 수 있는 방법인 Fastlane을 알게 되어 이를 적용해보려 한다. Fastlane이란? Fastlane은 ruby 기반 오픈소스 라이브러리로 Android, iOS 등 배포 과정의 모든 일련의..
기존에 SwiftUI를 활용해서 만들었던 택배조회 서비스를 UIKit으로 개발하는 작업을 간간히 하고 있다. 기존 기획에는 다음과 같은 TextField가 존재했었다 화면을 보면 선택되지 않았을 시에는 border가 없다가 텍스트필드가 선택되는 경우 보라색이, 에러가 발생했을 경우(가령, 이메일 형식 아님) border 색과 placeholer 텍스트이 변하고, 텍스트 필드가 흔들리는 애니메이션을 추가하려고 했다. 그러나 SwiftUI를 활용할 당시에는 이 모든 기능을 개발하는데 어려움을 겪어서(지금 하면 할 수 있을 것 같기도..) 포기했었는데, 이번에 UIKit으로 개발하면서 해당 기능을 custom textfield를 통해 구현했다. 전체적인 로직은 다음과 같고, shaking과 같은 함수나 해당 ..
NotificationCenter란? NotificationCenter에 어떤 이벤트가 발생했을 때 어떤 일이 처리될 지를 정의, 등록, 관리하는 것 NotificationCenter를 사용하면, 싱글톤과 비슷하게 클래스마다 데이터를 주고받기가 편해진다. 대신 NotificationCenter를 사용하는 모든 클래스에 NotificationCenter에 대한 의존성이 생긴다는 단점이 존재. 하나의 VC가 아닌 여러 개의 VC를 통제하기에 좋은 방법이다. 1:1 보다는 1:N에 사용하려고 주로 사용하는 것이 NotificationCenter인듯. Nofication은 유저에게 무언가 알려주는 역할이 아닌, 애플리케이션 내에서 정보를 전하기 위해 "알림을 방송한다"는 역할을 가지고 있다. 하지만 이 알림 즉..