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 하기 때문이죠!!! ..
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에 대해서 알아야합니다. ..
https://www.test.com/users?gender=male&age=20&job=designer 위와 같은 get 요청에서 gender=male age=20 job=designer 같은 파라미터를 구하려면 어떻게 해야할까요?!? 저는 정규표현식을 이용했습니다. Swift에서 정규표현식(Regular Expression)을 이용하기 포스팅에 차마 이어쓰지 못하겠어서(😱) 새롭게 씁니다. 하지만 자세한 설명은 저기에 있습니다. 여기에는 간략하게! 결론 이렇게 extension을 추가하고 정규표현식 패턴으로 아래의 것을 쓰면 됩니다. [^&?]+=[^&?]+ 테스트를 돌리면 성공하는 것을 볼 수 있습니다. 과정 저렇게 테스트가 성공할 수 있는 과정을 살펴보겠습니다. 우선 [^?&] 이거 부터 살펴보자..
[1] HTML 스타일 그대로 로드하기 (with 커스텀 설정) UILabel에 HTML 스타일 그대로 로드할 수 있습니다. (폰트나 색깔 같은 것을 커스터마이징 할 수 있음) 예를들어 또는 태그로 감싸진 것을 볼드처리 해주고 html 태그들을 지워주고 html entity 들을 디코딩해줍니다. (html entity표 = 영어버전 및 한글버전) 저는 css style을 참고해서 extension을 만들었고 이런식으로 쓸 수 있습니다. 돌려보면 이렇게 스타일이 적용되고 + 으로 인코딩되었던 + 도 디코딩되어서 나옵니다..!! 참고로 저는 paragraph 스타일만 정의해줘서 html에 h1 같은 태그가 있으면 안먹힐 거에요..! css문서보니까 h1 스타일을 따로 정의해주더라구요...!+! 하지만 지금 ..
iOS에서 로컬데이터베이스를 쓸 때 보통 SQLite, CoreData, Realm 을 사용합니다. 이중에서 CoreData는 애플이 제공하는 것이고 SQLite와 Realm은 써드파티 라이브러리 입니다. SQLite는 sql문을 써야하는 반면, CoreData와 Realm는 sql문을 안써도 됩니다. CoreData와 Realm은 데이터를 Object로 다루기 때문에 더 편하고 간단하게 느껴집니다. (하지만 2020년에 올라온 SQLite 좋다는 글. 아직 안읽어봄.) https://www.raywenderlich.com/6620276-sqlite-with-swift-tutorial-getting-started SQLite With Swift Tutorial: Getting Started In this..
- Total
- Today
- Yesterday
- Flutter Text Gradient
- 플러터 얼럿
- flutter 앱 출시
- cocoapod
- github actions
- Python Type Hint
- 장고 Custom Management Command
- PencilKit
- 장고 URL querystring
- ipad multitasking
- Sketch 누끼
- Flutter getter setter
- Django Firebase Cloud Messaging
- Watch App for iOS App vs Watch App
- DRF APIException
- flutter deep link
- Django Heroku Scheduler
- Django FCM
- drf custom error
- ribs
- METAL
- Dart Factory
- Flutter 로딩
- flutter dynamic link
- flutter build mode
- SerializerMethodField
- Flutter Spacer
- 구글 Geocoding API
- Flutter Clipboard
- 플러터 싱글톤
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |