[iOS] Delegate에 AnyObject 채택은 필수일까?
·
iOS/개념 & 개발
서론 언제나 그렇듯 아래와 같이 Delegate를 만들고 있었습니다. protocol OOODelegate: AnyObject { func ... } 근데 아차! 싶었습니다. Delegate에 왜 AnyObject를 붙여야 하지?라는 생각을 따로 안 해봤더라고요. 어렴풋이 알고는 있었지만 따로 생각을 해보거나 글로 정리한 적이 없어서 이렇게 포스팅하기로 결정했습니다. iOS에서는 언제 Delegate를 쓸까? Delegate는 Delegate를 채택하는 누군가에게 나의 행위를 위임합니다. Delegate를 사용하는 곳에서는 메서드를 호출만 하고, Delegate를 채택하는 곳에서 메서드를 구현하는 것입니다. iOS에서는 주로 유저 이벤트에 따른 행위를 구현할 때 Delegate를 사용합니다. 예를 들어,..
[iOS] WWDC21 테크톡 - Find and fix hitches in the commit phase
·
WWDC/iOS
서론 WWDC21 테크톡 - Find and fix hitches in the commit phase에서는 Commit phase의 hitch를 찾고 고치는 내용을 다룹니다. hitch와 commit phase가 무엇인지는 WWDC21 테크톡 - Explore UI animation hitches and the render loop를 확인해 주세요. What is a Commit Transaction 터치 이벤트를 받으면 UI를 업데이트하게 됩니다. 시스템은 레이아웃이나 디스플레이 변경이 필요한 서브 뷰들을 기록합니다. 그리고 다음 Commit phase에서 시스템에 의해 draw와 layoutSubviews가 호출되면서 업데이트 됩니다. Commit Transaction은 4단계로 이루어집니다. lay..
[iOS] WWDC21 테크톡 - Explore UI animation hitches and the render loop
·
WWDC/iOS
서론 WWDC21 테크톡 - Explore UI animation hitches and the render loop에서는 hitch와 render loop가 무엇인지 알아보고, hitch의 종류, hitch를 측정하는 방법에 대해 알아봅니다. 이번 포스팅에서는 측정하는 방법까지만 다루고, 다음 포스팅인 Find and fix hitches in the commit phase에서 hitch를 제거하는 방법을 알아보겠습니다. What is a hitch 앱에서 애니메이션은 사용자와 앱 사이의 시각적 연결을 도와줍니다. 예를 들어, 사용자가 손가락을 화면을 쓸어넘기면 화면이 변해야 합니다. hitch는 예상보다 늦게 화면에 나타나는 프레임으로, 다음 프레임의 생성이 늦어져 애니메이션이 끊기는 시간입니다. hi..
[iOS] Alert 개선 과정 단계별로 살펴보기
·
iOS/개념 & 개발
서론UIAlertController는 보일러 플레이트가 생기기 쉽습니다.UIAlertController 생성UIAlertAction 생성present위 세 가지 로직이 반복적으로 사용되기 때문입니다. 메서드로 분리할지라도 UIAlertAction 생성에 중복 코드가 생기고, 그게 아니라면 메서드 파라미터가 많아집니다. 이번에는 Wrapper를 사용해 선언형 구조로 Alert를 깔끔하게 정리해 보겠습니다. 많이 고민하며 진행했지만 잘못된 부분이 있을 수 있습니다. 댓글로 피드백 꼭 부탁드립니다. 전체 코드는 아래 링크에서 확인 가능합니다. https://github.com/jeongju9216/SwiftPractice/tree/main/ExampleAlertWrapper/ExampleAlertWrapper..
[Xcode] Thread Sanitizer - Race Condition 디버깅
·
iOS/Xcode
서론 최근 Xcode의 Thread Sanitizer 기능에 대해 알게 되었습니다. 직접 사용해보니 흥미로워서 공유 목적으로 포스팅 작성합니다. 그리고 혹시 Sanitizer라는 영단어를 들어보셨나요? 전 이번에 처음 들어봤는데요. 소독제, 살균제라는 뜻이더라고요. Thread를 소독해주는 기능(?)이라는 표현 같습니다 ㅋㅋ Race Condition TSan(Thread Sanitizer)는 런타임에 Race Condition을 탐지해 줍니다. 그래서 일단 Race Condition이 무엇인지 간단하게 살펴보도록 하겠습니다. Race Condition이란 현재 작업 이외의 또다른 작업의 타이밍(작업순서)에 따라 결과가 달라져 여러 결과를 만들어낼 수 있는 상황을 말합니다. 생김새가 비슷한 단어로는 Da..
[iOS] 작심삼일 개발 일지 6 - 대규모 2.0 패치
·
iOS 프로젝트/작심삼일
서론지난 포스팅에서 작심삼일을 사용하면서 느낀점과 개선 계획에 대해 다루었습니다. (작심삼일 개발 일지 5 - 실사용 후기 & 개선 계획) 이중에서 여러 개 목표를 등록할 수 있는 기능을 포함해 대규모 2.0 패치를 진행했습니다. 이번 포스팅에서는 변경점을 간단히 안내하겠습니다. 사용하시면서 의견이 있으시다면 댓글로 리뷰 부탁드립니다. 작심삼일 다운로드 링크 ‎작심삼일: 원클릭 목표 달성‎항상 큰 목표를 잡고 포기하거나 실패하는 일이 많습니다. 작심삼일을 이용해 작심삼일에 도전하세요!apps.apple.com 앱 사용 일수 표시앱을 사용한 일수를 표시하였습니다. 상단 왼쪽에 "작심 1일" 문구가 보이시나요? 오늘이 1일차 사용이라 작심 1일로 표시된 것입니다. 이렇게 앱을 사용한 일수를 표시해서 성취감을..
[iOS] iOS 시뮬레이터와 Android 에뮬레이터 차이점
·
iOS/개념 & 개발
서론 갑작스레 iOS의 시뮬레이터와 안드로이드의 에뮬레이터 차이점이 궁금했습니다. 에뮬레이터는 왜 시뮬레이터보다 느릴까?라는 생각에서 시작된 의문이었습니다. 찾아보니 생각보다 근본적인(?) 이유때문에 차이가 있는 거였습니다. 시뮬레이터(Simulator) 시뮬레이터는 실제 기기의 표면적인 결과만 모방하고, 그 안에서 일어나는 모든 과정을 다 구현하지는 않습니다. 예를 들어, 아이폰의 CPU와 OS의 모든 것을 그대로 구현한 것은 아니지만, 시뮬레이터에 앱을 올렸을 때 실제 기기와 결과가 동작하도록 구현되어 있습니다. 그래서 시뮬레이터와 실제 기기 간의 동작에 차이가 있을 수 있고, 서로를 완전히 대체 가능하지 않습니다. 저는 이 개념을 시뮬레이션 게임과 함께 생각하니 이해가 빠르게 되었습니다. 비행기 시..
[iOS] 비전 프로(Apple Vision Pro) 시뮬레이터 체험
·
iOS/개념 & 개발
Xcode 15 beta 2 릴리즈 2023년 6월 22일, Xcode 15 beta 2와 함께 Vision Pro SDK가 릴리즈되었습니다. visionOS 시뮬레이터 SDK 릴리즈 소식 및 다운로드 방법 [IT 소식] visionOS 시뮬레이터 SDK 릴리즈 소식 및 다운로드 방법 visionOS SDK 릴리즈 2023년 6월 22일 드디어 visionOS SDK가 릴리즈 되었습니다. Xcode 15부터 사용할 수 있으며 Preview에서 앱을 실행시킬 수 있다고 합니다. 실내 레이아웃과 조명 환경을 변경할 수 있다는 jeong9216.tistory.com 저도 후다닥 Xcode 15를 다운 받아서 실행해봤습니다. 애플에서 샘플 코드도 올려줘서 체험해보기가 어렵지 않았어요. 전체 개요 : https:..
[iOS] 작심삼일 개발 일지 5 - 실사용 후기 & 개선 계획
·
iOS 프로젝트/작심삼일
서론 작심삼일 앱은 제가 처음 개발한 목표달성 앱입니다. 2022.02.02 - [iOS 프로젝트/작심삼일] - [iOS] "작심삼일" 출시 기념 앱 소개 앱 소개 글을 작성한지도 벌써 1년하고도 4개월이 지났네요. 작심삼일 앱을 꾸준히 확장하고 싶었는데 앱 자체가 너무 간단하고, 애초에 기획부터 간단함을 추구했기 때문에 애매한 감이 있었습니다. 그래서 직접 본격적으로 사용해보면서 뭐가 불편한지, 더 있으면 좋을 기능은 무엇인지 생각해보았습니다. 느낀 점 일단 간편하고 직관적이었습니다. 목표를 입력하고, 버튼 한 번 딸깍만 하면 달성 일수가 오르기 때문입니다. 그리고 3일마다 축하 메시지를 보여줘서 나름 뿌듯하기도 했습니다. 근데 명분이 너무 약하다는 생각이 들었습니다. 달성 일수 텍스트 하나만으로는 꾸..
[iOS] WWDC23 - What's new in Xcode 15
·
WWDC/iOS
서론 WWDC23에서는 한글 자막을 지원하지 않아 파파고와 함께 정리했습니다. 얼른 한글 자막이 추가되기를 기원합니다🙏 What's new in 시리즈 중 SF 심볼을 먼저 볼까 Xcode 15를 먼저 볼까 고민했습니다. 고민 중에 이걸 봤는데 너무 흥미로운거에요. 바로 Xcode 15 영상부터 보기로 결정했습니다. ㅋㅋ (근데 다 보고 나니까 막상 저 내용은 안 나옴;;) 금쪽이같은 Xcode가 15에는 좀 성장했을지 기대됩니다. WWDC23부터는 영상 챕터를 지원합니다. 따라서 포스팅도 챕터 별로 나눠 작성했습니다. (Xcode 다운로드 챕터는 생략했습니다.) Code completion updates Code completion을 통해 원하는 코드를 더 빠르고 실수 없이 작성할 수 있습니다. Xco..
[iOS] WWDC23 - What's new in UIKit
·
WWDC/iOS
서론 한글 자막을 지원하지 않아 파파고와 함께 정리를 해보았습니다. ViewController Lifecycles, CollectionView 등등 아는 단어가 나오니 흥미가 더 생기는 거 같아요. Internationalization 챕터에서는 한글에 대해서도 나옵니다 ㅎㅎ 또한, 매크로와 관련된 내용도 포함되어 있습니다. 매크로는 WWDC 23에서 Swift macros로 소개된 기능인데요. [Swift] WWDC23 - What's new in Swift에서 소개를 다루고 있으니 참고 부탁드립니다. WWDC23부터는 챕터 기능을 지원합니다. 따라서 포스팅도 챕터 단위로 문단을 나눴습니다. Key feature: Xcode previews UIKit으로 Xcode Preview를 사용할 수 있습니다...
[iOS] Jetflix 9. 리팩토링 - 무한 스크롤과 TabBar 클릭
·
iOS 프로젝트/클론
* 진행 코드는 https://github.com/jeongju9216/Jetflix에서 볼 수 있고, PR에서 에피소드 단위로 코드를 확인할 수 있습니다. 서론이번 Jetflix 9 리팩토링은 무한 스크롤과 Tab 이벤트를 구현했습니다. 상용 앱처럼 스크롤 맨 아래까지 내려오면 다음 컨텐츠를 load하는 기능과 탭바를 누르면 맨 위로 스크롤되는 기능입니다. (이번 포스팅을 마지막으로 iOS 공부는 줄이고 코딩 테스트 연습에 주력하려고 합니다. 작년부터 코딩 테스트를 보기 시작했는데 초조함, 부담감때문인지 어째 작년보다 통과율이 더 낮네요 ㅎㅎ; 그래서 iOS 공부보다는 코딩테스트 공부에 주력하려고 합니다. iOS 취업을 하려면 iOS 공부를 줄여야 하다니.. 아이러니하면서 속상함이 크네요. (코테만을 ..
[iOS] Jetflix 8. 리팩토링 - 의존성 주입
·
iOS 프로젝트/클론
* 진행 코드는 https://github.com/jeongju9216/Jetflix에서 볼 수 있고, PR에서 에피소드 단위로 코드를 확인할 수 있습니다. 서론 이번에는 프로젝트에 의존성 주입을 개선했습니다. 기존에는 객체가 필요한 곳에서 바로 객체를 생성하여 사용했습니다. 그래서 ViewController에서 ViewModel을 생성할 때면 UseCase와 Repository를 매번 생성해야 했습니다. 이를 DI Container를 이용해 외부에서 주입해서 중복되는 코드를 줄이고, 의존성 관심사를 DI Container로 몰아 넣어서 프로젝트 관리 용이, 객체 재사용성을 높이도록 개선했습니다. let viewModel = HomeViewModel(getContentUseCase: .init(repos..
[iOS] Jetflix 7. 리팩토링 - CollectionView 개선
·
iOS 프로젝트/클론
* 진행 코드는 https://github.com/jeongju9216/Jetflix에서 볼 수 있고, PR에서 에피소드 단위로 코드를 확인할 수 있습니다. 서론 이번 포스팅에서는 리스트 레이아웃을 개선한 내용을 작성하겠습니다. 기존의 UITableView + CollectionView FlowLayout 구조를 CollectionView CompositionalLayout 단일 구조로 변경했습니다. 고수님들께는 간단한 작업일 수 있지만, 저는 이 작은 작업에서도 왜 오래된 코드를 최신 코드로 바꾸기 어려운건지 느낄 수 있었습니다 ㅎㅎ; 개선 내용은 아래와 같습니다. CollectionView CompositionalLayout 적용 UICollectionViewDiffableDataSource 적용 D..
[iOS] Jetflix 6. 리팩토링 - UseCase 구현
·
iOS 프로젝트/클론
* 진행 코드는 https://github.com/jeongju9216/Jetflix에서 볼 수 있고, PR에서 에피소드 단위로 코드를 확인할 수 있습니다. 서론 원래는 UseCase와 View 개선을 함께 다루려고 했지만 UseCase만 먼저 작성하기로 했습니다. Clean Architecture에서 UseCase를 구현할 때 가장 애매하고 고민이 많아지는 것 같습니다. Clean Architecture 학습을 목표로 제 프로젝트에 맞게 고민하면서 코드를 작성하고 있으나 잘 구현하고 있는지...조차 잘 모르겠습니다. 혹시나 보시는 고수분이 계신다면 댓글로 가르침 주시면 정말 감사할듯 합니다 ㅎㅎ 개선 내용은 아래와 같습니다. UseCase를 구현하여 ViewModel과 Repository의 연결을 끊음..
유정주
'아이폰' 태그의 글 목록