- GOF
- 전달인자 레이블
- 스위프트
- lineBreakMode
- UILabel
- orthogonalScrollingBehavior
- github
- Swift
- LanguageGuide
- 애플사이다
- 애플
- TOSS
- CollectionView
- IOS
- Split View
- Human Interface Guidelines
- DiffableDataSource
- lineBreakStrategy
- Apple
- Keychain
- 디자인패턴
- 앱개발
- Accessibility
- HIG
- appstore
- WWDC
- Git
- 야곰아카데미
- iPad
- iTerm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Today
- Total
목록전체 글 (76)
애플사이다의 iOS 개발 일지

문제 상황 현재 로그인한 사용자의 id, nickname, email 등의 User Data는 어떻게 관리하는 게 좋을까? 앱을 사용하는 동안 로그인 상태가 수시로 변경될 수 있으므로 여러 화면에서 접근할 수 있어야 한다. 예를 들어 앱을 최초실행 했을 때 로그인화면에서 sign in 할 수 있고, 로그아웃 화면에서 sign out 할 수 있고, 다시 비로그인 상태에서 좋아요 버튼을 눌렀을 때 modal로 띄워지는 로그인 화면에서 sign in 할 수도 있다. 이때 여러 화면에서 어떠한 시점에 접근하더라도 로그인 상태는 동일해야 한다. 따라서 공유 리소스 형태로 관리하고 싶다. 위 상황에서 Singleton 패턴이 해결책이 될 수 있다. 패턴 설명 클래스의 인스턴스를 1개만 만들고, 이 인스턴스에 대해 ..

ModernRIBs README 하단을 보면 Xcode Template을 설치하라고 나온다. 설치 방법을 간단히 알아보자. (script라길래 Build Phases의 Run script 말하는 줄 알았는데 아니었음..) 참고로 Template을 추가하면 new file을 생성할 때 아래처럼 선택이 가능하다. ModernRIBs Template 설치 방법 1. 프로젝트 파일을 준비한다. 2. CocoaPod 또는 SPM으로 ModernRIBs 프레임워크를 설치한다. 3. https://github.com/DevYeom/ModernRIBs 코드를 다운받는다. 4. 해당 폴더로 이동한 뒤 터미널에 아래를 입력한다. $ cd tooling // Template 파일이 tooling에 위치해있음 $ sh ins..

문제 상황 여러 개의 프로퍼티, 중첩 타입 등을 지정해야 하므로 초기화 과정이 복잡한 객체가 존재한다. 이때 모든 가능한 매개변수를 포함하는 거대한 생성자를 만들게 되는데, 가독성이 떨어지고, 사용하지 않는 매개변수가 존재하므로 비효율적이라는 문제가 있다. 패턴 설명 복잡한 객체를 단계별로 생성하는 패턴이다. 객체를 생성하는 과정에서 해당 객체에 접근 불가하도록 막는다. Builder를 통해 객체를 초기화하고, 외부에서 프로퍼티값을 메서드 주입받아 객체를 완성한다. Director를 선택적으로 활용할 수 있다. Build 관련 메서드들의 실행 순서를 정의하는 역할을 담당한다. 객체를 종류별로 구분하여 생성 과정을 분기처리하고자 할 때 활용하면 좋다. 장점 복잡한 객체를 단계적으로 생성하거나, 생성 단계를..

개발자 글쓰기 모임인 “글또”의 8기로 참여하게 되었다. 다른 개발자들과 함께 좋은 글을 쓰는 방법에 대해 고민하고 성장하고 싶다는 것이 계기였다. 글또에 공유할 첫 번째 글로 를 작성해보려 한다. (2023년으로 넘어온지 벌써 한 달이 지난 시점이라 많이 늦었지만... 그래도 글또 덕분에 바쁜 와중에 글을 쓸 동기부여를 받았다.) 2022년을 한 줄 요약하면 “노베이스로 부트캠프 7개월 과정을 거치고, 5개월 뒤 iOS 개발자로 취직했다.” 이다. 이걸 좀 더 풀어보자면 “5년간 쌓아온 커리어를 접고, 야곰아카데미 부트캠프에서 7개월 동안 공부하고, 제주 한달살이로 워케이션하면서 개인 앱을 출시하고, 수십 번의 탈락 끝에 아이디어스의 iOS 개발자로 취직했다.”가 된다. 그 과정에서 느낀 것, 배운 것..

Swift 문법을 배우는 것과 RxSwift를 배우는 것은 큰 차이가 있었다. Swift는 처음부터 차근차근 배워야 하지만 RxSwift는 활용 방식이나 관련된 Operator가 너무 다양해서 필요한 것을 잘 추려서 써야한다. 그래서 Rx를 배우는 데 많은 시행착오가 있었다. ViewModel-ViewController를 binding 하는 기초 예제를 정리해보려고 한다. 언젠가는.. 겨우 Observable, BehaviorSubject, PublishSubject를 잘 쓰게 된 이후로는 이것만 썼다. 그런데 Rx의 기능을 충분히 활용하고 있지 못한 것 같아서 그 다음 단계로 UI를 안전하게 처리하기 위한 Bind, Driver, Relay를 배웠는데 매우 유용했다. 이 내용을 간단히 소개해보려고 한다..

GoF 디자인 패턴 중 하나인 Abstract Factory 패턴을 정리했다. 이 패턴은 예시코드부터 보는 것을 추천한다. - Ref : 도서 , Alexander Shvets 저 문제 상황 가구 판매 앱 개발과정에서 세트 제품군 (a family of reloated products)이 있다. (ex. 의자, 소파, 커피테이블) 또한 해당 세트 제품군에는 여러 스타일의 변형 (variants)이 있다. (ex. 아르데코, 빅토리안, 현대식) 고객이 가구를 주문하면, 동일한 스타일로 가구세트를 통일해야 하는 상황이다. 또한 새로운 제품 (새로운 스타일)이 자주 추가되므로 매번 기존 코드를 수정하는 번거로움을 피하고 싶다. 패턴 설명 이 패턴은 말로 설명하면 복잡한데, 예시를 보면 매우 쉽다. 😞 요약 :..

GoF 디자인 패턴 중 하나인 Factory Method 패턴을 정리했다. - Ref : 도서 , Alexander Shvets 저 문제 상황 물류관리 앱을 개발하는 과정에서 먼저 Truck (트럭) 운송 처리 로직을 만들었는데, 얼마 뒤 Ship (선박) 등 추가적인 운송수단 처리가 필요하게 됐다. 대부분의 코드가 기존의 Truck 클래스에 결합되어 있어 코드 재사용성이 떨어지는 문제가 있는 상황이다. 패턴 설명 요약 : 부모클래스에서 객체 생성 인터페이스를 제공하며, 동시에 자식클래스가 객체의 유형을 변경하여 생성 가능하도록 하는 패턴이다. Product, Creator 역할이 필요하다. 1. Product 일반적인 객체 생성 코드를 부모클래스의 팩토리 메서드 내부에 배치한다. 팩토리 메서드는 생성한..

맥북의 기본 화면녹화 기능을 사용하면, 소리가 포함되지 않는 문제가 있었다. iShowUInstatnt는 유료화됐고, SoundFlower는 M1/Big Sur 이후 비정상 작동해서 BlackHole을 사용하게 됐다. 다중출력기기 설정이 필요한데 매우 쉽다. 1. BlackHole 설치 Existential Audio에서 최상단의 BlackHole 2ch 버전을 다운받으면 된다. 이메일 인증만 하면 무료로 사용 가능하다. 이때 사운드 설정에서 출력을 BlackHole 2ch로 설정하면, 화면녹화 시 소리가 포함된다. 하지만 스피커 출력이 되지 않아서 화면녹화 도중에 소리를 들을 수 없다. 그래서 아래의 다중출력기기 설정이 필요하다. 2. 다중출력기기 설정 오디오 MIDI 설정에서 다중출력기기 설정을 해야..