[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 이..
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 하기 때문이죠!!! ..
TextKit 관련 wwdc영상인 TextKit Best Practices 를 보다가 TextKit 구조(?)를 한장으로 정리하였다. Reference https://developer.apple.com/videos/play/wwdc2018/221/ TextKit Best Practices - WWDC 2018 - Videos - Apple Developer Leverage the abilities of TextKit to provide the best experience possible displaying and editing text. Get the best performance out of... developer.apple.com
ReactorKit문서 를 보면 transform 함수에 대한 설명이 있습니다. transform은 mutate나 reduce 함수처럼 Reactor에 반드시 구현해야하는 함수가 아닙니다. 그래서 저는 최근에 알았는데, 까먹지 않게 정리해두려고 합니다. Transform transform 관련 함수는 이렇게 세개가 있습니다. 이 함수들을 구현하여서 다른 observable stream들과 결합(combine) 할 수 있다고 합니다. 특히 transform(mutation:) 함수가 global event stream를 mutation stream과 결합하는 경우에 많이 쓰인다고 합니다. 잘 안와닿으니 더 구체적으로 살펴보겠습니다...!! 그러기 위해서 우선 Global State에 대해서 알아야합니다. ..
- Total
- Today
- Yesterday
- 플러터 얼럿
- PencilKit
- drf custom error
- Django FCM
- flutter 앱 출시
- DRF APIException
- flutter build mode
- Django Firebase Cloud Messaging
- Python Type Hint
- Flutter getter setter
- Flutter Text Gradient
- 장고 Custom Management Command
- github actions
- Flutter Clipboard
- flutter deep link
- METAL
- Django Heroku Scheduler
- Watch App for iOS App vs Watch App
- Dart Factory
- 장고 URL querystring
- SerializerMethodField
- ipad multitasking
- 플러터 싱글톤
- Sketch 누끼
- Flutter 로딩
- Flutter Spacer
- flutter dynamic link
- 구글 Geocoding API
- ribs
- 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 | 31 |