시뮬레이터로 동작되던 앱을 디바이스에서 실행시켰을 때 다음과 같은 에러가 발생했다. Library not loaded: @rpath/Swinject-Dynamic.framework/Swinject-Dynamic 해당 에러는 다이나믹 프레임워크를 임베디드 시켜주지 않아서 발생한 현상이다. 따라서 다음 사진과 같이 Dynamic Framework가 "Do Not Embed" 상태라면 "Embed & Sign"으로 바꿔주면 문제가 해결된다. 만약, 그래도 빌드가 되지 않는다면 다음 링크를 참조하면 될 것 같다. https://velog.io/@yujinj/iOS-Library-not-loaded
compositional layout 에서 dequeuereusablesupplementaryview를 사용하면 다음과 같은 에러가 자주 일어나는데 명확한 이유를 알려주지 않는다... 그냥 일반적인 에러도 저렇게 나타내주는거 같은데 일단 내가 경험한 것은 headerview에 viewmodel이 존재하지 않는데 viewmodel을 대입시키려고 할 때 저런 에러가 나왔다.
Repository Patten이란? 간략하게 말아서 데이터 출처(로컬 db인지, 원격 db인지)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 것을 Repository Pattern이라고 한다. MVVM으로 따지면 ViewModel 밑에 Repository라는 계층을 하나 더 두어서 ViewModel이 오직 비즈니스 로직에만 집중할 수 있게 한다. (데이터를 로컬과 서버 중 어디서 가져올지, 또 어떻게 가공할지는 Repostitory가 하기 때문입니다.) 그리고 CleanArchitecture로 가정하면 Domain 계층의 UseCase 밑에 Repository라는 계층을 하나 더 두어, Usecase가 오직 비즈니스 로직에만 집중할 수 있게 한다. 장점을 정리하면 다음과 같다. Re..
개발을 시작한 이래로 지겹게 들었던 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 등 배포 과정의 모든 일련의..
새로운 프로젝트를 시작하면서 Tuist를 도입해 모듈화를 진행하게 되었다. 우선, 완성된 모듈 구조는 다음과 같다. 다른 프로젝트의 tuist graph는 거미줄처럼 모듈들이 여러개가 존재하는데, 그에 반해 아직 초기라 그런지 조금 초라하긴 하다.. 생각보다 tuist를 구성하는 일이 쉽지 않아서 하루죙일 삽질했던 것 같다. 일단 각 모듈의 역할은 다음과 같이 정의했다. App 제품으로 나가는 애플리케이션을 관리하는 프로젝트로, AppDelegate, SceneDelegate, Push Notification, Widget 등을 다루고, 앱 시작시 어떤 기능으로 시작할지, 그리고 값 초기화, 설정 초기화 등을 처리하는 프로젝트입니다. Features DesignSystem, Service 모듈에 의존해 ..