iOS 79

[Xcode] Thread Sanitizer - Race Condition 디버깅

서론 최근 Xcode의 Thread Sanitizer 기능에 대해 알게 되었습니다. 직접 사용해보니 흥미로워서 공유 목적으로 포스팅 작성합니다. 그리고 혹시 Sanitizer라는 영단어를 들어보셨나요? 전 이번에 처음 들어봤는데요. 소독제, 살균제라는 뜻이더라고요. Thread를 소독해주는 기능(?)이라는 표현 같습니다 ㅋㅋ Race Condition TSan(Thread Sanitizer)는 런타임에 Race Condition을 탐지해 줍니다. 그래서 일단 Race Condition이 무엇인지 간단하게 살펴보도록 하겠습니다. Race Condition이란 현재 작업 이외의 또다른 작업의 타이밍(작업순서)에 따라 결과가 달라져 여러 결과를 만들어낼 수 있는 상황을 말합니다. 생김새가 비슷한 단어로는 Da..

iOS/Xcode 2023.07.26

[iOS] iOS 시뮬레이터와 Android 에뮬레이터 차이점

서론 갑작스레 iOS의 시뮬레이터와 안드로이드의 에뮬레이터 차이점이 궁금했습니다. 에뮬레이터는 왜 시뮬레이터보다 느릴까?라는 생각에서 시작된 의문이었습니다. 찾아보니 생각보다 근본적인(?) 이유때문에 차이가 있는 거였습니다. 시뮬레이터(Simulator) 시뮬레이터는 실제 기기의 표면적인 결과만 모방하고, 그 안에서 일어나는 모든 과정을 다 구현하지는 않습니다. 예를 들어, 아이폰의 CPU와 OS의 모든 것을 그대로 구현한 것은 아니지만, 시뮬레이터에 앱을 올렸을 때 실제 기기와 결과가 동작하도록 구현되어 있습니다. 그래서 시뮬레이터와 실제 기기 간의 동작에 차이가 있을 수 있고, 서로를 완전히 대체 가능하지 않습니다. 저는 이 개념을 시뮬레이션 게임과 함께 생각하니 이해가 빠르게 되었습니다. 비행기 시..

iOS/개념 & 개발 2023.06.26

[iOS] 비전 프로(Apple Vision Pro) 시뮬레이터 체험

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/개념 & 개발 2023.06.22

[iOS] UnitTest 사용해보기

서론 의존성 주입 등을 공부하면서 "테스트가 쉬워진다."라는 문장을 자주 접했습니다. 오늘은 UnitTest가 무엇인지 알아보고, Xcode의 UnitTest 기능을 간단히 사용해보겠습니다. UnitTest UnitTest는 프로젝트의 특정 모듈이 의도된대로 정확히 작동하는지 검증하는 절차로, 모든 함수와 메서드에 대한 테스트 케이스를 작성하는 절차를 의미합니다. 작성한 프로그램이 의도대로 잘 동작하는지 검증하는 가장 작은 단위의 테스트라고 할 수도 있습니다. 작은 단위의 테스트이므로 테스트에는 의존성을 최소화해야 합니다. 따라서 각 객체의 관심사를 분리해야 하고, 이때 의존성 분리와 주입이 필요합니다. 저도 최근에 의존성에 대한 포스팅을 작성했는데요. 의존성 주입 DI(Dependency Injecti..

iOS/개념 & 개발 2023.04.25

[iOS] Quick Help 작성

* 이번 포스팅의 Quick Help는 간단한 소개가 목적이라서 복잡하고 모범적인 예시는 Swift 코드를 참고하시면 됩니다! 서론 [iOS] JeongLogger SPM 라이브러리 생성과 배포 라이브러리 준비 라이브러리를 직접 만들고, SPM을 직접 배포해 봅시다. 라이브러리는 모든 프로젝트에서 사용되는 Log 기능으로 만들어볼건데요. 이에 몇 가지 주의점이 있습니다. 혹시 라이브 jeong9216.tistory.com 저번 포스팅에서 JeongLogger라는 SPM 라이브러리를 만들고 배포까지 진행해보았는데요. 오늘은 Quick Help라는 것을 추가해서 라이브러리 퀄리티를 높여보겠습니다. 이게 꼭 필요한가? 싶으신 분들을 위해 미리 Quick Help 적용 차이를 보여드리겠습니다. Quick Hel..

iOS/개념 & 개발 2023.03.21

[iOS] JeongLogger SPM 라이브러리 생성과 배포

라이브러리 준비 라이브러리를 직접 만들고, SPM을 직접 배포해 봅시다. 라이브러리는 모든 프로젝트에서 사용되는 Log 기능으로 만들어볼건데요. 이에 몇 가지 주의점이 있습니다. 혹시 라이브러리 클래스에 고유한 단어를 붙이는 이유가 뭔지 아시나요? 예를 들면, Kingfisher는 "kf"라는 글자처럼요. 이런 글자를 붙이는 이유는 라이브러리 사용자가 사용하는 이름과 중복되는 것을 피하기 위해서 입니다. 같은 이름의 클래스가 있으면 안 된다는 것은 대부분 아실거에요. 그 규칙이 라이브러리의 클래스에도 적용되기 때문에 kf같은 특수한 단어를 붙이는 겁니다. (클래스 뿐만 아니라 이름이 겹치면 안 되는 모든 것에 적용되는 얘기입니다.) 따라서 이번 Logger 라이브러리 이름을 JeongLogger로 만들고..

iOS/개념 & 개발 2023.03.21

[iOS] Combine 준비하기

Combine 준비 TLDR은 처음으로 MVVM을 도입한 프로젝트입니다. 바로 Combine을 도입하진 않았고, 프로퍼티 옵저버인 didSet을 이용해 데이터 바인딩을 구현했습니다. 이제 Combine을 학습해서 도입하고자, 정리하는 포스팅을 한 번 작성하려고 합니다 ㅎㅎ Observable 먼저 기존 Observable에 대해 알아봅시다. Observable 모델은 아래처럼 구현되어 있습니다. final class Observable { typealias Listener = (T) -> Void var listener: Listener? var value: T { didSet { listener?(value) } } init(_ value: T) { self.value = value } func bin..

iOS/개념 & 개발 2023.01.06

[iOS] Apple 개발자 프로그램(멤버십) 등록시 주의할 점

서론 오랜만에 포스팅을 작성하네요. 최근에 최종 탈락으로 인한 심신미약과 졸업 준비로 인해 글을 쓰기가 힘들었습니다 ㅎㅎ; 아무튼, Apple 개발자 프로그램을 갱신하라는 메일이 왔습니다. 애플에게 1년에 한 번씩 친구비를 내는 날이죠. 이 과정에서 발생했던 문제와 Apple 개발자 프로그램을 등록할 때 주의할 점에 대해 알아봅시다. Apple 개발자 프로그램도 구독 결제가 가능하다. 먼저 Apple 개발자 프로그램은 구독이 불가능하다고 알고 계시는 분들이 계실텐데요. Apple 개발자 프로그램도 자동 구독 결제가 가능합니다. 바로 Apple Developer 앱을 이용하는 것이죠. 이 앱에서 계정에 로그인한 후 들어가면 멤버십을 결제하고 구독할 수 있습니다. 매번 카드 결제를 직접 하지 않아도 자동으로..

iOS/개념 & 개발 2022.12.09

[iOS] UserDefaults / CoreData / Realm 간단 비교

서론 UserDefaults, CoreData, Realm은 iOS의 대표적인 데이터 저장 방식입니다. 저는 지금까지 진행한 프로젝트에서는 UserDefaults만 사용했었습니다. 많은 데이터를 저장할 필요가 없기 때문이었는데요. 추후 데이터 저장이 필요한 상황에서 기술 선택을 용이하게 하기 위해 비교 글을 포스팅하기로 했습니다. 각각 어떤 특징이 있는지 알아야 필요한 기술이 뭔지 정확히 알 수 있겠죠?? 장단점을 비교하는 것이 주 목적이기 때문에 깊은 내용까진 다루지 않습니다. UserDefaults 먼저 UserDefaults입니다. UserDefaults는 포스팅으로 다룬 적이 있는데요. ([Swift] UserDefaults 알아보기) UserDefaults는 데이터 저장을 위한 가장 기초적인 방..

iOS/개념 & 개발 2022.10.20

[iOS] 화면 방향에 따라 다른 레이아웃 적용하기 - viewWillTransition

화면 방향에 따라 다른 레이아웃 적용하기 세로 레이아웃과 가로 레이아웃이 다른 앱을 쉽게 볼 수 있습니다. 대표적인 기본 앱은 계산기가 있죠. 스마트폰을 가로로 회전시키면 세로 레이아웃에 View가 추가된 레이아웃으로 변경됩니다. 스마트폰만 지원한다면 "세로로 고정시키면 되지 않나?"라고 생각할 수 있지만, 아이패드까지 지원한다면 화면 방향에 따라 적절한 레이아웃을 고려하는 것이 사용자 경험을 증가시킬 수 있습니다. 생각해보세요! 계산기 앱에서 가로 방향에서만 나오는 여러 수식 버튼들이 세로 방향에서도 나오고, 그 영향으로 버튼이 콩알만 해지면 훨씬 불편해지겠죠?? (여러 수식들로 멀미가 나는건 덤..) viewWillTransition(to:with:) 이럴 때 사용할 수 있는 메서드가 viewWill..

iOS/개념 & 개발 2022.09.15
반응형