일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스플래시스크린
- native
- 리액트
- Privacy manifest
- privacyinfo.plist
- requirenativecomponent
- Native Module
- react-native-fast-image
- panorama view
- React-Native
- 360도 이미지 뷰어
- 파노라마 뷰
- 360도 뷰어
- 스켈레톤 통합
- 리액트 네이티브
- 앱 성능 개선
- launch screen
- 360도 이미지
- boilerplate 제거
- ios
- 리엑트 네이티브
- React Native
- 3b52.1
- launchscreen
- 라이브러리 없이
- 네이티브
- 스켈레톤 UI
- Android
- Skeleton UI
- react
- Today
- Total
목록개발지식 정리/Swift (17)
Neoself의 기술 블로그
본 게시글은 Keychain, UserDefaults를 활용하여 로그인 여부를 영구적으로 관리하고 Combine을 통해 뷰를 업데이트하는 로그인 플로우 고도화 과정을 공유하고자 작성된 글입니다. 로그인 플로우 파악에 더 나아가, 자동로그인 및 자동 로그아웃 기능을 고려하시는 개발자 분들께 도움이 되시리라 생각합니다.1. 기존 로그인 플로우의 한계우선 제가 여태껏 구현해왔던 로그인 및 로그아웃 플로우를 간단하게 소개드리겠습니다.AppState라는 싱글톤 패턴 기반의 클래스를 환경객체로 앱에 적용한 후, 로그인 여부 불린값 isLoggedIn을 통해 보이는 뷰를 관리하였습니다. class AppState: ObservableObject { static let shared = AppState() ..
Protocol은 뭔가요?프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 규약을 정의합니다. 쉽게 말해 "이런 기능이 있어야 해"라는 약속입니다. Typescript에서의 interface 프로퍼티를 사용했던 적이 있어서인지, 사전적인 의미보다 인터페이스의 역할을 한다는 설명이 제게는 좀 이해하기 쉬웠던 기억이 납니다. 프로토콜을 채택하고자 하는 클래스에서는 실제로 돌아가는 로직 그 자체를 구현하는 반면, 프로토콜은 각 기능이 어떤 인자를 받고, 어떤 것을 반환하는 지의 타입 정보만 명시하고, 나머지들은 다 비워놓습니다.이렇게 프로토콜을 통해 구축한 핵심 틀만을 갖고, ViewModel과 같은 클래스에 상속시키는 것을 추상화한다고 합니다. 그래서 추상화가 ..
XCode에서는 애플워치, 아이폰 등, 애플 생태계에 있는 기기들을 Simulator로 테스트 및 디버깅이 가능합니다. 하지만, 애플워치에서의 심박수 측정, WCSession 통신 등의 동작은 Simulator만으로는 테스트가 힘듭니다. 따라서 저는 여태껏 TestFlight로 앱을 배포하여 내부 테스트를 통해 로직 검증을 반복해왔었습니다... 이러한 과정을 반복하면서 디버깅을 하다보니, 아래 문제점들이 있었습니다.매번 앱스토어에서의 앱 처리 절차와, 테스트 플라이트 업데이트 등 많은 시간이 불필요하게 소요이미 배포가 된 앱을 테스트하는 것이기에 콘솔 출력을 통한 디버깅 불가능func syncPendingData(forced: Bool = false) { // 디버깅을 위한 메시지 iOS로 전송 ..
Testflight를 통해 실제 뮤지컬관람환경에서 실시간 심박수 측정 기능을 사용한 결과, WatchOS에서 전송한 분간 최대 심박수 데이터들에 대한 로그기록을 서버를 통해 확인할 수 있었습니다.(사실 가독성은 구려서 안 보시는게 눈건강에 더 나을 수도 있습니다. 백엔드는 잘 몰라서, 구현하기에 바빴습니다... )더보기보시면 아시겠지만, 오후 9시 35분부터 오후 10시 6분 사이의 데이터가 누락이 되는 이슈가 있었습니다. 당시 타임라인을 추적해본 결과, 심박수 데이터를 측정하는 전체 2시간 반동안 애플워치의 배터리를 16% 소모하였으며, 9시 35분부터는 배터리가 10% 이하로 떨어지면서 애플워치가 저전력 모드로 전환돼, 앱 내부 로직이 아예 막혀 서버로 데이터 전송이 되지 않았음을 확인할 수 있었..
최근에 UIKit + MVC 아키텍처 패턴으로 작은 프로젝트를 만들게 되었습니다. 이를 만들어보면서 고민했던 아키텍처 구성 과정을 적어보았습니다.MVC는 뭐죠??MVC 패턴의 사전적 의미를 먼저 보겠습니다.디자인 패턴중 하나로, Model, View, Controller의 약자입니다. 사용자가 Controller를 조작하면, Controller는 Model 레이어를 통해서 데이터를 가져오고, 그 정보를 바탕으로 View를 업데이트하는 과정을 통해 앱이 동작하는 구조라고 이해하면 됩니다. Model: 애플리케이션의 정보, 데이터를 처리하는 레이어데이터베이스 혹은 Core Data 프레임워크를 활용한 데이터 처리 CRUD 메서드와 같이 정보들의 가공을 책임지는 컴포넌트가 이에 해당됩니다.View: 앱 사용자..
오픈소스를 활용하지 않고 iOS 앱 개발 시, 내부에 데이터를 저장하여 활용하는 방법은 크게 2가지가 있습니다.UserDefaultCoreData비밀번호나 사용자 이메일 주소와 같은 단순한 키-값을 저장하는 데에는 이전에 말씀드렸던 UserDefaults나 Keychaion이 더 적합합니다. 하지만, 복잡한 데이터 관계가 필요하거나, 데이터의 변경에 대한 롤백, 즉 변경 추적이 필요한 경우에는 Core Data가 더 적합한 프레임워크가 됩니다.Core Data가 그래서 뭐죠?Core Data는 객체 그래프 관리자로서, iOS 어플리케이션에서 데이터를 구조화하고 유지하기 위한 프레임워크입니다. 여기서 Core Data는 DB 그 자체가 아닌, 객체 그래프, 즉 아래와 같이 객체들 간의 관계를 나타내는 연결..
1. 동시성동시성 프로그래밍은 엄밀히 따지면, 동시성과 병렬성을 모두 포함하는 개념이라고 볼 수 있습니다. 즉, 여러 작업을 동시에 처리하는 프로그래밍 방식입니다. 여기서 동시성 프로그래밍(Concurrent Programming)과 병렬성 프로그래밍(Parrallel Programming)의 가장 큰 차이는 무엇일까요? 둘다 여러 작업을 동시에 처리한다는 방향을 공유하고 있지만, 동시성이 한번에 하나의 작업을 번갈아가며 처리를 하는 방식이라면, 병렬성은 멀티코어 환경을 바탕으로 여러작업을 실제로 동시에 처리하는 방식을 일컫습니다.즉 동시성 프로그래밍은 소프트웨어적 쓰레드에서 동시에 일을 하는 개념이기 때문에, 보다 개발자 개입이 중요한 처리방식입니다. 아래 다이어그램을 보면 동시성과 병렬성의 동작방식..
iOS와 WatchOS는 Widget Extension과 달리 완전 독립적인 OS로서 취급되기 때문에, Data Store를 공유하고 있지 않습니다. 때문에, 애플에서는 두 OS의 Data Store들 사이에서의 데이터 동기화 및 통신을 위해 WatchConnectivity 프레임워크를 제공하고 있습니다. 1. Data Store여기서 Data Store란 무엇일까요??Data Store는 앱에서 데이터를 저장하고 관리하는 방식을 의미합니다. iOS와 WatchOS에서 사용하는 Data Store 옵션들은 다음과 같습니다.UserDefaults: 간단한 키-값 쌍의 데이터를 저장합니다.Core Data: 복잡한 데이터 모델을 관리하는 데에 사용됩니다.File System: 파일 형태로 데이터를 저장합니다..
이 글은 Apple Developer 유튜브 채널에 있는 "SwiftUI에서 고급 애니메이션 사용하기" 영상의 내용을 정리한 게시글입니다.https://www.youtube.com/watch?v=NFmQjc7ia4YApple의 SwiftUI에서는 고급 애니메이션을 위해 Animation Phases와 Keyframes 기능을 제공하고 있습니다. 각 기능들을 예시와 함께 설명드리겠습니다. Animation Phases위 기능은 연속된 애니메이션에 적합한 기능으로, phaseAnimator 뷰 수정자를 사용해 구현할 수 있습니다. 해당 뷰 수정자를 통해 각 단계를 정의하는 일련의 상태를 제공하면, SwiftUI는 자동으로 각 상태 사이를 애니메이팅하게 됩니다. 예시.phaseAnimator([false, t..
이글은 Apple Developer 유튜브 채널의 "SwiftUI 애니메이션 알아보기" 영상의 내용을 정리한 내용을 담고 있습니다. https://www.youtube.com/watch?v=IuSuHJs5-KE&list=LL&index=12 가장 먼저 Animation의 근간이 되는 뷰 업데이트에 대해 톺아보겠습니다. SwiftUI View는 뷰의 종속항목을 상시 추적합니다. 여기서 종속항목은 @State, @ObservedObject, @Published 등의 프로퍼티 래퍼가 될 수 있는데요.종속항목이 변경되면서 뷰의 상태가 변경되면, 아래의 절차가 연차적으로 수행됩니다. 1. 다운스트림 속성값이 만료되며 기존 View 무효화2. Transaction 생성3. 업스트림 종속성이 변경되며 프레임워크가 ..