Clean Swift 아키텍쳐에 대해 알아보겠습니다. Clean Swift HandBook 의 내용을 간단 정리해보려고 합니다. [1] Clean Swift가 나오게 된 배경 너는 MVC 패턴의 문제점을 인식하고(방대한 뷰컨트롤러) MVVM나 VIPER를 사용하려고 했을 것이다. 하지만 우리가 봤을 때 이 아키텍쳐들도 부족하다(??) 1. MVVM 단순히 massiveness가 viewController에서 viewModel로 이동한다. 너는 massive view controllers 대신 massive view models를 얻게 되는 것이다. MVVM는 RxSwift와 함께 쓰면서 인기가 늘었다. 하지만 대부분 너는 reactiveness가 필요하지 않다. (실시간 채팅을 만들지 않는 이상.) =>..
[1] 프로젝트 세팅 app target의 General settings 으로 가서 Supports multiple windows를 체크해주세요 이 옵션을 체크하면 XCode는 info.plist파일에서 Application Scene Manifest > Enable Multiple Windows를 yes로 바꿔줍니다. 이 key가 system에게 나의 앱이 multiple simultaneous scenes을 지원해!! 라고 알려주는 역할을 합니다. [2] 실험 이제 돌려보겠습니다. 1. 앱을 처음 런치할때, AppDelegate.swift > application(_:didFinishLaunchingWithOptions:) SceneDelegate.swift > scene(_:willConnectTo..
iOS13에서 Scene이라는 개념과 SceneDelegate가 등장하면서 Managing Your App's Life Cycle 문서에서 App-Based Life-Cycle Events 와 Scene-Based Life-Cycle를 나눠놓았습니다. 앱 생명주기와 관련 delegate 함수들에 대해 적으면서 정리합니다. 사실 완벽하게 이해는 못했지만ㅠㅠ (그래서 잘못된 설명일 수 있습니다..!!) "개발 공부는 나선형을 그리며 앞으로 나아가는 것이다. (이해가 안되는듯 되는 듯하면서 빙빙 돌지만 앞으로 나아가고 있는것이다!!!)" 라고 과동아리 선배가 말씀하신 것을 위안삼아봅니당.. 😭 [1] App's Life Cycle (앱 생명주기) 1. App-Based Life-Cycle Events (iOS..
iOS13부터 멀티 윈도우가 가능해지면서 UI Structure에 UIWindowScene이라는 개념이 등장했습니다. UISceneSession이라는 개념도 함께요..!! 그럼 UIScene, UIWindowScene, UISceneSession에 대해 간단히 살펴보겠습니다 [1] UIScene - 앱 UI의 하나의 instance 또는 복사본을 의미합니다. - 아래와 같은 상황에서는 세개의 scene이 있다 라고 말할 수 있습니다. - 특정한 session과 connection 정보들로 Scene을 만듭니다. - UISceneDelegate를 이용하여 Scene의 life-cycle events을 매니징할 수 있습니다. UISceneDelegate에는 아래와 같은 라이프사이클 관련 함수들이 있습니다. ..
[1] Consider size & size class instead of orientation portrait모드일때는 왼쪽 레이아웃, landscape모드일때는 오른쪽 레이아웃으로 나오게 해놨다고 합시다. 그럼 아래와 같이 아이패드 landscape 모드에서 split view를 띄우면 landscape일때의 레이아웃으로 나오겠죠...!!! 노우..!!! 우리가 원하는 것인 이런 레이아웃 인데 말입니다ㅠㅠ 그래서 orientation으로 분기하지 말고 Bounds 또는 Size Class로 분기하라고 하네요 [2] Think about how to respond to transition rotation & resizing 상태에 대해 인지하고 UI를 바꾸고 싶다면 아래의 함수들을 이용할 수 있습니다...
iOS 9부터 아이패드 멀티태스킹이 지원되었다고 합니다. slide over 또는 split view로 두가지 앱을 동시에 띄울 수 있는 것이죠! 관련 WWDC 영상으로는 Getting Started with Multitasking on iPad in iOS 9 가 있습니다. ⚠️ 멀티태스킹과 멀티 윈도우는 다릅니다...!! ⚠️ 멀티 윈도우는 iOS 13부터 지원가능한데, 멀티태스킹 처럼 서로 다른 두 앱을 각각 띄우는 것 뿐만 아니라 똑같은 앱을 두개 띄울 수 있는 것 까지 포함합니다. 메모앱을 두개 띄우고 텍스트를 입력하는 영상입니다. 멀티 윈도우 관련 WWDC 영상으로는 Introducing Multiple Windows on iPad 가 있습니다. [1] 멀티 태스킹 지원하는 방법 iOS 9 이..
옵져버블이 completed되고 난 후, 마지막 값을 테스트로 확인해보고 싶은 경우가 있다고 해보겠습니다. 이런 테스트 코드가 있습니다. 당연히 테스트가 실패하겠죠..?! RxBlocking을 쓰면 이 테스트는 성공합니다..!! toBlocking함수를 쓰면 Observable -> BlockingObservable로 바뀌고 BlockingObservable의 last함수는 시퀀스가 종료될때 까지 블러킹해주는 역할을 하기 때문이죠....!! (Blocks current thread until sequence terminates.) 그럼 BlockingObservable의 함수 몇가지를 더 알아보겠습니다. [1] first() 시퀀스의 첫번째 이벤트가 방출될때 까지 블러킹해줍니다. (Blocks curre..
1. 문제 폰트 파일을 프로젝트에 넣고 폰트 파일의 Target Membership 설정도 했으며 Info.plist 에서 추가해야하는 key, value 값도 추가했다. 하지만 이렇게 했을 때, 커스텀 폰트가 텍스트에 적용이 안되었다. 2. 해결방안 SceneDelegate > scene(_ scene: UIScene, willConnectTo…) method 에 아래의 코드를 추가해서 돌려보았다. for fontFamily in UIFont.familyNames { for fontName in UIFont.fontNames(forFamilyName: fontFamily) { print(fontName) } } 콘솔에서 Nanum을 검색하면 폰트네임이 NanumSquareR 로 들어가있다. 이렇게 폰트..
[1] NSManagedObjectContext를 여러개 사용하는 경우 보통 앱에서 하나의 managed object context를 사용합니다. (우리가 자주 쓰는 persistentContainer.viewContext) 하지만 여러개의 managed object context를 사용해야할 상황이 있습니다. 시간이 오래걸리는 작업을 viewContext에서 하면 메인쓰레드가 blocking 되는 상황에서요! 여러개의 managed object context를 사용할 때 유의할 점이 있습니다. Managed Object context A와 Managed Object Context B 가 있다고 가정해볼게요. 그리고 두개의 context에서 모두 persistent store에 저장되어있는 User 정보..
1. 문제 뷰컨트롤러에 텍스트 뷰를 올려주세요. 그리고 앱이 launch 된 지 5분후에 만개의 데이터를 만들고 저장하는 코어 데이터 연산을 해보겠습니다. CoreDataManager는 이렇게 구성되어있습니다. 그러면 텍스트를 타이핑하다가 5초 후에 CoreData 연산이 시작되면 아무리 타이핑을 입력해도 입력이 안됩니다. UI 담당인 메인 쓰레드가 blocking 되었기 때문이죠! CoreData 연산이 끝나면 다시 타이핑이 가능해집니다. 그 이유는 무엇일까요...?!?!?! 우리가 사용한 viewContext가 main queue에서 동작하는 친구이기 때문입니다!! 그래서 시간이 오래 걸리는 작업이라면, viewContext 를 사용하면 안됩니다. 사용자의 화면을 blocking 하기 때문이죠!!! ..
- Total
- Today
- Yesterday
- Django Firebase Cloud Messaging
- Flutter 로딩
- flutter build mode
- Flutter Text Gradient
- 장고 URL querystring
- Django FCM
- Sketch 누끼
- PencilKit
- flutter dynamic link
- github actions
- Django Heroku Scheduler
- Flutter getter setter
- Dart Factory
- 구글 Geocoding API
- 장고 Custom Management Command
- Flutter Spacer
- SerializerMethodField
- 플러터 얼럿
- Flutter Clipboard
- METAL
- flutter deep link
- 플러터 싱글톤
- ribs
- Watch App for iOS App vs Watch App
- DRF APIException
- drf custom error
- Python Type Hint
- flutter 앱 출시
- ipad multitasking
- cocoapod
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |