일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- swiftdata
- iOS 개발자
- navigationsplitview
- TCA
- regex
- UI
- xcodecloud
- SWIFTUI
- tuist #xcodecloud #ios #ci/cd #swiftlint #firebase
- 모바일
- test
- iOS 13.0+
- uikit
- ios18
- ObjC
- Alamofire
- composablearchitecture
- IOS
- Navigation
- Git
- github
- 개발
- Tuist
- 정규표현식
- xcode
- combine
- Firebase
- concurrency
- network
- SWIFT
- Today
- Total
목록분류 전체보기 (71)
iOS 개발 기록
전에 쓴 글인 Swift의 특징과 프로그래밍 패러다임에서 함수형 프로그래밍의 대표적인 예가 고차함수다. 고차함수는 다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수를 뜻한다. 여기서 함수는 클로저 또한 포함된다. Swift에서 제공하는 대표적인 고차함수의 예는 map, filter, reduce가 있다 . map 기존에 컨테이너의 데이터를 변형해 새로운 컨테이너로 반환한다. 다음 예는 0부터 5까지의 수가 홀수인지 체크하여 Bool형태로 변형하는 방법이다. let numbers: [Int] = [0, 1, 2, 3, 4, 5] var checkOdd: [Bool] = [] // for문 for num in numbers { if num%2 == 1 { checkOdd.append(t..
의존성 규칙 대부분의 아키텍처는 세부적인 면은 차이가 있어도 관심사의 분리라는 공통된 목표를 가지고 있다. 이를 소프트웨어의 계층을 분리함으로 달성할 수 있다. 위의 그림은 해당 아이디어를 구현한 다이어 그램인데, 분리된 계층에서 안쪽으로 들어갈 수록 고수준의 소프트웨어가 된다. 고수준, 저수준에 대해 내가 이해한 바로는 다음과 같다. - 고수준 : 정책, 추상회된 개념, 외부에 의해 변화가 생기지 않는 프로그램 내가 사용했던 코드들을 예로 생각해보면 RealmManager : 데이터를 Realm DB에 CRUD한다. AlamofireManager: 네트워크 통신을 호출한다. - 저수준 : 구체적인 동작, 세부적인 동작을 결정해주는 프로그램 DrawingManager : Drawing 데이터를 Realm..
SOLID 원칙은 함수와 데이터 구조를 클래스로 배치하는 방법, 그리고 이 클래스들을 서로 결합하는 방법을 설명해준다. 여기서 클래스는 함수와 데이터를 결합한 집합을 가리킨다. SOLID 원칙의 목적은 소프트웨어 구조가 다음과 같도록 만드는데 있다. - 변경에 유연하다 - 이해하기 쉽다 - 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. 아래는 이들 SOLID원칙을 이루는 원칙들에 대한 개략적인 설명이다. -SRP(Single Responsibility Principle) 단일 책임 원칙 : 각 소프트웨어 모듈은 변경의 이유가 단 하나여야만 한다. 서로 다른 사용자가 의존하게 되는 코드를 분리하는 것이 핵심. - OCP(Open-Closed Principle) 개방-폐쇄 원칙 : 기존 ..
앱을 만들면서 Text가 개행되는 것에 따라 라인을 그려줘야하는 View를 구현해야 했다. Text 한 줄의 view의 높이를 구해서 전체 View를 나누면 라인의 수가 나올거라 생각해 그 방법으로 구현하려고 했다. 그런데 SwiftUI에서는 View의 크기를 구하는게 UIKit에 비해 까다로웠다. 여기서는 SwiftUI에서 View의 크기를 구하는 두가지 방법을 소개한다. 사실 두개 다 아이디어는 똑같기는 하다. 구하고자 하는 뷰와 똑같은 크기의 하위뷰를 만들어의 하위뷰의 크기를 전달하는 것이다. 1. PreferenceKey Preference 는 Key-Value 로직으로 하위 뷰의 정보를 상위 뷰에 전달할 수 있다. 이를 위해 PreferenceKey 프로토콜을 따르는 Key를 정의해주어야 한다...
PencilKit은 2019년부터 애플에서 지원하는 프레임워크다. PencilKit은 터치와 Apple Pencil 입력을 그림으로 캡처하고 앱에 표시하는 기능을 지원한다. iOS13 이상부터 지원하며 앱에 그림 그리는 기능을 쉽게 구현할 수 있다. PKCanvasView class PKCanvasView : UIScrollView 손가락이나 Apple Pencil을 통해 그려진 콘텐츠를 렌더링하여 앱에 표시하는 뷰. 그림을 그리고 표시하는 뷰라고 생각하면 될것 같다. PKCanvasView에서 그려진 데이터는 PKDrawing에 저장된다. PKDrawing struct PKDrawing PKCanvasView에서 그린 데이터를 저장하는 구조체. PKStroke형태로 저장하며 dataRepresentat..
배경 작년부터 5년 정도면 신구약 66권을 한번씩 다 쓰는 것을 목표로 교회에서 성경필사 챌린지를 진행하고 있다. 새벽예배 때 진행하는 강독 본문을 가지고 진행하며 지금까지 레위기, 바울서신, 요한복음, 욥기를 진행했고 이제 이사야를 쓰게 된다. 다 쓰게 되면 확인을 받고 새 책을 받게 되는데, 문제는 이 책을 다른 곳에 두고 와서 못쓰게 되는 경우들이 생기는 경우들이 종종 있었다. 차라리 자주 들고다니는 아이패드로 작성하는게 낫겠다 싶어 필사 앱을 검색해봤는데 마땅히 나오는게 없었다. 그래서 이번에는 아이패드용 앱 출시를 목적으로 필사 앱을 만들어보려고 한다. 필요 기능 성경 뷰 - 개역개정 애플펜슬 필사 뷰 필사한 내용 저장 기능 메모 뷰 메모한 내용 리스트 뷰 개역개정 저작권 사람들이 가장 많이 사..
개요 앱은 하나 이상의 뷰로 구성되어 있으며, 각각의 뷰들은 라이프 사이클을 가지고 있다. 때문에 뷰의 라이프 사이클을 고려해서 로직을 구성해야 한다. ViewDidLoad 뷰 계층이 메모리에 로드된 직후 시스템에 의해 자동으로 호출된다. 일반적으로 리소스를 초기화 하거나 초기화면을 구성하는 용도로 주로 사용한다. 처음 화면이 만들어질 때 한번만 실행되므로 초기화 코드 작성한다. 메모리에서 뷰가 사라지지 않는 이상 다시 호출되지 않는다. ViewWillAppear 뷰가 나타나기 직전에 항상 호출된다 다른 뷰로 갔다가 돌아올 때 하고 싶은 작업을 실행 화면이 나타날 때마다 수행해야 하는 작업을 여기에 구현 ViewDidAppear 뷰가 나타난 뒤에 실행. 데이터를 화면에 뿌려주거나 애니메이션 등의 뷰를 나..
Swift의 메모리 관리 ARC(Automatic Reference Counting) : ARC가 관리해주는 Reference Counting (참조 횟수 계산) 은 참조 타입인 클래스의 인스턴스에만 적용된다. 구조체나 열거형은 값 타입으로 다른 곳에서 참조하지 않기 때문에 ARC로 관리할 필요가 없다. ARC의 로직 생성 : 런타임 때 동적할당 되는 모든 Object를 Swift Runtime이라는 라이브러리의 HeapObject라는 struct로 표현되어 관리된다. 여기에는 Reference Count와 type meta data를 포함한다. 해제 : ARC 는 인스턴스가 참조하는 다른 프로퍼티의 변수, 상수의 갯수를 세고 1개 이상 존재하면 인스턴스를 메모리에서 없애지 않는다. 카운팅 시점 : 컴파..
📝 Swift의 특징은? 애플이 발표한 스위프트의 언어적 특성은 총 세 가지로, Safe(안전성), Fast(신속성), Expressive(더 나은 표현성)이다. Safe(안전성) : 스위프트는 안전한 프로그래밍을 지향한다. 이는 실수를 줄이는 데에 큰 공헌을 한다! 안정성에 대한 대표적인 예가 바로 옵셔널이다. 이는 변수 또는 상수의 값이 nil일 수 있다는 것을 명시적으로 표현해 문법적으로 프로그래밍의 유연성과 안정성을 담보한다. 그리고 그 외에도 guard 구문, 오류처리, 강력한 타입 통제 등으로 안전성을 확보한다. Fast(신속성) 스위프트는 C언어를 기반으로 한 C++, Objective-C와 같은 프로그래밍 언어를 대체하려는 목적을 가진다. 현재 실행 속도의 최적화, 그리고 더 빠른 컴파일러..
KVC와 KVO란? KVC 정의 : Key-Value-Coding. Key는 String Key나 KeyPath를 이용해 간접적으로 데이터를 가져온다. 객체간 의존성을 낮추고, 결합도가 낮은 소프트웨어를 개발할 수 있게 한다. NSKeyValueCoding 프로토몰에 의해 정의한다. KVC 로직 : 1. Key와 일치하는 프로퍼티를 찾는다. 2. 일치하는 프로퍼티가 없다면 Key와 일치하는 인스턴스 변수를 찾는다. 3. 일치하는 프로퍼티나 인스턴스 변수가 있다면 적용, 없으면 'valueForUndiginedkey'나 'setValue:forUndefinedkey'를 호출한다. 사용 : 위와 같은 로직으로 동작하기 때문에 프로퍼티를 통한 직접 접근보다 느리며, runtime에 접근하기 때문에 Key가 일..