일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 운영체제
- 위젯킷
- uikit
- 스위프트
- 컴퓨터그래픽스
- 문법
- 멋쟁이사자처럼
- 스유
- 영남대
- widget
- 백준
- 대외활동
- 후기
- 멋사
- Swift
- 리액트
- 네트워크
- widgetkit
- SwiftUI
- 1일1알골
- 알고리즘
- 웹
- TCA
- swift concurrency
- c++
- composable architecture
- spritekit
- Protocol
- cs
- dispatchqueue
- Today
- Total
목록SwiftUI (34)
맛동산이
이전에도 다양하게 다룬적이 있지만 이제야 좀 정리가 되는느낌이라 다시한번 정리하려고 합니다. Thread 스레드는 cpu에서 바라보는 작업단위이다. 프로그램은 저장소에 저장되어있는 코드 덩어리이고, 이 코드덩어리가 메모리에 올라간 상태를 프로세스라고 한다. 프로세스는 cpu가 할당되어진 프로그램의 상태인것 프로세스 내부에서 동시성(time slicing)방식으로 여러개의 일을 처리할수 있는데, 이때 생성되는 독자적인 프로세스 내부의 작업 단위를 스레드라고한다. ex) 크롬이라는 프로그램이 메모리에 올라가면 프로세스, 해당 크롬에서 여러개의 창이 켜진상태를 여러 스레드가 존재한다고 생각하면 쉽다. Thread pool 위의 스레드 생성방식에서 계속해서 새로운 스레드를 생성하는것은 좀 불필요한 작업일수 있기..
InterFace 인터페이스란 서로다른 두 시스템의 데이터를 주고 받는 경계면을 의미한다. UserDefaults 앱을 실행하는 경우 지속적으로 key-value로 값을 저장하는 사용자의 기본 데이터 베이스 인터페이스 이다. 즉 앱을 실행하는 동안 사용자의 기본 데이터를 key-value값으로 저장하는 경계면을 의미한다. 런타임에서 userDefaults객체를 이용하여, 사용자의 기본 userDefaults DB에서 기본 설정값을 액세스 하며, UserDefaults는 해당 값을 캐시하여 기본 설정 디비를 열필요 없도록 계속해서 기기에서 값을 가지고 있게 된다. 기본값을 설정하면 프로세스 내에서 동기적으로 변경되며, 비동기적으로 다른 프로세스에 변경사항이 전파된다. UserDefault는 싱글톤으로 단하..
코어모션은 장치의 가속도계와 자이로스코프, 사용 가능한 경우 보수계, 자력계 및 기압계가 포함한 데이터를 가지고 있는 프레임워크이다. 해당 프레임워크를 가지고 중력센서를 통해서 SpriteKit의 화면에 중력을 작용시켜보자! PhysicsWorld 모든 scene은 자동적으로 물리현상을 구현하기 위해서 physicsWorld를 생성하며, physicsWorld는 SKScene위에 잇는 모든 노드들의 physics 프로퍼티에 접근할수 있다. 따라서 우리는 SpriteKit의 scene의 physicsWorld의 gravity를 줄 예정이다. 중력을 바꾸기 위해서는 중력을 바꾸는 값을 가져와야 하는데 해당 값을 coreMotion으로 기기의 기울기를 통해서 가져올수 있다. CoreMotion을 통해서 기기의..
기본적으로 physicsBody는 쉐입을 다양하게 줄수있지만, 우리는 보통 해당 물체의 라인에 맞게 physicsbody를 주어야 한다. 그렇지 않으면 맞지도 않았는데 마치 보호막이 존재하는 것처럼 튕겨나갈지도 모르기 때문이다. 해당 부분에 대해서 공식도큐먼트에는 다음과 같이 나타나있다. 저렇게 대충 만들지 말고 쉐입으 딱 맞게 하는방법! let sprite = SKSpriteNode(imageNamed: "Spaceship") sprite.physicsBody = SKPhysicsBody(texture: sprite.texture!, size: sprite.texture!.size())
1. 프로젝트에서 위젯 익스텐션을 만들어준다. 2. live Activity를 확인한다. 이거하고 나면 무슨 알람창이 뜨는데 그냥 확인 하면 됩니다. 3. 위젯이 생성됨 이렇게 프로젝트 좌측에 Widget이라고 생성이 된다. 4. 기존 프로젝트에서 쓴 extension과 같은것들을 사용할때 target을 추가해줘야한다. 이거설정 빼놓지 말고 쓰시길!
위젯에서 가장 중요한 3요소는 다음과 같다. Widget Configuration Provider EntryView Widget Configuration configuration과 관련된 속성값들 위젯 편집하기에 들어갔을때 생성되는 위젯추가 창, 혹은 위젯의 편집과 관련된 정보를 가진 객체가 바로 WidgetConfiguration이다. configuration 파라미터 kind 위젯의 identifier(아무거나 지정해주면 됨, 보편적으로 bundle id ) intent 유저가 구성할수 있는 속성 (static은 없음) provider 위젯의 뷰를 업데이트할 타이밍을 알려주는 객체 content 위젯에 보여줄 뷰 Configuration 종류 IntentConfigurationt예 ) to-do li..
EntryView EntryView가 실제로 유저에게 보여지는 뷰 이다. entryView는 기존의 뷰와 다르게 찍어낸 데이터를 받아오는것이기 때문에 내부에서 데이터를 변경하는것이 불가능하다. 따라서 entryView에 데이터를 넣어주는 방법은 Provider를 통해서 넣어주는 방법이다. 데이터를 넣어주는 방식은 다음과 같다. 1. TimelineEntry 데이터 정해주기 기존의 우리가 넣어줄 데이터를 TimelineEntry라는 객체에 넣어준다. 해당 객체는 기본 프로젝트를 만들면 있으며, 이름은 자유롭게 변경 intentConfiguration이라면, configuration이 있을것이며 그렇지 않다면 없을것이다. 2. Entries에 넣어줄때 해당 데이터 주입하기 widget은 이전 포스터에서 말했..
앱에서 위젯으로 데이터를 보내줘야할 경우가 당연하게 생긴다. (그냥 하드코딩 하고싶지는 않자나?) 다음과 같은 방법을 통해서 데이터를 보내줄수 있다. 1. App Group 추가해주기 우리의 메인 앱의 Target으로 가게 되면 거기에서 Signing & Capabilityies에서 all 왼쪽에 있는 + Capability를 누르면 appGroups를 추가할수 있다. 해당 방법을 통해서 위젯과 앱 둘다 appgroups를 추가 하고 동일한 groupId로 설정해준다. app Groups란? 동일한 팀이 개발한 앱 사이의 공유 컨테이너를 액세스 가능하도록 하는 그룹을 생성하는것이다. 이를 통해 프로세스간의 통신을 할수 있도록 한다. $(TeamIdentifierPrefix).com.example.mygr..
위젯의 주요 3요소는 다음과 같다. 1. configuration 2. provider 3. entryView Provider bookmark 이 아티클을 읽어보면 이해가 갈수 있는데, widget의 경우에는 계속해서 활성상태로 가있는것이 아니다. 즉 메모리에 항상올라와있는것이 아니며, 반면 계속해서 업데이트 되어야 하는데 이때 사용하는 방법이 TimeLineProvider와 TimeLine이다. 즉 위젯이 계속해서 로드되어 있다면, 시스템 리소스와 네트워킹 그리고 베터리 소모가 크기 때문에 이를 막기 위해서 요청하는 업데이트의 빈도와 횟수를 제한하기 위한 객체이다. Timeline 타임라인은 기본적으로 위젯이 언제 업데이트 될것인지에 대한 정보이다. 앞서 말했듯 위젯은 항상 업데이트가 자동으로 되는것이..