SWiFT 12

애플 Text엔진 TextKit

이전에 UITextView에 사용자가 텍스트를 입력할 때, iOS 17이상의 단말기에서만 내부 컨텐츠 영역 커서나 스크롤이 이상해지는 현상이 있어 이를 해결한 포스팅을 작성했었다.이때 변경한 내용이 TextKit2를 TextKit1로 변경한 것인데, 그럼 TextKit이 뭔지 알아보자.  1. TextKitTextKit2의 소개는 WWDC21 TextKit2에서 처음 소개되었다.일단 TextKit은 애플이 텍스트 관련 작업을 보다 쉽게 처리할 수 있도록 설계된 프레임워크이다.iOS, macOS, watchOS, 그리고 tvOS에서 사용 가능한 텍스트 처리 및 렌더링의 복잡성을 추상화하여 개발자가 다양한 텍스트 관련 작업을 효율적으로 처리하도록 도와준다. TextKit2는 iOS 15에서 처음으로 등장해서..

Swift 2024.09.08

UITextView 줄 글이 많아질 때, 커서 위치와 스크롤 점핑하는 현상

평소 UITextView를 사용해서 사용자에게 여러 줄의 텍스트를 입력받아왔다.어느 날 테스트 목적으로 UITextView에 엔터를 엄청 많이 입력해보니까아래와 같이 UITextView 내부 컨텐츠 영역이 점핑되거나 커서 위치가 이상해지는 현상을 발견했다.  이는 SwiftUI의 TextField(_, text:, axis:) 컴포넌트에서도 마찬가지였다. 진짜 미스테리는,, iOS 16까지의 실기기, 시뮬레이터는 문제가 없고 iOS 17부터 이런 현상이 나타난다는 것이다!!! 1. 구현예제 프로젝트에서는 사용자가 입력하는 텍스트 중에서 숫자만 빨간색, Bold 체로 변경되는 코드를 작성했다. func textViewDidChange(_ textView: UITextView) { ..

회고 2024.09.08

TCA - Binding

개요 SwiftUI의 바인딩 타입은 애플리케이션의 서로 다른 부분 간의 통신을 용이하게 합니다. 따라서 SwiftUI에서 가장 중요한 유형 중 하나입니다. 이를 통해서 애플리케이션 중 일부의 변경사항을 즉시 다른 부분에 반역할 수 있고, @ObservedObject, @State 프로퍼티 래퍼 또는 environment 값을 사용하여 궁극적으로 바인딩 하도록 돕습니다. SwiftUI에서의 바인딩은 프로퍼티 래퍼로 양방향 바인딩을 사용하여 상태를 처리합니다. TCA의 가장 큰 특징은 단방향 데이터 흐름을 채택하는 것인데, TCA의 Store는 SwiftUI의 UI 컨트롤과 양방향 바인딩을 이루어야고, Store에 있는 State와 Action은 단방향 데이터 흐름을 갖도록하는 해야합니다. 이러한 것을 가능..

Swift 2023.08.17

TCA - Environment는 어디갔나?

Environment는 어디갔나? TCA는 State, Action, Reducer, Environment, View, Store를 기본 구성으로 갖는다. 이전 포스트에 위와 같은 말을 한 적이 있다. 근데, 예제를 설명하면서 State, Action, Reducer, View, Store 객체에 대한 설명은 했지만 Environment 객체는 찾아볼 수 없었다. (의존성이 객체 형식으로 Reducer에 주입된 것이 아니라 코드로 이어붙이기했다.) 이는 TCA가 최신 버전으로 Release 되면서 TCA 아키텍처를 코드로 정의할 때 아키텍처의 일부 구성이 변경되었기 때문이다. 지난 게시글의 예제 화면에 숫자와 이 숫자를 증가할 수 있는 + 버튼, 감소할 수 있는 - 버튼, 더 다양한 행동을 위해 탭 하면..

Swift 2023.07.10

TCA(The Composable Architecture)란?

최근에 TCA에 관련되어 자료조사할 일이 생겨서 TCA 공식 문서와 공식 업데이트, 개발 방향에 대해 공부한 것을 정리해보려고 한다. TCA pointfree에서 Brandon Williams와 Stephen Ceils가 만들어낸 아키텍처 TCA는 The Composable Architecture의 약자로서, 구성, 테스트 및 인체 공학적으로 개발자가 일관적으로 이해하여 애플리케이션을 구축할 수 있도록 도와주는 라이브러리이다. SwiftUI, UIKit 등 모든 Apple 플랫폼(iOS, macOS, tvOS 및 watchOS)에서 사용할 수 있다. The Composable Architecture can be used to power applications built in many frameworks,..

Swift 2023.07.06

Array, Linked List

배열 Array 연관된 데이터를 하나의 변수에 그룹핑해서 관리하기 위한 방법 메모리 상에서 데이터를 연속적으로 저장하는 것이 특징 장점 배열을 이용하면 하나의 변수에 여러 정보를 담을 수 있고, 반복문과 결합하면 많은 정보도 효율적으로 처리 가능 데이터가 연속적으로 저장되어있기 때문에 index를 통한 접근이 가능 단점 배열의 크기는 선언할 때 고정되어야 함 데이터를 연속적으로 유지해야하기 때문에 삽입/삭제가 오래 걸림 배열 중간에 있는 데이터가 삭제되면, 공간 낭비가 발생함 동적배열이란? 동적배열 배열의 크기는 선언할 때 고정되어야 하기 때문에 동적으로 크기를 변경하는 것이 사실 어렵지만 가능하다. 동적 배열은 초기에 작은 크기의 배열을 선언하고 데이터가 추가될 때마다 크기를 동적으로 확장시키는 방법이..

자료구조 2023.05.12

Swift 네트워크 추상화 - URL 처리방법

RESTful API를 사용하는 네트워킹 통신을 공부하다보니, 네트워크 추상화 단계에 URL을 별도로 처리하는 코드가 있어 궁금증이 들었다. 1. 왜 URL을 별도로 처리해야하는가? 2. URLComponents, URLQueryItem 타입들은 각각 무슨 용도이며, 어떻게 사용되는가? 무조건 공식문서부터 확인했지만 잘 이해가 되지 않았다. 따라서 위 궁금증에 답을 하기 위해서 먼저 기초를 다시 확인할 필요가 있었다. 1. URL 먼저, URL의 개념을 알기 전 URI를 확인하고 넘어가야했다. URI는 우리말로 통합 자원 식별자를 칭한다. 즉, URI는 인터넷 상의 리소스 '자원 자체'를 의미한다고 할 수 있다. URL은 인터넷 상의 리소스가 존재하는 '위치'를 나타내기 위한 규약이다. 즉, URL은 '..

Swift 2023.05.09

Memory

메모리 구조 가상 메모리 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당해 RAM을 관리하는 방식 배경 실제 물리적인 메모리 용량에 한계가 있기 때문에 큰 단일 프로그램이나, 복수의 프로그램을 실행시킬 수 없다. 사용 보조기억장치에 가상의 메모리 공간을 확보하고 프로그램에서 필요한 부분만 메모리에 적재해서 사용한다. 물리적인 메모리가 부족한 경우에도 보조기억장치를 사용하여 프로그램을 실행할 수 있기 때문에, 시스템의 안정성과 신뢰성을 높일 수 있다. 사용 속도는 물리메모리보다 느리다는 단점이 있다. 운영체제는 가상메모리에서 단위 메모리 블록 개념을 사용하여 효율적으로 필요한 만큼의 메모리 공간을 할당한다. 메모리 구조 - 가상 주소 공간 가상 메모리에서 프로그램에 할당된 메모리 공간을 가상..

자료구조 2023.05.03

SwiftUI Firebase Email Auth Login 구현하기

1. 개요 앱을 만들다보면 서버를 이용해서 로그인하는 기능이 필요로할 때가 있다. 이 때, 자체적인 회원가입을 통해 로그인을 하게 할 수도 있다. 요즘에는 SNS 계정 연동으로 로그인하는 경우가 많지만, 이번 게시글에서는 Email Auth를 사용하여 FirebaseAuth에 회원가입을 통해 회원 계정 정보를 등록하고 등록한 정보로 로그인하는 과정을 기록한다. 또한 앱 종료 후 다시 실행시켰을 때 이전 로그인한 기록을 가지고 자동로그인하는 방법도 구현하였다. 2. Firebase와 프로젝트 연결하기 Firebase 프로젝트와 Xcode 프로젝트 생성은 이전 포스팅과 같다. 이미 방법을 알고 있다면 중간에 패키지 추가사항만 확인해두면 되겠다. 먼저, Xcode에서 프로젝트를 생성한다. 프로젝트 생성시 정해..

SwiftUI 2022.12.23

SwiftUI Firebase Auth - Google Account 연동하기

1. 개요 앱을 만들다보면 서버를 이용해서 로그인하는 기능이 필요로할 때가 있다. 이 때, 자체적인 회원가입을 통해 로그인을 하게 할 수도 있지만 대게 다른 소셜 계정을 통해서 로그인하는 방법이 편리할 때가 있다. FirebaseAuth에서는 다양한 소셜 계정으로 서버에 로그인하는 방법을 지원하는데, 여기서 Google 계정을 이용해서 로그인하는 방법을 적용해보고자 한다. 또한 앱 종료 후 다시 실행시켰을 때 이전 로그인한 기록을 가지고 자동로그인하는 방법도 구현하였다. 2. Firebase와 Xcode 연결하기 Firebase 프로젝트와 Xcode 프로젝트 생성은 이전 포스팅과 같다. 이미 방법을 알고 있다면 중간에 패키지 추가사항만 확인해두면 되겠다. 먼저, Xcode에서 프로젝트를 생성한다. 프로젝..

SwiftUI 2022.12.23