swift 25

Wrapped Image Text

흔히 워드를 사용하면 이미지를 글자저럼 취급하여 이미지를 글자 왼쪽이나 중간 사이사이에 배치하는 구성을 확인할 수 있다. iOS에서는 어떻게 구현해야 할지 고민해보다 기사앱을 다뤄보다 직접 구현해본 내용을 정리하려 한다. 보통 아래와 같은 이미지처럼 구성된다. 구성은 아래와 같다. 구현방안 1. 처음 생각한 방안으로는 UILabel의 UIAttachment클래스를 사용하여 이미지를 추가할 수 있는 옵션이 존재하여 AttributedString의 속성으로 image를 넣어주었다. 하지만 구현결과 이미지를 글자하나의 크기로 인식하여 이미지가 커지게 되면 이미지의 하단라인 기준으로 글자가 이어지게 되어 원하던 구현 화면구성이 되지않았다. -구현 실패 2. textView의 속성에 혹시 답이있을지 고민하다 Te..

swift 2022.10.10

Biometric Authentication

Biometric Authentication(생체인증) 흔히 간단하게 로그인하거나 비밀번호를 입력해야할 경우 생체인증(Touch ID, Face ID)을 많이 사용한다. 생체인증에 대해 간단하게 구현해보려고 한다. Local Authentication 생체인증을 사용하려면 LocalAuthentication Framework를 사용하여 구현한다.(iOS8이상부터 사용 가능) LAContext(인증 정책 및 접근권한을 설정)을 사용하여 구현 evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Void) LAContext의 메서드로 policy정책과 인증메세지, 콜백으로 인증성공여부와 Err..

swift 2022.08.31

DropDown 오픈소스 라이브러리 만들기

cocoapods, SPM등 오픈소스 라이브러리들을 많이 사용해 보면서 오픈소스 라이브러리에 관심이 생겼고 직접 만들어 보고싶다는 생각이 들었다. 만들어볼 라이브러리는 DropDown으로 이전 프로젝트에서 iOS에서 기본적으로 제공해주지 않아 외부 라이브러리를 사용했던 기억이 있는데 이번 기회에 custom하게 만들어 사용해보도록 하겠다. 라이브러리 만들기 먼저 프로젝트를 만들 경로로 이동하여 pod lib create '라이브러리이름' 으로 생성 $ pod lib create '라이브러리이름' 위와같이 만들면 아래와 같이 기본 설정에 대해 묻고 용도에 맞게 설정한다. 생성하면 아래와 같이 프로젝트가 생성되며 Example for DropDownSw에서 테스트도 가능하다. Pods-Development ..

swift 2022.08.10

Custom ScrollPaging

Custom ScrollPaging UICollectionViewFlowLayout의 targetContentOffset을 overriding 하여 paging 설정 targetContentOffset(forProposedContentOffset:, withScrollVelocity:) 파라미터인 forProposedContentOffset, withScrollingVelocity 사용 forProposedContentOffset: 스크롤하고 난 뒤의 적절한 offset을 사용 withScrollingVelocity: Scroll에 따른 velocity(왼쪽 스크롤 -, 오른쪽 스크롤 +) CollectionView Paging예시 class SnappingCollectionViewFlowLayout: ..

swift 2022.06.05

RxDataSources

RxDataSources TableView, CollectionView를 Section을 사용해서 정의가능한 프레임워크 Rx를 사용한 반응형 데이터 적용 cellForRowAt을 사용하지 않고 cell데이터 지정 Link Section정의 RxDataSource에 사용될 DataType은 SectionModelType을 준수 items는 cell데이터 타입 등록 struct SectionOfMain { var items: [Item] } extension SectionOfMain: SectionModelType { typealias Item = MainCellData init(original: Self, items: [Item]) { self = original self.items = items } } ..

swift 2022.05.07

RxSwift UnitTest 해보기(RxTest, RxNimble)

프로젝트 목표 프로젝트의 아키텍처는 MVVM패턴에 RxSwift를 적용한 구조(참고) RxTest와 RxNimble을 사용하여 스트림에 테스트 값을 주입하여 expect로 output(Count값)비교 프로젝트 구조 -, +버튼으로 값을 count하는 간단한 프로젝트 ViewModelType 선언 protocol ViewModelType { associatedtype Input associatedtype Output func transform(input: Input) -> Output } ViewModel 구조 ViewModelType을 채택하는 ViewModel 선언 class CountViewModel: ViewModelType { let disposeBag = DisposeBag() struct I..

swift 2022.03.10

The Composable Architecture(TCA)

The Composable Architecture(TCA) pointfree에서 Brandon Williams와 Stephen Ceils가 만들어낸 아키텍처 상태관리, Composition, Side Effect, Testing하게 설계할 수 있는 아키텍처 SwiftUI, UIKit을 지원하고 다른 Apple Flatform(macOS, tvOS, watchOS)에서 사용가능 내부적으로 Combine으로 구성되어 있음(Store...) SPM으로 설치 Composable Architecture 구성 이해하기 State: 로직을 수행하고 UI를 렌더링을 수행하기 위해 필요한 데이터 타입 Action: 사용자 작업, 알림, 이벤트 소스등 기능에서 발생할 수 있는 모든 타입 Environment: API cl..

swift 2022.03.02

Memory Debugging(leak Test)

Memory Debugging ios에선 메모리 관리를 유의해야 한다. 특히 ARC를 사용한 메모리 자동 참조/해제를 하기 때문에 컴파일 타임때 효과적인 메모리 관리를 할순 있지만 retain cycle에 의한 해제되지 못한 메모리들은 앱에 계속 남아있어 메모리누수가 발생할 수 있다. Xcode에서 메모리를 분석할 수 있는 여러 방식들이 있다. Xcode Memory Graph Debugger 현재 사용중인 memory에 대해 Footprint를 확인할 수 있다. 앱의 전체 메모리 사이즈에 대한 그래프를 실시간으로 확인할 수 있다. 하단의 debug memory graph버튼을 클릭해 memory graph도 확인할 수 있다. 왼쪽에서 현재 메모리에 포함되어 있는 객체들과 해당 클래스의 인스터스 및 주소..

swift 2022.02.20

DispatchSemaphore

DispatchSemaphore semaphore를 사용하여 여러 실행 컨텍스트에서 리소스에 대한 액세스를 제어하는 개체 semaphore를 사용하여 동시에 진행되는 작업의 개수를 제한하거나 두 스레드의 이벤트 완료 상태 동기화 임계구역에 들어갈때 wait()(value값 -1), 나올때는 signal()(value값 +1)호출 세마포어의 값이 0이되면 공유자원이 1개 이상이 될때까지 대기 DispatchSemaphore 생성 // 공유 자원의 개수가 3개인 세마포어 생성 let dispatchSemaphore = DispatchSemaphore(value: 3) wait(), signal()을 통한 공유자원 접근 확인 for i in 1...5 { dispatchSemaphore.wait() // 세마..

swift 2022.02.06