이번 WWDC 2020에서 Build an Action Classifier with Create ML 을 재밌게 봐서 따라해보기-! 우선 Create ML은 이 경로로 들어갈 수 있고 ML 모델 만들어주는 앱입니다. 새로 나온 Mac OS Big Sur에 Action Classification이라는 템플릿이 추가되었어요-! Action classification은 이름그대로 트레이닝 데이터로 넣은 비디오들의 액션을 캡쳐해서 모델을 트레이닝 시켜주는 템플릿입니다. 이번에 Vision에 human body pose를 detect하는 기능이 추가되어서 이런게 가능해졌다고 합니다. (참고로 동물이랑 물건 동작 인식은 안되고 사람만 됩니다.) 만든 모델에 인풋으로 액션 넣으면 이 액션(몸동작)은 여기 그룹에 속하..
App과 AppExtension (Today Extension, Widget Extension, Siri Extension 등..)은 UserDefaults를 공유하지 않습니다. 그 이유를 살펴볼게요 App Extension Programming Guide 를 보면 App과 App Extension의 관계가 나옵니다. Extension은 App안에 있지만 두개는 각각 다른 container를 가지고 있습니다. 그래서 기본적으로 둘 사이의 데이터는 공유되지 않습니다. 그래서 UserDefaults는 공유되지 않습니다. 하지만 위의 그림처럼 shared container를 사용해서 UserDefaults를 공유할 수 있어요 [1] App Group 설정 Capability에 AppGroup를 추가하고 App..
이런 플로우로 되어있는 PR 보여주는 앱을 예제로 하나 만들었습니다. 그리고 위젯을 만들어보겠습니다..! [ 유의사항 ] 1) Xcode 버전 Xcode 베타 버전(+iOS 베타 버전)에서 버그가 짱 많습니다. 위젯 갤러리에 위젯이 안뜰때도 있었고 (iOS 14 beta2에서는 해결되었다고 합니다.) extension으로 돌리면 크래쉬나는 경우도 있었고 (Xcode beta3에서 해결되었다고 합니다.) Xcode beta릴리즈노트들을 보면 위젯 관련 이슈들이 되게 많아요 😓 이 글을 쓰고 있는 시점에 beta3 까지 나왔는데, 더 있다가 개발하기를 추천드립니다. 지금도 XCode 껐다키면 빌드 성공하고 위젯갤러리에 위젯이 안나오는데 폰 껐다가 다시 켜서 앱 지우고 다시 깔면 나오고... 이런 현상들이 많..
위젯의 Configuration은 UI 담당 ViewContent와 리프레시 로직 담당 Provider가 있습니다. 코드로 보면 여기 들어가는 provider..! 저는 폴더 구조도 저렇게 구성했어요-! Provider에 대해서 자세히 알아볼게요 :-) [1] TimelineProvider, Timeline, TimelineEntry TimelineProvider는 이름 그대로 Timeline을 제공하여서 위젯킷에게 언제 위젯을 업데이트하고 싶은 지 알려주는 친구입니다. 특정한 시간에 WidgetKit은 Provider의 메소드를 호출하여서 새로운 Timeline을 요구합니다. (이건 아래서 자세하게 설명할게요) 그럼 Timeline이란 무엇일까요?! Timeline은 TimelineEntry 로 이루어..
Authorizing OAuth Apps 문서를 보고 따라한 기록-!! 저는 Github API를 이용해서 private repo에 접근하려고 (풀리퀘 등등 얻어오기 위함) Github OAuth Access Token이 필요해서 따라하게 되었습니다 :-) [ 순서 ] 1) OAuth application 등록하고 client_id 랑 client_secret 값을 알아낸다. 2) 사용자를 로그인 시켜서 임시 토큰이라고 할 수 있는 code 값을 받는다. 3) code값을 이용하여 access_token을 구한다. [1] OAuth application 등록하고 client-id & client-secret 값 얻기 register 에 들어가서 깃헙 로그인을 할 자신의 앱을 등록해주세요 제 프로젝트 이름..
HIG 문서 중, 기록하고 싶은 것들만 기록-!! (이건 제 기준으로 선별된 목록이니까 문서를 쭉 다 읽는 것을 추천드립니다) [1] 위젯의 목적 사용자가 앱을 열지 않고도 볼 수 있는 적은 양의 정보를 timely, personally (적시에, 개인맞춤화하여,,?) 보여주기 위함입니다. 그리고 사용자가 iOS Home screen 또는 macOS Notification Center 에서 앱의 콘텐츠에 즉시 액세스할 수 있도록 해줍니다. (iOS는 14부터, macOS는 Big Sur 부터) [2] 위젯의 컨셉 앱의 메인 아이디어 하나에 딱! 집중해서 위젯을 만드세요 위젯에 대한 single idea를 정하고 표시할 정보의 범위를 정하는 것은 위젯 만들기 스텝 중 중요한 첫번째 단계라고 말하고 있습니다..
[사전 지식] Detect Hand Pose with Vision (1) [Vision] Detect Hand Pose with Vision (1) - Hand Landmark, VNDetectHumanHandPoseRequest, VNRecognizedPointsObservation WWDC 2020 세션 중, Detect Body and Hand Pose with Vision 을 인상깊게 봤는데 일단 손동작을 detect하는 것을 따라해보겠습니다. 엄지와 검지를 붙인채로 텍스트를 쓰는 것을 보여줬는데요..! 너무 너무 멋있 eunjin3786.tistory.com Detect Hand Pose with Vision (2) - ThumbUp & ThumbDown [Vision] Detect Hand P..
repository패턴이란 Interfaces > Repositories에 있는 파일들은 모두 프로토콜이고 Data > Repositories 에 있는 파일들은 Domain > Interfaces > Repositories의 프로토콜들을 채택한 클래스들입니다. 아래 그림처럼 Repository는 Domain Layer와 Data Layer 중간쯤에 있어서 저렇게 프로젝트가 구성되었다고 생각하시면 됩니다-!! 그리고 각각의 Layer들을 그룹핑한 것을 자세히 살펴볼게요! 1. Domain Layer - 클린아키텍쳐 원에서 Entities과 Use Cases를 묶어서 Domain Layer라고 합니다. - 이 레이어는 다른 레이어들에게 어떠한 영향도 받지 않습니다. - 다른 프로젝트에 의하여서 재사용 될 수..
[하고 싶은 것] Jest reporter action 처럼 PR하면 이렇게 테스트 커버리지가 코멘트로 달리는 것을 하고 싶습니다. (참고로 Jest는 페이스북에서 유지 관리하는 JavaScript 테스트 프레임 워크입니다. Babel, TypeScript, Node.js, React, Angular 및 Vue.js를 사용하는 프로젝트에서 작동합니다.) 그러면 PR할때마다 테스트 커버리지가 보이니까 내가 추가한 피쳐에 테스트를 달고 싶은 동기부여가 더 되지 않을 까 해서요-! [1] Slather 페이지 열어주기 - cocoapod 써서 xcworkspace 쓰는 플젝 name: PR # workflow run이 언제 triggered 될 것인지에 대한 설정. on: # master랑 develop 브랜..
[1] Repository 패턴이란 데이터 출처(로컬 DB인지 API응답인지 등)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 것을 Repository 패턴이라고 합니다. - viewModel 밑에 Repository라는 layer를 하나 더 두어서 viewModel은 오직 비즈니스로직만 집중하게 합니다. (데이터를 로컬과 서버 중 어디서 가져올지, 또 어떻게 가공할지는 Repostitory가 하기 때문입니다.) - viewModel들간 Repository를 공유해서 데이터 일관성을 유지할 수 있습니다. [2] 예제 코드 위의 코드를 보면 Repository는 서버에서 데이터를 다루는 dataTransferService와 코어데이터(로컬)에서 데이터를 다루는 moviesQueriesP..
- Total
- Today
- Yesterday
- 장고 Custom Management Command
- flutter build mode
- METAL
- Django Heroku Scheduler
- flutter 앱 출시
- 장고 URL querystring
- Watch App for iOS App vs Watch App
- Django FCM
- flutter deep link
- Flutter getter setter
- DRF APIException
- drf custom error
- 구글 Geocoding API
- SerializerMethodField
- Flutter Text Gradient
- PencilKit
- Sketch 누끼
- Flutter Clipboard
- Django Firebase Cloud Messaging
- Python Type Hint
- 플러터 얼럿
- Flutter Spacer
- Flutter 로딩
- github actions
- ipad multitasking
- ribs
- Dart Factory
- 플러터 싱글톤
- cocoapod
- flutter dynamic link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |