Compositional Layout이란? 요즘 앱들을 보면 단순히 TableView, CollectionView 하나로 이루어져 있는 경우보다 섹션별로 각각 다른 레이아웃으로 구성되어 있는 경우가 대부분이다. 과거에 나 또한 TableView에 CollectionView를 넣어서 화면을 구성했던 기억이 나는데, 기억상 데이터 전달을 할 때 어지러웠던 기억이 난다. 이러한 경우 Compositional Layout을 사용하게 된다면 유연하고 편리하게 화면을 구성할 수 있다. Compositional Layout 구성 Compositional Layout은 Layout, Section, Group, Item으로 구성된다 Layout안에는 Section들이, Section안에는 Group들이, Group안에..
BaseViewController란? BaseViewController는 UIViewController를 상속받는 커스텀 뷰컨트롤러를 뜻한다. 이러한 BaseViewController를 사용하는 이유는 개발자가 사용하기 편하게 커스텀 한 후 ViewController를 생성할 때 UIViewController가 아닌 BaseViewController를 상속받아 사용하기 위함이다. 기존: MyViewController: UIViewController 커스텀: BaseViewController: UIViewController -> MyViewController: BaseViewController BaseViewController에 들어가야 할 내용 중복적으로 사용하게 되는 부분들을 주로 넣는데 가령, - 앱..
iOS 신입 개발자로써 공부해두면 좋을 게 무엇이 있을까 고민하다가 HIG에 대해 자세히 공부한 시간은 없다는 것을 깨달아 남는 시간을 활용해 HIG를 정리하는 시간을 갖고자 했다. HIG란? Human Interface Guide의 약자로, 애플스러운 앱을 만들기 위한 디자인 가이드 라인 HIG가 필요한 이유 - 리젝 사유 대비 - 디자이너, 기획자와의 원활한 소통 앱 스토어에 2개의 서비스를 출시하면서 HIG를 따르지 않아 리젝이 된 경우도 있었고, 기획자 디자이너 분들이 설계한 화면을 보고 이 부분은 리젝 사유일텐데..? 이렇게 생각한 적이 있었기 때문에 내가 확실히 알아두어야 할 필요가 있다고 생각했다. HIG의 핵심 가치 1. 명확성(Clarity) - 글자는 어떠한 크기로 설정하던 알아보기 쉬..
대부분의 모든 서비스에서 필요한 로그인을 예제로 들어 RxSwift와 MVVM에 대해 공부해보고자 한다. snapkit과 then 라이브러리를 활용한 예제가 블로그에 잘 정리되어 있어서 해당 코드를 참고했다. 참고 사이트: https://pino-day.tistory.com/15 우선, 로그인 및 회원가입에서는 유효성 검증 과정을 필요로 한다. 유효성 검증 과정의 예시로는 이메일과 패스워드 형식이 맞는지, 텍스트 필드에 입력값이 존재하는 지 등이 있겠다. [ViewModel] ViewModel은 View를 위한 Model이라는 뜻으로 알고 있다. 즉, 현재 우리는 로그인 기능을 만들고 있으므로, ViewModel에는 로그인 기능에 필요한 비즈니스 로직이 들어가야 한다. 유효성 검증의 예시로 이메일과 패스..
쉽고 프로젝트를 App Store에 등록하고 1달 가량의 시간이 지났다. 심사에 통과하자 마자 개인정보처리방침 부분이 잘못되어 버전 업데이트(v1.0.1)를 다음 날 진행하고, 그 뒤로 딱히 버전 업데이트를 진행할만한 피드백을 받지 못했었다. 그러던 중 택배 API의 기간이 만료되어 해당 부분을 교체해주기 위해 앱 버젼을 업데이트해야 될 일이 발생했다. 그래서 전에 수정해야 될 사항들을 정리해 해당 기능들을 업데이트하고 다시 심사를 진행했다. 앱을 업데이트 하는 과정은 다음과 같다. 1. 해당 사진의 Version 부분을 해당하는 버젼으로 바꿔준다. 2. 그 뒤로는 앱 빌드와 동일하다. 실제 기기로 시뮬레이터를 변경 해준 후, Product -> Archive 클릭 후 Distribute App 클릭 3..
프로젝트 쉽고를 SwiftUI로 진행하는 것을 채택하고 비동기 프로그래밍으로 Combine을 채택했었다. 우선, RxSwift가 아닌 Combine을 채택한 이유는 SwiftUI와 Combine이 굉장히 궁합이 좋다고 알고 있었기 때문이다. 또한 Combine은 Apple에서 2019년에 만든 새로운 프레임워크이며, RxSwift의 애플 버젼이기 때문에 미래에 많이 사용될 것 같아서가 주된 이유이다. 이러한 이유로 Combine을 사용했고, 이에 대해 내용을 정리해보고자 한다. Combine 주요 구성 요소 Publisher Subscriber 객체에 변경되는 값을 내보낼 타입을 선언하기 위한 프로토콜이다. Output, Failure 타입이 제네릭으로 구현되어있다. Subscriber Publisher..
취업 준비를 하고 있는 요즘 자격요건에 RxSwift에 관련된 내용을 종종 발견할 수 있었다. 이전에 진행한 프로젝트에서는 RxSwift가 아닌 Combine을 활용해 작업을 진행했어서 RxSwift에 대한 내용을 정리해보고자 한다. RxSwift란? Swift에서는 비동기 프로그래밍을 할 때 RxSwift, Combine을 사용한다. 그 중 RxSwift는 Reactive eXtension + Swift로 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리이다. RxSwift를 사용하는 이유 Swift에 반응형 프로그래밍을 더해주어, 비동기 코드를 동기화 코드처럼 작성 가능 일관성이 없는 비동기 코드를 하나의 비동기 코드로 개발 가능 서로 다르게 구현한 로직을 조합..
swiftui 에서 firebase를 활용해 다음과 같이 사용자별로 이메일, 객체 배열을 저장했다. 이후, 구글을 통해 객체 배열을 삭제하는 함수를 작성했는데, 화면에서는 함수가 제대로 작동하는 것처럼 나왔지만, 실제 firebase에서는 데이터가 일부만 삭제되는 현상이 발생했다. 이러한 현상은 Date 타입을 사용하는 경우 발생한다고 한다. 현재 Package model 코드는 다음과 같다. struct Packages: Codable, Hashable { var timeStamp: Date var trackCompany: String var trackNumber: String var setTrackNumber: [String: Any] { return [ "timeStamp": self.timeSta..