내용 Configurable Widget 은 무엇을 지원하는지 알아봅시다. 정적/동적 선택 목록을 만들기 위해서 Custom Intent Definition 을 생성해봅시다. 동적 선택 목록을 설정하고, 기본값을 설정하기 위해서 Intents Extension 을 추가하여 Intent 를 핸들링 해봅시다. configurable properties 를 지원하기 위해 IntentTimelineProvider 를 사용하여 IntentConfiguration 을 구성하겠습니다. 🚨 들어가기 전 - Configurable Widget 은 무엇인가요? 두 번째는 첫 번째와 달리 Configurable properties 를 사용하도록 설정한 Configurable widget 입니다. Configurable Wi..
✅ ARC(Automatic Reference Counting)란? 말 그대로 자동으로 메모리를 관리해주는 방식입니다. ARC는 더이상 사용하지 않는 클래스의 인스턴스를 메모리에서 해제하는 방식으로 관리합니다. ARC 는 참조 카운트를 관리하기 때문에 참조 타입인 클래스의 인스턴스에만 적용됩니다. 당연히 열거형, 구조체와 같은 것은 참조 카운트를 사용하지 않기 때문에 ARC 가 관리하지 않아도 됩니다. ✅ 왜 사용해요? Swift 에서는 메모리 사용을 관리하기 위해서 ARC 를 사용합니다. 값 타입과 달리 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근되기 때문에 적절한 시점에서 메모리에서 해제되지 않으면 한정적인 메모리 자원을 낭비하는 memory leak 이 발생합니다. 이는 성능 저하로..
atomic 이 안전하지만 그만큼 성능 저하가 발생한다. 그래서 꼭 필요한 경우가 아니라면 non-atomic 으로 설정해두는 것이 좋다. Swift 에서는 별도의 atomic 을 지정할 수 없고, GCD 로 구현할 수 있다. 1️⃣ 하나의 serial queue 가 테스크를 담당하도록 함 concurrent queue 를 사용하거나 여러 개의 serial queue 를 사용하면 여러 스레드가 동시에 접근하는 경우 발생. 이를 막기 위해 근본적으로 하나의 serial queue 가 테스크를 담당. 이는 동시성을 포기하게 됨. 2️⃣ Dispatch Barrier Dispatch Barrier 사용하여 쓰기 작업은 thread-safe 하게, 읽기 작업은 동시에 작업할 수 있도록 만들 수 있다.(읽기 작업..
thread-safe : 멀티스레드 프로그래밍에서 자원에 스레드가 동시에 접근해도 문제가 생기지 않는 것을 말한다. 즉, 여러 곳에서 접근하더라도 올바른 결과를 얻게된다. atomic : 멀티스레드 프로그래밍에서 데이터의 변경 전과 후에만 자원에 접근할 수 있음을 보장하는 것이다. 즉, 데이터가 변경되고 있는 중에는 접근이 불가능하다. Swift 는 멀티스레딩(Multi-Threading) 방식입니다. 멀티스레드는 stack 을 제외한 heap, data, code 영역을 공유합니다. 그래서 한 스레드에서 영역을 사용할 때 다른 스레드에서 접근하게 되면 동일한 자원에 두 개 이상의 스레드가 접근하는 경우가 생깁니다. Swift 는 thread-safe 를 보장하는 언어가 아니기 때문에 이때 문제가 생길 ..
내용 TestFlight 와 릴리즈 앱 자동 배포 위한 Fastlane 설정 및 기타 설정 info.plist 에서 버전과 빌드를 올리는 작업 build scheme 에 따른 자동 배포 작업 archive 후, app store connect 에 업로드 TestFlight 배포 App 업데이트 내역을 포함한 자동 배포 slack 과 연결해서 알림 mutiple target 인 경우의 프로젝트에 Fastlane 을 적용하는 방법을 알아봅니다. 0️⃣ Fastlane 란? iOS 배포를 자동화하기 위한 ruby 기반 오픈소스 라이브러리입니다. 1️⃣ Fastlane 설치 brew install fastlane 명령어를 통해서 HomeBrew 를 이용해 Fastlane 을 설치할 수 있습니다. gem inst..
내용 서버 API 를 개발하며 동시에 데이터 손상에 대해 안전하기 위해서 테스트 서버와 릴리즈 서버의 차이를 두기로 하였습니다. 개발용, 베타, 릴리즈에 따라 Build 환경을 구축하여 하드 코딩하지 않도록 해보겠습니다. 보안상 중요한 key 를 노출시키지 않도록 하겠습니다. 1️⃣ Configuration Setting File 생성 후 설정 Configuration 을 duplicate 하여 필요한 환경을 만든다. xcconfig 파일 생성 반드시 targets 를 설정해주어야 한다. ❓.xcconfig 파일이란? apple - configuration file .xcconfig 파일에 key-value 로 작성을 하면된다. 이때, 진행한 프로젝트는 CocoaPods 을 위한 xcconfig 파일이 ..
데드락(두 개 이상의 작업이 서로 작업이 끝나기 만을 기다리고 있기 때문에 아무것도 완료가 안됨)에 빠져서 에러가 호출됩니다. 예를 들어, IBAction 블럭 안에서 sync 를 호출하게 되면 IBAction 블럭이 반환되기 전까지 main.sync 블럭은 큐에 삽입되지 않습니다. 이렇게 되면 IBAction 블럭은 main.sync 가 실행되지 않으니 멈추고, main.sync 블럭은 동기적으로 삽입되기 때문에 기다리게 되면서 멈춥니다. 명시적으로 스레드를 지정하지 않을 경우 main 스레드에서 task 가 실행됩니다. // 즉, 위의 경우는 아래의 코드와 동일한 구조를 가집니다. DispatchQueue.main.async { // outer DispatchQueue.main.sync { // in..
우선, 간단하게 lazy, tpye property 가 무엇인지 정리해보면 lazy property 는 호출할 때 연산을 하는 지연 연산 프로퍼티이다. type property 는 인스턴스에서 호출하는 것이 아닌 타입에서 호출될 때 한 번만 메모리에 올라가는 프로퍼티이다. ✅ lazy property lazy property 는 인스턴스를 생성할 때 초기값이 연산되지 않고, 호출될 때 지연 연산으로 생성이 되면서 메모리에 올라간다. 그래서 var 로만 사용할 수 있다. 이후 재호출할 때는 다시 초기화가 진행되지 않고 이전에 생성된 변수를 그대로 사용한다. 이를 통해 사용하기 전의 프로퍼티에 대한 메모리를 효율적으로 사용할 수 있다. ✅ type property type property 는 인스턴스를 생성..
- Swift
- CloneCoding
- watchOS
- APNS
- 2022 KAKAO TECH INTERNSHIP
- Notification
- WidgetKit
- OpenSourceLibrary
- configurable widget
- RxCocoa
- Protocol
- SwiftUI
- Algorithm
- rxswift
- WWDC
- MVVM
- Widget
- WWDC22
- UserDefaults
- Firebase
- IOS
- 서버통신
- projectsetting
- github
- containerBackground
- Objective-C
- MOYA
- YPImagePicker
- async/await
- urlsession
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Total
- Today
- Yesterday